[meta-virtualization] [v2 PATCH] go-cross: Fix host contamination for x86_64 host to x86_64 target
Bruce Ashfield
bruce.ashfield at gmail.com
Fri Sep 23 19:15:42 PDT 2016
On Thu, Sep 22, 2016 at 10:04 AM, Bruce Ashfield <bruce.ashfield at gmail.com>
wrote:
> merged.
>
>
bad news. This broke the build of go-cross on my machines (and on others ..
which
is why I went to look into it).
Errors like this:
------------------------------
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.go-autogen:
line 23: /home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-pok
y-linux/go: No such file or directory
| ./hack/make.sh: line 221:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
| bundles/1.12.0-dev already exists. Removing.
|
| ./hack/make.sh: line 361:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
| ---> Making bundle: dynbinary (in bundles/1.12.0-dev/dynbinary)
| ./hack/make.sh: line 288:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.go-autogen:
line 23: /home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-pok
y-linux/go: No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 13:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-li
nux/go: No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 13:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 13:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 13:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 23:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
| Building: bundles/1.12.0-dev/dynbinary-client/docker-1.12.0-dev
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/docker/1.12.0+git34d9a8240914d30f3a8fe28c1b7d1d4e36d0657b-r0/git/hack/make/.binary:
line 51:
/home/bruce/poky/build/tmp/sysroots/x86_64-linux/usr/bin/x86_64-poky-linux/go:
No such file or directory
------------------
and this:
---------------
Log data follows:
| DEBUG: Executing shell function do_compile
| NOTE: make -j 20 static
| ERROR: oe_runmake failed
|
/home/bruce/poky/build/tmp/work/core2-64-poky-linux/containerd/0.2.2+git0ac3cd1be170d180b2baed755e8f0da547ceb267-r0/git
| cd ctr && go build -ldflags "-w -extldflags -static -X
github.com/docker/containerd.GitCommit=0ac3cd1be170d180b2baed755e8f0da547ceb267
" -tags "" -o ../bin/ctr
| cd containerd && go build -ldflags "-w -extldflags -static -X
github.com/docker/containerd.GitCommit=0ac3cd1be170d180b2baed755e8f0da547ceb267
" -tags "" -o ../bin/containerd
| cd containerd-shim && go build -ldflags "-w -extldflags -static -X
github.com/docker/containerd.GitCommit=0ac3cd1be170d180b2baed755e8f0da547ceb267
" -tags "" -o ../bin/containerd-shim
| # github.com/docker/docker/pkg/term
| cannot load DWARF output from $WORK/
github.com/docker/docker/pkg/term/_obj//_cgo_.o: decoding dwarf section
info at offset 0x4: unsupported version 0
| make: *** [shim-static] Error 2
| make: *** Waiting for unfinished jobs....
| # github.com/docker/docker/pkg/term
| cannot load DWARF output from $WORK/
github.com/docker/docker/pkg/term/_obj//_cgo_.o: decoding dwarf section
info at offset 0x4: unsupported version 0
| # github.com/opencontainers/runc/libcontainer/system
| cannot load DWARF output from $WORK/
github.com/opencontainers/runc/libcontainer/system/_obj//_cgo_
-------------------------------------------
In the spirit of keeping things buildable for the most part, I reverted the
change and we can have another look at this.
Bruce
> Bruce
>
> On Tue, Sep 20, 2016 at 1:01 PM, Jason Wessel <jason.wessel at windriver.com>
> wrote:
>
>> The go-cross package is explicitly for compiling target libraries on
>> the host system. When the target architecture matches the host
>> architecture it will actually use the host's linker and compiler
>> however which can result in the generation of the cgo.a library having
>> linker symbols which might not work properly when compiling other
>> packages.
>>
>> A typical error looks like this when building consul-migrate:
>>
>> /opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/lib/x86_6
>> 4-linux/go/pkg/tool/linux_amd64/link: running x86_64-yocto-linux-gcc
>> failed: exit status 1
>> /opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/libexec/x
>> 86_64-yocto-linux/gcc/x86_64-yocto-linux/5.2.0/ld:
>> /opt/build-intel-x86/tmp/work/core2-64-yocto-linux/consul-mi
>> grate/git-r0/build-tmp/go-link-956548052/000002.o: unrecognized
>> relocation (0x2a) in section `.text'
>> /opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/libexec/x
>> 86_64-yocto-linux/gcc/x86_64-yocto-linux/5.2.0/ld: final link failed:
>> Bad value
>> collect2: error: ld returned 1 exit status
>>
>> The fix is to use the make.bash --target-only option to properly build
>> the libraries with the target toolchain.
>>
>> When the host architecture does not match the target architecture we
>> must also force build the target libraries or they get dynamically
>> populated into the sysroot in an uncontrolled manner by the first
>> package that uses go-cross to compile code.
>>
>> Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
>> ---
>> recipes-devtools/go-cross/go-cross.inc | 10 +++++++++-
>> 1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/recipes-devtools/go-cross/go-cross.inc
>> b/recipes-devtools/go-cross/go-cross.inc
>> index 613e9c7..6363a78 100644
>> --- a/recipes-devtools/go-cross/go-cross.inc
>> +++ b/recipes-devtools/go-cross/go-cross.inc
>> @@ -2,6 +2,10 @@ inherit cross
>>
>> DEPENDS += "go-native"
>>
>> +# Prevent runstrip from running because you get errors when the host
>> arch != target arch
>> +#INHIBIT_PACKAGE_STRIP = "1"
>> +STRIP = "echo"
>> +
>> export GOHOSTOS = "${BUILD_GOOS}"
>> export GOHOSTARCH = "${BUILD_GOARCH}"
>> export GOOS = "${TARGET_GOOS}"
>> @@ -26,6 +30,8 @@ do_compile() {
>>
>> cd src
>> ./make.bash --host-only
>> + # Ensure cgo.a is built with the target toolchain
>> + GO_FLAGS="-a" ./make.bash --target-only
>> }
>>
>> do_install() {
>> @@ -38,7 +44,9 @@ do_install() {
>> install -d ${D}${bindir}
>> for f in ${B}/bin/*
>> do
>> - install -m755 $f ${D}${bindir}
>> + if [ ! -d "$f" ] ; then
>> + install -m755 $f ${D}${bindir}
>> + fi
>> done
>> }
>>
>> --
>> 1.9.1
>>
>> --
>> _______________________________________________
>> meta-virtualization mailing list
>> meta-virtualization at yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/meta-virtualization
>>
>
>
>
> --
> "Thou shalt not follow the NULL pointer, for chaos and madness await thee
> at its end"
>
--
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-virtualization/attachments/20160923/c1a922dc/attachment.html>
More information about the meta-virtualization
mailing list