[OE-core] [PATCH] cmake: add CMAKE_SYSROOT to generated toolchain file
Mikko.Rapeli at bmw.de
Mikko.Rapeli at bmw.de
Fri Aug 24 15:48:22 UTC 2018
On Fri, Aug 24, 2018 at 03:10:28PM +0000, Bach, Pascal wrote:
>
> > > Fixes problems which we have also seen on sumo branch. Thanks for this!
> >
> > Sorry, spoke too soon. This fixes compilation on a few recipes in my tree but
> > there are still lots failures with the same error message. We had a hacky
> > patch to cmake as a workaround but that too causes some problems:
>
> I have not yet figured out what CMake based projects are affected and why.
> The error seems to happen only for certain projects.
In our case it looks like a library is adding target_include_directories()
with SYSTEM keyword in its cmake module. Everyone who includes the cmake module
fails to build. This repeats with a handful of cmake modules and causes all
of their dependencies to fail build with errors like:
.../recipe-sysroot/usr/include/c++/7.3.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
| #include_next <stdlib.h>
| ^~~~~~~~~~
| compilation terminated.
or
| cc1plus: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories]
...
.../recipe-sysroot/usr/include/stdlib.h:133:35: error: missing binary operator before token
"("
| #if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT)
| ^
So to me it looks like using SYSTEM with target_include_directories()
is no longer possible with CMake and gcc > 6:
https://cmake.org/cmake/help/v3.10/command/target_include_directories.html?highlight=target_include_directories
> > --- a/Modules/Compiler/GNU.cmake
> > +++ b/Modules/Compiler/GNU.cmake
> > @@ -45,7 +45,7 @@
> > set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
> > "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E
> > <SOURCE> > <PREPROCESSED_SOURCE>")
> > set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE
> > "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S
> > <SOURCE> -o <ASSEMBLY_SOURCE>")
> > if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS
> > 4) # work around #4462
> > - set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
> > + set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-I ")
> > endif()
> >
> > set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
> >
> > I wonder what the real fix could be...
> >
>
> This looks similar to another workaround I saw.
> Setting CMAKE_NO_SYSTEM_FROM_IMPORTED to True. I'm also not sure what the real fix is.
> The issue is also discussed here: https://gitlab.kitware.com/cmake/cmake/issues/16291
Thanks for the ticket link.
-Mikko
More information about the Openembedded-core
mailing list