@@ -147,20 +147,22 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
147
147
// the libc needs them.
148
148
root := goenv .Get ("TINYGOROOT" )
149
149
var libcDependencies []* compileJob
150
+ var libcJob * compileJob
150
151
switch config .Target .Libc {
151
152
case "darwin-libSystem" :
152
153
job := makeDarwinLibSystemJob (config , tmpdir )
153
154
libcDependencies = append (libcDependencies , job )
154
155
case "musl" :
155
- job , unlock , err := libMusl .load (config , tmpdir )
156
+ var unlock func ()
157
+ libcJob , unlock , err = libMusl .load (config , tmpdir , nil )
156
158
if err != nil {
157
159
return BuildResult {}, err
158
160
}
159
161
defer unlock ()
160
- libcDependencies = append (libcDependencies , dummyCompileJob (filepath .Join (filepath .Dir (job .result ), "crt1.o" )))
161
- libcDependencies = append (libcDependencies , job )
162
+ libcDependencies = append (libcDependencies , dummyCompileJob (filepath .Join (filepath .Dir (libcJob .result ), "crt1.o" )))
163
+ libcDependencies = append (libcDependencies , libcJob )
162
164
case "picolibc" :
163
- libcJob , unlock , err := libPicolibc .load (config , tmpdir )
165
+ libcJob , unlock , err := libPicolibc .load (config , tmpdir , nil )
164
166
if err != nil {
165
167
return BuildResult {}, err
166
168
}
@@ -173,14 +175,14 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
173
175
}
174
176
libcDependencies = append (libcDependencies , dummyCompileJob (path ))
175
177
case "wasmbuiltins" :
176
- libcJob , unlock , err := libWasmBuiltins .load (config , tmpdir )
178
+ libcJob , unlock , err := libWasmBuiltins .load (config , tmpdir , nil )
177
179
if err != nil {
178
180
return BuildResult {}, err
179
181
}
180
182
defer unlock ()
181
183
libcDependencies = append (libcDependencies , libcJob )
182
184
case "mingw-w64" :
183
- job , unlock , err := libMinGW .load (config , tmpdir )
185
+ job , unlock , err := libMinGW .load (config , tmpdir , nil )
184
186
if err != nil {
185
187
return BuildResult {}, err
186
188
}
@@ -685,14 +687,27 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
685
687
// Add compiler-rt dependency if needed. Usually this is a simple load from
686
688
// a cache.
687
689
if config .Target .RTLib == "compiler-rt" {
688
- job , unlock , err := libCompilerRT .load (config , tmpdir )
690
+ job , unlock , err := libCompilerRT .load (config , tmpdir , nil )
689
691
if err != nil {
690
692
return result , err
691
693
}
692
694
defer unlock ()
693
695
linkerDependencies = append (linkerDependencies , job )
694
696
}
695
697
698
+ // The Boehm collector is stored in a separate C library.
699
+ if config .GC () == "boehm" {
700
+ if libcJob == nil {
701
+ return BuildResult {}, fmt .Errorf ("boehm GC isn't supported with libc %s" , config .Target .Libc )
702
+ }
703
+ job , unlock , err := BoehmGC .load (config , tmpdir , libcJob )
704
+ if err != nil {
705
+ return BuildResult {}, err
706
+ }
707
+ defer unlock ()
708
+ linkerDependencies = append (linkerDependencies , job )
709
+ }
710
+
696
711
// Add jobs to compile extra files. These files are in C or assembly and
697
712
// contain things like the interrupt vector table and low level operations
698
713
// such as stack switching.
0 commit comments