go-cross: Fix host contamination for x86_64 host to x86_64 target

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_64-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/x86_64-yocto-linux/gcc/x86_64-yocto-linux/5.2.0/ld: /opt/build-intel-x86/tmp/work/core2-64-yocto-linux/consul-migrate/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/x86_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.  The "go" binaries are thrown
away but the cross compilation libraries are preserved.  The sysroot
strip also has to be disabled because it will run the host strip on
the target binaries.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
This commit is contained in:
Jason Wessel 2016-10-06 15:34:37 -05:00 committed by Bruce Ashfield
parent 5caa9badba
commit 58bc830e73

View File

@ -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,11 @@ do_compile() {
cd src
./make.bash --host-only
# Ensure cgo.a is built with the target toolchain
export GOBIN="${B}/target/bin"
rm -rf ${GOBIN}
mkdir -p ${GOBIN}
GO_FLAGS="-a" ./make.bash
}
do_install() {