@@ -147,20 +147,22 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
147147 // the libc needs them.
148148 root := goenv .Get ("TINYGOROOT" )
149149 var libcDependencies []* compileJob
150+ var libcJob * compileJob
150151 switch config .Target .Libc {
151152 case "darwin-libSystem" :
152153 job := makeDarwinLibSystemJob (config , tmpdir )
153154 libcDependencies = append (libcDependencies , job )
154155 case "musl" :
155- job , unlock , err := libMusl .load (config , tmpdir )
156+ var unlock func ()
157+ libcJob , unlock , err = libMusl .load (config , tmpdir , nil )
156158 if err != nil {
157159 return BuildResult {}, err
158160 }
159161 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 )
162164 case "picolibc" :
163- libcJob , unlock , err := libPicolibc .load (config , tmpdir )
165+ libcJob , unlock , err := libPicolibc .load (config , tmpdir , nil )
164166 if err != nil {
165167 return BuildResult {}, err
166168 }
@@ -173,14 +175,14 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
173175 }
174176 libcDependencies = append (libcDependencies , dummyCompileJob (path ))
175177 case "wasmbuiltins" :
176- libcJob , unlock , err := libWasmBuiltins .load (config , tmpdir )
178+ libcJob , unlock , err := libWasmBuiltins .load (config , tmpdir , nil )
177179 if err != nil {
178180 return BuildResult {}, err
179181 }
180182 defer unlock ()
181183 libcDependencies = append (libcDependencies , libcJob )
182184 case "mingw-w64" :
183- job , unlock , err := libMinGW .load (config , tmpdir )
185+ job , unlock , err := libMinGW .load (config , tmpdir , nil )
184186 if err != nil {
185187 return BuildResult {}, err
186188 }
@@ -685,14 +687,27 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
685687 // Add compiler-rt dependency if needed. Usually this is a simple load from
686688 // a cache.
687689 if config .Target .RTLib == "compiler-rt" {
688- job , unlock , err := libCompilerRT .load (config , tmpdir )
690+ job , unlock , err := libCompilerRT .load (config , tmpdir , nil )
689691 if err != nil {
690692 return result , err
691693 }
692694 defer unlock ()
693695 linkerDependencies = append (linkerDependencies , job )
694696 }
695697
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+
696711 // Add jobs to compile extra files. These files are in C or assembly and
697712 // contain things like the interrupt vector table and low level operations
698713 // such as stack switching.
0 commit comments