]> code.ossystems Code Review - openembedded-core.git/commitdiff
gcc-cross-canadian: Fix cross canadian compiler for baremetal targets
authorAlejandro Hernandez Samaniego <alejandro@enedino.org>
Tue, 11 Jan 2022 02:50:30 +0000 (19:50 -0700)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 12 Jan 2022 07:19:16 +0000 (07:19 +0000)
While building GCC it checks whether the include directory exists,
if it doesnt it throws an error and exits:

| The directory that should contain system headers does not exist:
| tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-riscv32/
    11.2.0-r0/recipe-sysroot/usr/include/
| make[1]: *** [Makefile:3257: stmp-fixinc] Error 1

Even though for the baremetal toolchain not having this directory
does make sense.

We overcame this by removing the --with-sysroot=/not/exist argument
for baremetal toolchains (via TARGET_OS override), however, the
newlib toolchain does have headers and an includedir, hence by fixing
the baremetal toolchain we broke the newlib one since it uses the same
TARGET_OS as baremetal, causing for example (on newlib):

/sdk/sysroots/x86_64-pokysdk-linux/usr/lib/riscv32-poky-elf/gcc/
    riscv32-poky-elf/11.2.0/include/stdint.h:9:16:
fatal error: stdint.h: No such file or directory

| # include_next <stdint.h>
                 ^~~~~~~~~~
compilation terminated.

By creating a dummy includedir, and removing the previous fix we
allow GCC to be built the same way, unifying the cross compiler
for all targets.

After this fix both TCLIBC=baremetal and TCLIBC=newlib SDKs work
properly.

Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/gcc/gcc-cross-canadian.inc

index 495dd9070b10af77f079a7d4647e0a674e7d1d3e..168486bd4ef16db98e6ca369c0d8c3f5d01214b5 100644 (file)
@@ -45,6 +45,9 @@ export WINDRES_FOR_TARGET = "${TARGET_PREFIX}windres"
 export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET}"
 
 do_configure () {
+        if [ ! -d ${RECIPE_SYSROOT}/${target_includedir} ]; then
+            mkdir -p ${RECIPE_SYSROOT}/${target_includedir}
+        fi
        export CC_FOR_BUILD="${BUILD_CC}"
        export CXX_FOR_BUILD="${BUILD_CXX}"
        export CFLAGS_FOR_BUILD="${BUILD_CFLAGS}"
@@ -180,9 +183,6 @@ SYSTEMLIBS = "${target_base_libdir}/"
 SYSTEMLIBS1 = "${target_libdir}/"
 
 EXTRA_OECONF += "--enable-poison-system-directories"
-EXTRA_OECONF:remove:elf = "--with-sysroot=/not/exist"
-EXTRA_OECONF:remove:eabi = "--with-sysroot=/not/exist"
-EXTRA_OECONF:append:elf = " --without-headers --with-newlib"
-EXTRA_OECONF:append:eabi = " --without-headers --with-newlib"
+
 # gcc 4.7 needs -isystem
 export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET} -isystem=${target_includedir}"