[oe] [meta-clang] [PATCH] clang: fix nativesdk build

Khem Raj raj.khem at gmail.com
Wed Aug 23 19:23:50 UTC 2017


On 8/23/17 12:26 AM, liu.ming50 at gmail.com wrote:
> From: Ming Liu <peter.x.liu at external.atlascopco.com>
> 
> I could not manage to build nativesdk-clang, I encountered errors as
> follows: (trimmed for purpose)
> | ../gcc/x86_64-pokysdk-linux/6.3.0/ld::
> | cannot find crt1.o: No such file or directory
> | cannot find crtbegin.o: No such file or directory
> | cannot find -lgcc
> | cannot find -lgcc_s
> 
> After some investigation, I found it's caused by the llvm native tools
> could not compile with crosssdk toolchains. (special linking flags
> are needed)
> 
> So we introduce a cmake-native class with a task to generate a native
> toolchain file, it will be used to build llvm native tools by passed
> with CROSS_TOOLCHAIN_FLAGS_NATIVE.

I have applied it. But does this happen when you use gcc7 for gcc as well ?
> 
> Signed-off-by: Ming Liu <peter.x.liu at external.atlascopco.com>
> ---
>  classes/cmake-native.bbclass        | 47 +++++++++++++++++++++++++++++++++++++
>  recipes-devtools/clang/clang_git.bb |  3 ++-
>  2 files changed, 49 insertions(+), 1 deletion(-)
>  create mode 100644 classes/cmake-native.bbclass
> 
> diff --git a/classes/cmake-native.bbclass b/classes/cmake-native.bbclass
> new file mode 100644
> index 0000000..911476e
> --- /dev/null
> +++ b/classes/cmake-native.bbclass
> @@ -0,0 +1,47 @@
> +# We need to unset CCACHE otherwise cmake gets too confused
> +CCACHE = ""
> +
> +# Native C/C++ compiler (without cpu arch/tune arguments)
> +OECMAKE_NATIVE_C_COMPILER ?= "`echo ${BUILD_CC} | sed 's/^\([^ ]*\).*/\1/'`"
> +OECMAKE_NATIVE_CXX_COMPILER ?= "`echo ${BUILD_CXX} | sed 's/^\([^ ]*\).*/\1/'`"
> +OECMAKE_NATIVE_AR ?= "${BUILD_AR}"
> +
> +# Native compiler flags
> +OECMAKE_NATIVE_C_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CFLAGS}"
> +OECMAKE_NATIVE_CXX_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS}"
> +OECMAKE_NATIVE_C_FLAGS_RELEASE ?= "-DNDEBUG"
> +OECMAKE_NATIVE_CXX_FLAGS_RELEASE ?= "-DNDEBUG"
> +OECMAKE_NATIVE_C_LINK_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS}"
> +OECMAKE_NATIVE_CXX_LINK_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}"
> +BUILD_CXXFLAGS += "${BUILD_CC_ARCH}"
> +BUILD_CFLAGS += "${BUILD_CC_ARCH}"
> +
> +do_generate_native_toolchain_file() {
> +        cat > ${WORKDIR}/toolchain-native.cmake <<EOF
> +set( CMAKE_SYSTEM_NAME `echo ${BUILD_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` )
> +set( CMAKE_SYSTEM_PROCESSOR ${BUILD_ARCH} )
> +set( CMAKE_C_COMPILER ${OECMAKE_NATIVE_C_COMPILER} )
> +set( CMAKE_CXX_COMPILER ${OECMAKE_NATIVE_CXX_COMPILER} )
> +set( CMAKE_ASM_COMPILER ${OECMAKE_NATIVE_C_COMPILER} )
> +set( CMAKE_AR ${OECMAKE_NATIVE_AR} CACHE FILEPATH "Archiver" )
> +set( CMAKE_C_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "CFLAGS" )
> +set( CMAKE_CXX_FLAGS "${OECMAKE_NATIVE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" )
> +set( CMAKE_ASM_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "ASM FLAGS" )
> +set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_NATIVE_C_FLAGS_RELEASE}" CACHE STRING "Additional CFLAGS for release" )
> +set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_NATIVE_CXX_FLAGS_RELEASE}" CACHE STRING "Additional CXXFLAGS for release" )
> +set( CMAKE_ASM_FLAGS_RELEASE "${OECMAKE_NATIVE_C_FLAGS_RELEASE}" CACHE STRING "Additional ASM FLAGS for release" )
> +set( CMAKE_C_LINK_FLAGS "${OECMAKE_NATIVE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
> +set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_NATIVE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
> +
> +set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_NATIVE} )
> +set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
> +set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH )
> +set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
> +set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
> +
> +# Use native cmake modules
> +list(APPEND CMAKE_MODULE_PATH "${STAGING_DATADIR_NATIVE}/cmake/Modules/")
> +EOF
> +}
> +
> +addtask generate_native_toolchain_file after do_patch before do_configure
> diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb
> index fb7854c..c226093 100644
> --- a/recipes-devtools/clang/clang_git.bb
> +++ b/recipes-devtools/clang/clang_git.bb
> @@ -27,7 +27,7 @@ INHIBIT_DEFAULT_DEPS = "1"
>  
>  S = "${WORKDIR}/git"
>  
> -inherit cmake
> +inherit cmake cmake-native
>  
>  OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
>  
> @@ -85,6 +85,7 @@ EXTRA_OECMAKE_append_class-native = "\
>  "
>  EXTRA_OECMAKE_append_class-nativesdk = "\
>                    -DCMAKE_CROSSCOMPILING:BOOL=ON \
> +                  -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
>                    -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
>                    -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
>                    -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
> 




More information about the Openembedded-devel mailing list