Message ID | fddc853041d6b720991aa3438feef2e9a431a91d.1695649859.git.yann.morin@orange.com |
---|---|
State | Accepted |
Headers | show |
Series | [PATCHv3] package/go: cgo for the target needs the toolchain | expand |
>>>>> <yann.morin@orange.com> writes: > From: Christian Stewart <christian@aperture.us> > Build go with cgo support needs to build some .c files to generate > target support code, and thus calls the cross C compiler, which is > failing when the toolchain is not built before host-go: >>>> host-go 1.21.1 Building > cd .../build/host-go-1.21.1/src && GO111MODULE=off GOCACHE=.../per-package/host-go/host/share/host-go-cache GOROOT_BOOTSTRAP=.../per-package/host-go/host/lib/go-1.19.11 GOROOT_FINAL=.../per-package/host-go/host/lib/go GOROOT=".../build/host-go-1.21.1" GOBIN=".../build/host-go-1.21.1/bin" GOOS=linux CC=/usr/bin/gcc CXX=/usr/bin/g++ CGO_ENABLED=1 CC_FOR_TARGET=".../per-package/host-go/host/bin/arm-linux-gcc" CXX_FOR_TARGET=".../per-package/host-go/host/bin/arm-linux-g++" GOOS="linux" GOARCH=arm GOARM=6 GO_ASSUME_CROSSCOMPILING=1 ./make.bash > Building Go cmd/dist using .../per-package/host-go/host/lib/go-1.19.11. (go1.19.11 linux/amd64) > go tool dist: cannot invoke C compiler [".../per-package/host-go/host/bin/arm-linux-gcc"]: fork/exec .../per-package/host-go/host/bin/arm-linux-gcc: no such file or directory > Go needs a system C compiler for use with cgo. > To set a C compiler, set CC=the-compiler. > To disable cgo, set CGO_ENABLED=0. > This happens systematically with PPD, and happens without PPD when > host-go is explicitly built (by running: "make host-go"). > Since only CGO support needs to compile C files, onmy add the toolchain > dependency in that case. > When the target is not supported by go, then there is obviously no need > to depend on the toolchain (even if we unconditionally enable cgo > support in only-for-the-host host-go). > Signed-off-by: Christian Stewart <christian@aperture.us> > [yann.morin@orange.com: > - only add the toolchain dependency for target cgo > - reword commit log > ] > Signed-off-by: Yann E. MORIN <yann.morin@orange.com> > Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> > Cc: Anisse Astier <anisse@astier.eu> > --- > Changes v2 -> v3: > - properly reassign authorship to Christian (sorry for the screw up) > Changes v1 -> v2: > - only add the toolchain dependency for target cgo > - reword commit log > v1 by Christian: > https://lore.kernel.org/buildroot/20230728052530.1122268-1-christian@aperture.us/ > --- > package/go/go.mk | 1 + > 1 file changed, 1 insertion(+) Committed, thanks.
>>>>> "Peter" == Peter Korsgaard <peter@korsgaard.com> writes: >>>>> <yann.morin@orange.com> writes: >> From: Christian Stewart <christian@aperture.us> >> Build go with cgo support needs to build some .c files to generate >> target support code, and thus calls the cross C compiler, which is >> failing when the toolchain is not built before host-go: >>>>> host-go 1.21.1 Building >> cd .../build/host-go-1.21.1/src && GO111MODULE=off GOCACHE=.../per-package/host-go/host/share/host-go-cache GOROOT_BOOTSTRAP=.../per-package/host-go/host/lib/go-1.19.11 GOROOT_FINAL=.../per-package/host-go/host/lib/go GOROOT=".../build/host-go-1.21.1" GOBIN=".../build/host-go-1.21.1/bin" GOOS=linux CC=/usr/bin/gcc CXX=/usr/bin/g++ CGO_ENABLED=1 CC_FOR_TARGET=".../per-package/host-go/host/bin/arm-linux-gcc" CXX_FOR_TARGET=".../per-package/host-go/host/bin/arm-linux-g++" GOOS="linux" GOARCH=arm GOARM=6 GO_ASSUME_CROSSCOMPILING=1 ./make.bash >> Building Go cmd/dist using .../per-package/host-go/host/lib/go-1.19.11. (go1.19.11 linux/amd64) >> go tool dist: cannot invoke C compiler [".../per-package/host-go/host/bin/arm-linux-gcc"]: fork/exec .../per-package/host-go/host/bin/arm-linux-gcc: no such file or directory >> Go needs a system C compiler for use with cgo. >> To set a C compiler, set CC=the-compiler. >> To disable cgo, set CGO_ENABLED=0. >> This happens systematically with PPD, and happens without PPD when >> host-go is explicitly built (by running: "make host-go"). >> Since only CGO support needs to compile C files, onmy add the toolchain >> dependency in that case. >> When the target is not supported by go, then there is obviously no need >> to depend on the toolchain (even if we unconditionally enable cgo >> support in only-for-the-host host-go). >> Signed-off-by: Christian Stewart <christian@aperture.us> >> [yann.morin@orange.com: >> - only add the toolchain dependency for target cgo >> - reword commit log >> ] >> Signed-off-by: Yann E. MORIN <yann.morin@orange.com> >> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> >> Cc: Anisse Astier <anisse@astier.eu> >> --- >> Changes v2 -> v3: >> - properly reassign authorship to Christian (sorry for the screw up) >> Changes v1 -> v2: >> - only add the toolchain dependency for target cgo >> - reword commit log >> v1 by Christian: >> https://lore.kernel.org/buildroot/20230728052530.1122268-1-christian@aperture.us/ >> --- >> package/go/go.mk | 1 + >> 1 file changed, 1 insertion(+) > Committed, thanks. Committed to 2023.02.x and 2023.08.x, thanks.
diff --git a/package/go/go.mk b/package/go/go.mk index e5195089ac..6f080be5c0 100644 --- a/package/go/go.mk +++ b/package/go/go.mk @@ -90,6 +90,7 @@ HOST_GO_TARGET_ENV = \ # any target package needing cgo support must include # 'depends on BR2_TOOLCHAIN_HAS_THREADS' in its config file. ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +HOST_GO_DEPENDENCIES += toolchain HOST_GO_CGO_ENABLED = 1 else HOST_GO_CGO_ENABLED = 0