Re: [OE-core] [PATCH] gcc-sanitizers: Move content from gcclibdir into libdir
From: "Alexandre Belloni" <alexandre.belloni@bootlin.com>
Date: 2021-02-27 15:02:22
Hello, On 25/02/2021 17:36:53+0000, Mike Crowe via lists.openembedded.org wrote:
quoted hunk ↗ jump to hunk
In e9e5744ba8b0d43c8b874d365f83071ce20bf0a1, Khem Raj wrote:quoted
OE does not use the traditional /usr/lib/gcc prefix to store gcc-runtime it basically is moved into libdir, however some newer files were installed by newer versions of gcc especially libgomp ( omp.h openacc.h ) into gcclibdir, so we have content in both directories, this confuses other tools which are trying to guess the gcc installation and its runtime location, since now we have two directories, the tools either choose one or other and we get inconsistent behavior, e.g. clang for aarch64 uses /usr/lib but same clang for riscv64 chose /usr/lib/gccquoted
This change ensures that OE ends up with single valid location for gcc runtime filesI think that the same thing needs to happen in gcc-sanitizers.inc, otherwise I get errors like: | .../recipe-sysroot/usr/include/gpg-error-64.h:884:11: fatal error: sanitizer/lsan_interface.h: No such file or directory when attempting to compile with sanitizers enabled. Signed-off-by: Mike Crowe <redacted> Cc: Khem Raj <redacted> --- meta/recipes-devtools/gcc/gcc-sanitizers.inc | 5 +++++ 1 file changed, 5 insertions(+)diff --git a/meta/recipes-devtools/gcc/gcc-sanitizers.inc b/meta/recipes-devtools/gcc/gcc-sanitizers.inc index 668e14a59f..67b755edf8 100644 --- a/meta/recipes-devtools/gcc/gcc-sanitizers.inc +++ b/meta/recipes-devtools/gcc/gcc-sanitizers.inc@@ -35,6 +35,11 @@ do_compile () { do_install () { cd ${B}/${TARGET_SYS}/libsanitizer/ oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/${TARGET_SYS}/libsanitizer/ install + if [ -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include ]; then + install -d ${D}${libdir}/${TARGET_SYS}/${BINV}/include + mv ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/* ${D}${libdir}/${TARGET_SYS}/${BINV}/include + rmdir --ignore-fail-on-non-empty -p ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include + fi if [ -d ${D}${infodir} ]; then rmdir --ignore-fail-on-non-empty -p ${D}${infodir} fi
This seems to result in the following erro on the autobuilders: ERROR: gcc-sanitizers-10.2.0-r0 do_package: QA Issue: gcc-sanitizers: Files/directories were installed but not shipped in any package: /usr/lib/i686-poky-linux /usr/lib/i686-poky-linux/10.2.0 /usr/lib/i686-poky-linux/10.2.0/include /usr/lib/i686-poky-linux/10.2.0/include/sanitizer /usr/lib/i686-poky-linux/10.2.0/include/sanitizer/common_interface_defs.h /usr/lib/i686-poky-linux/10.2.0/include/sanitizer/lsan_interface.h /usr/lib/i686-poky-linux/10.2.0/include/sanitizer/asan_interface.h /usr/lib/i686-poky-linux/10.2.0/include/sanitizer/tsan_interface.h Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install. gcc-sanitizers: 8 installed and not shipped files. [installed-vs-shipped] ERROR: gcc-sanitizers-10.2.0-r0 do_package: Fatal QA errors found, failing task. It seems to be an easy one to fix. Regards, -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com