@@ -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
}
@@ -701,14 +703,27 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
701
703
// Add compiler-rt dependency if needed. Usually this is a simple load from
702
704
// a cache.
703
705
if config .Target .RTLib == "compiler-rt" {
704
- job , unlock , err := libCompilerRT .load (config , tmpdir )
706
+ job , unlock , err := libCompilerRT .load (config , tmpdir , nil )
705
707
if err != nil {
706
708
return result , err
707
709
}
708
710
defer unlock ()
709
711
linkerDependencies = append (linkerDependencies , job )
710
712
}
711
713
714
+ // The Boehm collector is stored in a separate C library.
715
+ if config .GC () == "boehm" {
716
+ if libcJob == nil {
717
+ return BuildResult {}, fmt .Errorf ("boehm GC isn't supported with libc %s" , config .Target .Libc )
718
+ }
719
+ job , unlock , err := BoehmGC .load (config , tmpdir , libcJob )
720
+ if err != nil {
721
+ return BuildResult {}, err
722
+ }
723
+ defer unlock ()
724
+ linkerDependencies = append (linkerDependencies , job )
725
+ }
726
+
712
727
// Add jobs to compile extra files. These files are in C or assembly and
713
728
// contain things like the interrupt vector table and low level operations
714
729
// such as stack switching.
0 commit comments