summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2016-10-06 15:34:37 -0500
committerBruce Ashfield <bruce.ashfield@windriver.com>2016-10-12 19:10:34 -0400
commit58bc830e732a694ddbdfef8f548387f715bb013c (patch)
tree9bc1157ad3b961eb298b0a580224db0d3820f577
parent5caa9badba5823f3824fdf6db2b0ce20430a58f2 (diff)
downloadmeta-virtualization-58bc830e732a694ddbdfef8f548387f715bb013c.tar.gz
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>
-rw-r--r--recipes-devtools/go-cross/go-cross.inc9
1 files changed, 9 insertions, 0 deletions
diff --git a/recipes-devtools/go-cross/go-cross.inc b/recipes-devtools/go-cross/go-cross.inc
index 613e9c7c..181f4aad 100644
--- a/recipes-devtools/go-cross/go-cross.inc
+++ b/recipes-devtools/go-cross/go-cross.inc
@@ -2,6 +2,10 @@ inherit cross
2 2
3DEPENDS += "go-native" 3DEPENDS += "go-native"
4 4
5# Prevent runstrip from running because you get errors when the host arch != target arch
6#INHIBIT_PACKAGE_STRIP = "1"
7STRIP = "echo"
8
5export GOHOSTOS = "${BUILD_GOOS}" 9export GOHOSTOS = "${BUILD_GOOS}"
6export GOHOSTARCH = "${BUILD_GOARCH}" 10export GOHOSTARCH = "${BUILD_GOARCH}"
7export GOOS = "${TARGET_GOOS}" 11export GOOS = "${TARGET_GOOS}"
@@ -26,6 +30,11 @@ do_compile() {
26 30
27 cd src 31 cd src
28 ./make.bash --host-only 32 ./make.bash --host-only
33 # Ensure cgo.a is built with the target toolchain
34 export GOBIN="${B}/target/bin"
35 rm -rf ${GOBIN}
36 mkdir -p ${GOBIN}
37 GO_FLAGS="-a" ./make.bash
29} 38}
30 39
31do_install() { 40do_install() {