[OE-core] [PATCH v2] go: ensure use of BUILD_CC when building bootstrap tools

Matt Madison matt at madison.systems
Fri Nov 17 15:49:33 UTC 2017


On Thu, Nov 16, 2017 at 3:29 PM, Matt Madison <matt at madison.systems> wrote:
> On Thu, Nov 16, 2017 at 12:29 PM, Burton, Ross <ross.burton at intel.com> wrote:
>> Looks like this is failing on some of our autobuilders, such as
>> https://autobuilder.yocto.io/builders/nightly-musl-x86-64/builds/58/steps/BuildImages/logs/stdio
>
> I'm looking into it.

OK, from my testing, it's not this patch that's causing the build
failures, it's Khem's "go: Fix build with PIE on musl" patch.

The added patch there that changes the default buildmode to 'pie' is
causing the external linker to be used for building go_bootstrap and
target Go compiler and forcing inclusion of the cgo runtime. It will
take some recipe modifications and another patch to Go's make.bash to
deal with this, but I'm not sure that this particular patch is even a
good idea.  Making PIE builds work with musl is OK, but the additional
buildmode default change is too much.

-Matt

>
> Thanks,
> -Matt
>
>>
>> | cmd/go/internal/vet
>> | # cmd/api
>> |
>> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl-x86-64/build/build/tmp/work/core2-64-poky-linux-musl/go/1.9-r0/go/src/host-tools/link:
>> running x86_64-poky-linux-musl-gcc failed: exit status 1
>> |
>> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl-x86-64/build/build/tmp/work/core2-64-poky-linux-musl/go/1.9-r0/build-tmp/go-link-213113620/000000.o:
>> In function `vfprintf':
>> | /usr/include/x86_64-linux-gnu/bits/stdio2.h:127: undefined reference to
>> `__vfprintf_chk'
>> |
>> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl-x86-64/build/build/tmp/work/core2-64-poky-linux-musl/go/1.9-r0/build-tmp/go-link-213113620/000000.o:
>> In function `fprintf':
>> | /usr/include/x86_64-linux-gnu/bits/stdio2.h:97: undefined reference to
>> `__fprintf_chk'
>> | collect2: error: ld returned 1 exit status
>>
>> It's running x86-64-poky-linux-musl-gcc but using headers from /usr, which
>> looks wrong.
>>
>> Ross
>>
>>
>> On 14 November 2017 at 17:21, Matt Madison <matt at madison.systems> wrote:
>>>
>>> Yes, drat it, v3 should fix that.
>>>
>>> Thanks,
>>> -Matt
>>>
>>> On Tue, Nov 14, 2017 at 9:20 AM, Otavio Salvador
>>> <otavio.salvador at ossystems.com.br> wrote:
>>> > Hello Matt,
>>> >
>>> > A minor thing:
>>> >
>>> > Upstream-Status: Pending
>>> >
>>> > On Tue, Nov 14, 2017 at 3:18 PM, Matt Madison <matt at madison.systems>
>>> > wrote:
>>> >> For cross-canadian builds, we were accidentally using
>>> >> the crosssdk C compiler when building the Go compiler
>>> >> bootstrap.  Add a patch to the make script to let us
>>> >> use BUILD_CC, and prepend do_compile to set it in
>>> >> the local environment to ensure that the trailing
>>> >> blank gets stripped, since that confuses Go.
>>> >>
>>> >> [YOCTO #12341]
>>> >>
>>> >> Signed-off-by: Matt Madison <matt at madison.systems>
>>> >> ---
>>> >>  meta/recipes-devtools/go/go-1.9.inc                |  1 +
>>> >>  ...verride-CC-when-building-dist-and-go_boot.patch | 43
>>> >> ++++++++++++++++++++++
>>> >>  meta/recipes-devtools/go/go-common.inc             |  4 ++
>>> >>  3 files changed, 48 insertions(+)
>>> >>  create mode 100644
>>> >> meta/recipes-devtools/go/go-1.9/0010-make.bash-override-CC-when-building-dist-and-go_boot.patch
>>> >>
>>> >> diff --git a/meta/recipes-devtools/go/go-1.9.inc
>>> >> b/meta/recipes-devtools/go/go-1.9.inc
>>> >> index 65adaa8..1dbb5ef 100644
>>> >> --- a/meta/recipes-devtools/go/go-1.9.inc
>>> >> +++ b/meta/recipes-devtools/go/go-1.9.inc
>>> >> @@ -15,6 +15,7 @@ SRC_URI += "\
>>> >>          file://0007-ld-add-soname-to-shareable-objects.patch \
>>> >>
>>> >> file://0008-make.bash-add-GOHOSTxx-indirection-for-cross-canadia.patch \
>>> >>
>>> >> file://0009-cmd-go-buildmode-pie-forces-external-linking-mode-on.patch \
>>> >> +
>>> >> file://0010-make.bash-override-CC-when-building-dist-and-go_boot.patch \
>>> >>  "
>>> >>  SRC_URI[main.md5sum] = "da2d44ea384076efec43ee1f8b7d45d2"
>>> >>  SRC_URI[main.sha256sum] =
>>> >> "a4ab229028ed167ba1986825751463605264e44868362ca8e7accc8be057e993"
>>> >> diff --git
>>> >> a/meta/recipes-devtools/go/go-1.9/0010-make.bash-override-CC-when-building-dist-and-go_boot.patch
>>> >> b/meta/recipes-devtools/go/go-1.9/0010-make.bash-override-CC-when-building-dist-and-go_boot.patch
>>> >> new file mode 100644
>>> >> index 0000000..94ea197
>>> >> --- /dev/null
>>> >> +++
>>> >> b/meta/recipes-devtools/go/go-1.9/0010-make.bash-override-CC-when-building-dist-and-go_boot.patch
>>> >> @@ -0,0 +1,43 @@
>>> >> +From 36787fbf0e0a6298ba1038bbbae526654597eee4 Mon Sep 17 00:00:00 2001
>>> >> +From: Matt Madison <matt at madison.systems>
>>> >> +Date: Tue, 14 Nov 2017 07:38:42 -0800
>>> >> +Subject: [PATCH 10/10] make.bash: override CC when building dist and
>>> >> + go_bootstrap
>>> >> +
>>> >> +For cross-canadian builds, dist and go_bootstrap
>>> >> +run on the build host, so CC needs to point to the
>>> >> +build host's C compiler.  Add a BUILD_CC environment
>>> >> +for this, falling back to $CC if not present.
>>> >> +
>>> >> +Upstream-Status: pending
>>> >> +
>>> >> +Signed-off-by: Matt Madison <matt at madison.systems>
>>> >> +---
>>> >> + src/make.bash | 4 ++--
>>> >> + 1 file changed, 2 insertions(+), 2 deletions(-)
>>> >> +
>>> >> +diff --git a/src/make.bash b/src/make.bash
>>> >> +index 0bdadc6..f199349 100755
>>> >> +--- a/src/make.bash
>>> >> ++++ b/src/make.bash
>>> >> +@@ -131,7 +131,7 @@ if [ "$GOROOT_BOOTSTRAP" = "$GOROOT" ]; then
>>> >> +       exit 1
>>> >> + fi
>>> >> + rm -f cmd/dist/dist
>>> >> +-GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH=""
>>> >> "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
>>> >> ++CC=${BUILD_CC:-${CC}} GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH=""
>>> >> "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
>>> >> +
>>> >> + # -e doesn't propagate out of eval, so check success by hand.
>>> >> + eval $(./cmd/dist/dist env -p || echo FAIL=true)
>>> >> +@@ -167,7 +167,7 @@ elif [ "$1" = "--host-only" ]; then
>>> >> + fi
>>> >> +
>>> >> + if [ "$do_host_build" = "yes" ]; then
>>> >> +-      ./cmd/dist/dist bootstrap $buildall $GO_DISTFLAGS -v # builds
>>> >> go_bootstrap
>>> >> ++      CC=${BUILD_CC:-${CC}} ./cmd/dist/dist bootstrap $buildall
>>> >> $GO_DISTFLAGS -v # builds go_bootstrap
>>> >> +       # Delay move of dist tool to now, because bootstrap may clear
>>> >> tool directory.
>>> >> +       mv cmd/dist/dist "$GOTOOLDIR"/dist
>>> >> +       echo
>>> >> +--
>>> >> +2.7.4
>>> >> +
>>> >> diff --git a/meta/recipes-devtools/go/go-common.inc
>>> >> b/meta/recipes-devtools/go/go-common.inc
>>> >> index ce1eb86..9af6873 100644
>>> >> --- a/meta/recipes-devtools/go/go-common.inc
>>> >> +++ b/meta/recipes-devtools/go/go-common.inc
>>> >> @@ -20,3 +20,7 @@ B = "${S}"
>>> >>
>>> >>  INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
>>> >>  SSTATE_SCAN_CMD = "true"
>>> >> +
>>> >> +do_compile_prepend() {
>>> >> +       BUILD_CC=${BUILD_CC}
>>> >> +}
>>> >> --
>>> >> 2.7.4
>>> >>
>>> >> --
>>> >> _______________________________________________
>>> >> Openembedded-core mailing list
>>> >> Openembedded-core at lists.openembedded.org
>>> >> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>>> >
>>> >
>>> >
>>> > --
>>> > Otavio Salvador                             O.S. Systems
>>> > http://www.ossystems.com.br        http://code.ossystems.com.br
>>> > Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
>>> --
>>> _______________________________________________
>>> Openembedded-core mailing list
>>> Openembedded-core at lists.openembedded.org
>>> http://lists.openembedded.org/mailman/listinfo/openembedded-core



More information about the Openembedded-core mailing list