From 3194a8c17195909eddeed9c19ec49460a9893674 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 10 Feb 2019 11:57:11 -0800 Subject: clang: Fix nativesdk builds to use clang-native - User lld for linking nativesdk-clang - Enable LTO to build nativesdk-clang - Use -static-libgcc when using gold/lld for nativesdk clang build - Use llvm wrappers for ar ranlib and nm to help LTO - Package and create cross versions of lld Signed-off-by: Khem Raj --- classes/cmake-native.bbclass | 4 +++ recipes-devtools/clang/clang-cross-canadian_git.bb | 6 ++++- recipes-devtools/clang/clang-cross_git.bb | 6 ++++- recipes-devtools/clang/clang-crosssdk_git.bb | 7 +++++- recipes-devtools/clang/clang_git.bb | 29 ++++++++++++++++------ recipes-devtools/clang/nativesdk-clang-glue.bb | 8 ++++-- 6 files changed, 47 insertions(+), 13 deletions(-) diff --git a/classes/cmake-native.bbclass b/classes/cmake-native.bbclass index 911476e..7cdb89d 100644 --- a/classes/cmake-native.bbclass +++ b/classes/cmake-native.bbclass @@ -5,6 +5,8 @@ CCACHE = "" 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}" +OECMAKE_NATIVE_RANLIB ?= "${BUILD_RANLIB}" +OECMAKE_NATIVE_NM ?= "${BUILD_NM}" # Native compiler flags OECMAKE_NATIVE_C_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" @@ -24,6 +26,8 @@ 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_RANLIB ${OECMAKE_NATIVE_RANLIB} CACHE FILEPATH "Archive Indexer" ) +set( CMAKE_NM ${OECMAKE_NATIVE_NM} CACHE FILEPATH "Symbol Lister" ) 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" ) diff --git a/recipes-devtools/clang/clang-cross-canadian_git.bb b/recipes-devtools/clang/clang-cross-canadian_git.bb index acad1bb..cb2a355 100644 --- a/recipes-devtools/clang/clang-cross-canadian_git.bb +++ b/recipes-devtools/clang/clang-cross-canadian_git.bb @@ -25,7 +25,11 @@ do_install() { ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++ ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata + if [ -e ${D}${bindir}/lld ]; then + ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld + ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld + fi cross_canadian_bindirlinks } -SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata" +SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-clang-tidy *-lld *-ld.lld" diff --git a/recipes-devtools/clang/clang-cross_git.bb b/recipes-devtools/clang/clang-cross_git.bb index f7d58b6..01bdfd8 100644 --- a/recipes-devtools/clang/clang-cross_git.bb +++ b/recipes-devtools/clang/clang-cross_git.bb @@ -24,6 +24,10 @@ do_install() { do ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool done + if [ -e ${D}${bindir}/lld ]; then + ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld + ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld + fi } SYSROOT_PREPROCESS_FUNCS += "clangcross_sysroot_preprocess" @@ -32,5 +36,5 @@ clangcross_sysroot_preprocess () { sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir} } SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-llvm-ar \ - *-llvm-ranlib *-llvm-nm" + *-llvm-ranlib *-llvm-nm *-lld *-ld.lld" PACKAGES = "" diff --git a/recipes-devtools/clang/clang-crosssdk_git.bb b/recipes-devtools/clang/clang-crosssdk_git.bb index 066fe5e..9e21d80 100644 --- a/recipes-devtools/clang/clang-crosssdk_git.bb +++ b/recipes-devtools/clang/clang-crosssdk_git.bb @@ -20,11 +20,16 @@ do_install() { ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++ ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata + if [ -e ${D}${bindir}/lld ]; then + ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld + ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld + fi } sysroot_stage_all () { sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir} } -SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata" +SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-clang-tidy *-lld *-ld.lld" PACKAGES = "" + diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb index 331e5cf..40bcaba 100644 --- a/recipes-devtools/clang/clang_git.bb +++ b/recipes-devtools/clang/clang_git.bb @@ -10,6 +10,18 @@ require common-source.inc INHIBIT_DEFAULT_DEPS = "1" +OECMAKE_NATIVE_C_COMPILER_class-nativesdk = "clang -static-libgcc" +OECMAKE_NATIVE_CXX_COMPILER_class-nativesdk = "clang++ -static-libgcc" +OECMAKE_NATIVE_AR_class-nativesdk = "llvm-ar" +OECMAKE_NATIVE_RANLIB_class-nativesdk = "llvm-ranlib" +OECMAKE_NATIVE_NM_class-nativesdk = "llvm-nm" +TOOLCHAIN_OPTIONS_append_class-nativesdk = " -static-libgcc" + +CC_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" +CXX_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" +CPP_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E" +CCLD_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" + inherit cmake cmake-native OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" @@ -45,7 +57,7 @@ def get_clang_experimental_target_arch(bb, d): PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)}" PACKAGECONFIG_class-native = "" -PACKAGECONFIG_class-nativesdk = "thin-lto ${@bb.utils.filter('DISTRO_FEATURES', 'full-lto', d)}" +PACKAGECONFIG_class-nativesdk = "thin-lto" PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx" PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx" @@ -79,6 +91,7 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DLLVM_ENABLE_PROJECTS='clang;lld' \ + -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ -G Ninja ${S}/llvm \ " @@ -87,12 +100,12 @@ EXTRA_OECMAKE_append_class-native = "\ -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' \ -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin \ -DBOOTSTRAP_LLVM_ENABLE_LLD=ON \ - -DBOOTSTRAP_LLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ " EXTRA_OECMAKE_append_class-nativesdk = "\ -DCMAKE_CROSSCOMPILING:BOOL=ON \ + -DLLVM_ENABLE_LLD=ON \ -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ @@ -116,9 +129,9 @@ EXTRA_OECMAKE_append_class-target_riscv64 = "\ EXTRA_OECMAKE_append_class-target_riscv32 = "\ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ " -DEPENDS = "zlib libffi libxml2 ninja-native" -DEPENDS_append_class-nativesdk = " clang-native virtual/${TARGET_PREFIX}binutils-crosssdk virtual/${TARGET_PREFIX}gcc-crosssdk virtual/${TARGET_PREFIX}g++-crosssdk" -DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TOOLCHAIN', 'gcc', 'virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++', '', d)}" +DEPENDS = "binutils zlib libffi libxml2 ninja-native" +DEPENDS_append_class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk" +DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH}" BOOTSTRAPSTAGE ?= "" BOOTSTRAPSTAGE_class-native = "stage2" @@ -126,12 +139,11 @@ INSTALLTARGET ?= "install" INSTALLTARGET_class-native = "stage2-install" PASSTRHOUGH ?= "" PASSTHROUGH_class-native = "\ -CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_ENABLE_LTO;LLVM_BUILD_LLVM_DYLIB;\ -LLVM_BINUTILS_INCDIR;LLVM_LINK_LLVM_DYLIB;\ +CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\ LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\ LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\ LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\ -CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;\ +CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_BINUTILS_INCDIR;\ LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;\ " @@ -172,6 +184,7 @@ FILES_${PN} += "\ ${libdir}/BugpointPasses.so \ ${libdir}/LLVMHello.so \ ${libdir}/TestPlugin.so \ + ${libdir}/LLVMgold.so \ ${datadir}/scan-* \ ${datadir}/opt-viewer/ \ " diff --git a/recipes-devtools/clang/nativesdk-clang-glue.bb b/recipes-devtools/clang/nativesdk-clang-glue.bb index 6824bcb..2ab8f6b 100644 --- a/recipes-devtools/clang/nativesdk-clang-glue.bb +++ b/recipes-devtools/clang/nativesdk-clang-glue.bb @@ -7,8 +7,6 @@ LICENSE = "NCSA" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/NCSA;md5=1b5fdec70ee13ad8a91667f16c1959d7" SECTION = "devel" -require clang.inc -require common-source.inc inherit nativesdk DEPENDS += "nativesdk-clang" @@ -25,3 +23,9 @@ sysroot_stage_all () { FILES_${PN} += "${prefix_nativesdk}" FILES_${PN}-dbg = "" + +deltask do_configure +deltask do_compile +deltask do_patch +deltask do_fetch +deltask do_unpack -- cgit v1.2.3-54-g00ecf