[meta-virtualization] [v2 PATCH] go-cross: Fix host contamination for x86_64 host to x86_64 target

Bruce Ashfield bruce.ashfield at gmail.com
Wed Oct 12 16:11:35 PDT 2016


merged

Bruce

On Thu, Oct 6, 2016 at 4:34 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_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 at windriver.com>
> ---
>  recipes-devtools/go-cross/go-cross.inc | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/recipes-devtools/go-cross/go-cross.inc
> b/recipes-devtools/go-cross/go-cross.inc
> index 613e9c7..181f4aa 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,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() {
> --
> 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"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-virtualization/attachments/20161012/9a5c5ae1/attachment.html>


More information about the meta-virtualization mailing list