From 08ff7c87efdf373f1874fcccd9a2a73fc0efef30 Mon Sep 17 00:00:00 2001 From: Alejandro Hernandez Samaniego Date: Mon, 10 Jan 2022 19:50:30 -0700 Subject: gcc-cross-canadian: Fix cross canadian compiler for baremetal targets 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 ^~~~~~~~~~ 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 Signed-off-by: Richard Purdie --- meta/recipes-devtools/gcc/gcc-cross-canadian.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc index 495dd9070b..168486bd4e 100644 --- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc +++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc @@ -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}" -- cgit 1.2.3-korg