diff mbox series

[PATCHv3] package/go: cgo for the target needs the toolchain

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

Commit Message

Yann E. MORIN Sept. 25, 2023, 1:51 p.m. UTC
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(+)

Comments

Peter Korsgaard Sept. 30, 2023, 6:48 a.m. UTC | #1
>>>>>   <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 Korsgaard Oct. 12, 2023, 4:03 p.m. UTC | #2
>>>>> "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 mbox series

Patch

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