On 18/09/2019 09:26, Damien LEFEVRE wrote:
I have a package which requires to first build a x64 binary which is then used to compile the target platform binaries.

The way I got away with it was to build that host binary from do_configure_prepend() and then continue with the build procedure.

I recently upgraded to GCC7 + warrior and now building the host binary from do_configure_prepend fails due to this error:
testCCompiler.c:1:0: error: bad value (armv8-a+crc) for -march= switch

I figured that the arch switch (building for tegra) is defined in HOST_CC_ARCH as: -march=armv8-a+crc -fstack-protector-strong  -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security

If I clear HOST_CC_ARCH in my recipe file, do_configure_prepend succeeds but of course the rest of the build will fail.

So i'm trying to do something like this:
do_configure_prepend(){
     export HOST_CC_ARCH_BACKUP="${HOST_CC_ARCH}"
     HOST_CC_ARCH=""
     echo "HOST_CC_ARCH before cmake: ${HOST_CC_ARCH}"
    CC="${BUILD_CC}" CXX="${BUILD_CXX}" CCFLAGS="${BUILD_CFLAGS}"  CXXFLAGS="${BUILD_CPPFLAGS} -std=c++11" LDFLAGS="${BUILD_LDFLAGS}" cmake ${S}
     make
     HOST_CC_ARCH="${HOST_CC_ARCH_BACKUP}"
}

Two solutions:
1) Work around the problem by manually building the tool yourself. This should be done in do_compile_prepend so that it isn't newer than the makefiles, which would cause it to be regenerated.

There's no need to mess around with HOST_CC_ARCH. That is only used in CC/CXX/FC/CPP, and you should be using BUILD_CC etc anyway. This *should* work:

do_compile_prepend() {
CC="${BUILD_CC}" CPP=... CFLAGS=... CXXFLAGS=... LDFLAGS=... make [target]
}

(expand the ..., I'm lazy)

If HOST_CC_ARCH is being used then there's only a limited number of variables that use it, so override the right ones. May be CPP, may be CXX. Looking at the makefile will tell you. Always just build exactly what you need with the native compiler, not more.

However the proper solution is
2) fix the cmakefiles to work in cross builds. CMake actually makes this even harder than autotools which is quite an achievement: https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling#using-executables-in-the-build-created-during-the-build. Quite likely easier to port to Meson, where you just set the native property on a binary target.

Ross
--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to