30
30
package phases
31
31
32
32
import (
33
+ "path/filepath"
34
+
33
35
"arduino.cc/builder/builder_utils"
34
36
"arduino.cc/builder/constants"
35
37
"arduino.cc/builder/i18n"
@@ -42,6 +44,7 @@ type CoreBuilder struct{}
42
44
43
45
func (s * CoreBuilder ) Run (ctx * types.Context ) error {
44
46
coreBuildPath := ctx .CoreBuildPath
47
+ coreBuildCachePath := ctx .CoreBuildCachePath
45
48
buildProperties := ctx .BuildProperties
46
49
verbose := ctx .Verbose
47
50
warningsLevel := ctx .WarningsLevel
@@ -52,7 +55,14 @@ func (s *CoreBuilder) Run(ctx *types.Context) error {
52
55
return i18n .WrapError (err )
53
56
}
54
57
55
- archiveFile , objectFiles , err := compileCore (coreBuildPath , buildProperties , verbose , warningsLevel , logger )
58
+ if coreBuildCachePath != "" {
59
+ err := utils .EnsureFolderExists (coreBuildCachePath )
60
+ if err != nil {
61
+ return i18n .WrapError (err )
62
+ }
63
+ }
64
+
65
+ archiveFile , objectFiles , err := compileCore (coreBuildPath , coreBuildCachePath , buildProperties , verbose , warningsLevel , logger )
56
66
if err != nil {
57
67
return i18n .WrapError (err )
58
68
}
@@ -63,7 +73,7 @@ func (s *CoreBuilder) Run(ctx *types.Context) error {
63
73
return nil
64
74
}
65
75
66
- func compileCore (buildPath string , buildProperties properties.Map , verbose bool , warningsLevel string , logger i18n.Logger ) (string , []string , error ) {
76
+ func compileCore (buildPath string , buildCachePath string , buildProperties properties.Map , verbose bool , warningsLevel string , logger i18n.Logger ) (string , []string , error ) {
67
77
coreFolder := buildProperties [constants .BUILD_PROPERTIES_BUILD_CORE_PATH ]
68
78
variantFolder := buildProperties [constants .BUILD_PROPERTIES_BUILD_VARIANT_PATH ]
69
79
@@ -89,15 +99,19 @@ func compileCore(buildPath string, buildProperties properties.Map, verbose bool,
89
99
// Recreate the archive if ANY of the core files (including platform.txt) has changed
90
100
realCoreFolder := utils .GetParentFolder (coreFolder , 2 )
91
101
92
- targetArchivedCore := builder_utils .GetCachedCoreArchiveFileName (buildProperties [constants .BUILD_PROPERTIES_FQBN ], realCoreFolder )
93
- canUseArchivedCore := ! builder_utils .CoreOrReferencedCoreHasChanged (realCoreFolder , targetCoreFolder , targetArchivedCore )
94
-
95
- if canUseArchivedCore {
96
- // use archived core
97
- if verbose {
98
- logger .Println (constants .LOG_LEVEL_INFO , "Using precompiled core" )
102
+ var targetArchivedCore string
103
+ if buildCachePath != "" {
104
+ archivedCoreName := builder_utils .GetCachedCoreArchiveFileName (buildProperties [constants .BUILD_PROPERTIES_FQBN ], realCoreFolder )
105
+ targetArchivedCore = filepath .Join (buildCachePath , archivedCoreName )
106
+ canUseArchivedCore := ! builder_utils .CoreOrReferencedCoreHasChanged (realCoreFolder , targetCoreFolder , targetArchivedCore )
107
+
108
+ if canUseArchivedCore {
109
+ // use archived core
110
+ if verbose {
111
+ logger .Println (constants .LOG_LEVEL_INFO , "Using precompiled core" )
112
+ }
113
+ return targetArchivedCore , variantObjectFiles , nil
99
114
}
100
- return targetArchivedCore , variantObjectFiles , nil
101
115
}
102
116
103
117
coreObjectFiles , err := builder_utils .CompileFiles ([]string {}, coreFolder , true , buildPath , buildProperties , includes , verbose , warningsLevel , logger )
@@ -111,7 +125,10 @@ func compileCore(buildPath string, buildProperties properties.Map, verbose bool,
111
125
}
112
126
113
127
// archive core.a
114
- builder_utils .CopyFile (archiveFile , targetArchivedCore )
128
+ if targetArchivedCore != "" {
129
+ logger .Println (constants .LOG_LEVEL_DEBUG , "Archiving built core (caching) in: " + targetArchivedCore )
130
+ builder_utils .CopyFile (archiveFile , targetArchivedCore )
131
+ }
115
132
116
133
return archiveFile , variantObjectFiles , nil
117
134
}
0 commit comments