summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2019-02-10 11:57:11 -0800
committerKhem Raj <raj.khem@gmail.com>2019-02-11 07:21:21 -0800
commit3194a8c17195909eddeed9c19ec49460a9893674 (patch)
tree1b1f4dcfb66c0017f86189f493ae310b5a6df335
parent1cb1f5220069f6a72d0bbb321aa5bd02111826a0 (diff)
downloadmeta-clang-3194a8c17195909eddeed9c19ec49460a9893674.tar.gz
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 <raj.khem@gmail.com>
-rw-r--r--classes/cmake-native.bbclass4
-rw-r--r--recipes-devtools/clang/clang-cross-canadian_git.bb6
-rw-r--r--recipes-devtools/clang/clang-cross_git.bb6
-rw-r--r--recipes-devtools/clang/clang-crosssdk_git.bb7
-rw-r--r--recipes-devtools/clang/clang_git.bb29
-rw-r--r--recipes-devtools/clang/nativesdk-clang-glue.bb8
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 = ""
5OECMAKE_NATIVE_C_COMPILER ?= "`echo ${BUILD_CC} | sed 's/^\([^ ]*\).*/\1/'`" 5OECMAKE_NATIVE_C_COMPILER ?= "`echo ${BUILD_CC} | sed 's/^\([^ ]*\).*/\1/'`"
6OECMAKE_NATIVE_CXX_COMPILER ?= "`echo ${BUILD_CXX} | sed 's/^\([^ ]*\).*/\1/'`" 6OECMAKE_NATIVE_CXX_COMPILER ?= "`echo ${BUILD_CXX} | sed 's/^\([^ ]*\).*/\1/'`"
7OECMAKE_NATIVE_AR ?= "${BUILD_AR}" 7OECMAKE_NATIVE_AR ?= "${BUILD_AR}"
8OECMAKE_NATIVE_RANLIB ?= "${BUILD_RANLIB}"
9OECMAKE_NATIVE_NM ?= "${BUILD_NM}"
8 10
9# Native compiler flags 11# Native compiler flags
10OECMAKE_NATIVE_C_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" 12OECMAKE_NATIVE_C_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CFLAGS}"
@@ -24,6 +26,8 @@ set( CMAKE_C_COMPILER ${OECMAKE_NATIVE_C_COMPILER} )
24set( CMAKE_CXX_COMPILER ${OECMAKE_NATIVE_CXX_COMPILER} ) 26set( CMAKE_CXX_COMPILER ${OECMAKE_NATIVE_CXX_COMPILER} )
25set( CMAKE_ASM_COMPILER ${OECMAKE_NATIVE_C_COMPILER} ) 27set( CMAKE_ASM_COMPILER ${OECMAKE_NATIVE_C_COMPILER} )
26set( CMAKE_AR ${OECMAKE_NATIVE_AR} CACHE FILEPATH "Archiver" ) 28set( CMAKE_AR ${OECMAKE_NATIVE_AR} CACHE FILEPATH "Archiver" )
29set( CMAKE_RANLIB ${OECMAKE_NATIVE_RANLIB} CACHE FILEPATH "Archive Indexer" )
30set( CMAKE_NM ${OECMAKE_NATIVE_NM} CACHE FILEPATH "Symbol Lister" )
27set( CMAKE_C_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "CFLAGS" ) 31set( CMAKE_C_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "CFLAGS" )
28set( CMAKE_CXX_FLAGS "${OECMAKE_NATIVE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" ) 32set( CMAKE_CXX_FLAGS "${OECMAKE_NATIVE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" )
29set( CMAKE_ASM_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "ASM FLAGS" ) 33set( 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() {
25 ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++ 25 ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++
26 ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy 26 ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy
27 ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata 27 ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata
28 if [ -e ${D}${bindir}/lld ]; then
29 ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld
30 ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld
31 fi
28 cross_canadian_bindirlinks 32 cross_canadian_bindirlinks
29} 33}
30 34
31SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata" 35SSTATE_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() {
24 do 24 do
25 ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool 25 ln -sf ../$tool ${D}${bindir}/${TARGET_PREFIX}$tool
26 done 26 done
27 if [ -e ${D}${bindir}/lld ]; then
28 ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld
29 ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld
30 fi
27} 31}
28 32
29SYSROOT_PREPROCESS_FUNCS += "clangcross_sysroot_preprocess" 33SYSROOT_PREPROCESS_FUNCS += "clangcross_sysroot_preprocess"
@@ -32,5 +36,5 @@ clangcross_sysroot_preprocess () {
32 sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir} 36 sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir}
33} 37}
34SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-llvm-ar \ 38SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-llvm-ar \
35 *-llvm-ranlib *-llvm-nm" 39 *-llvm-ranlib *-llvm-nm *-lld *-ld.lld"
36PACKAGES = "" 40PACKAGES = ""
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() {
20 ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++ 20 ln -sf ../clang++ ${D}${bindir}/${TARGET_PREFIX}clang++
21 ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy 21 ln -sf ../clang-tidy ${D}${bindir}/${TARGET_PREFIX}clang-tidy
22 ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata 22 ln -sf ../llvm-profdata ${D}${bindir}/${TARGET_PREFIX}llvm-profdata
23 if [ -e ${D}${bindir}/lld ]; then
24 ln -sf ../lld ${D}${bindir}/${TARGET_PREFIX}lld
25 ln -sf ../ld.lld ${D}${bindir}/${TARGET_PREFIX}ld.lld
26 fi
23} 27}
24 28
25sysroot_stage_all () { 29sysroot_stage_all () {
26 sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir} 30 sysroot_stage_dir ${D}${bindir} ${SYSROOT_DESTDIR}${bindir}
27} 31}
28 32
29SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata" 33SSTATE_SCAN_FILES += "*-clang *-clang++ *-llvm-profdata *-clang-tidy *-lld *-ld.lld"
30PACKAGES = "" 34PACKAGES = ""
35
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
10 10
11INHIBIT_DEFAULT_DEPS = "1" 11INHIBIT_DEFAULT_DEPS = "1"
12 12
13OECMAKE_NATIVE_C_COMPILER_class-nativesdk = "clang -static-libgcc"
14OECMAKE_NATIVE_CXX_COMPILER_class-nativesdk = "clang++ -static-libgcc"
15OECMAKE_NATIVE_AR_class-nativesdk = "llvm-ar"
16OECMAKE_NATIVE_RANLIB_class-nativesdk = "llvm-ranlib"
17OECMAKE_NATIVE_NM_class-nativesdk = "llvm-nm"
18TOOLCHAIN_OPTIONS_append_class-nativesdk = " -static-libgcc"
19
20CC_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
21CXX_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
22CPP_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E"
23CCLD_class-nativesdk = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
24
13inherit cmake cmake-native 25inherit cmake cmake-native
14 26
15OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" 27OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
@@ -45,7 +57,7 @@ def get_clang_experimental_target_arch(bb, d):
45 57
46PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)}" 58PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)}"
47PACKAGECONFIG_class-native = "" 59PACKAGECONFIG_class-native = ""
48PACKAGECONFIG_class-nativesdk = "thin-lto ${@bb.utils.filter('DISTRO_FEATURES', 'full-lto', d)}" 60PACKAGECONFIG_class-nativesdk = "thin-lto"
49 61
50PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx" 62PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx"
51PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx" 63PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx"
@@ -79,6 +91,7 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
79 -DCMAKE_BUILD_TYPE=Release \ 91 -DCMAKE_BUILD_TYPE=Release \
80 -DBUILD_SHARED_LIBS=OFF \ 92 -DBUILD_SHARED_LIBS=OFF \
81 -DLLVM_ENABLE_PROJECTS='clang;lld' \ 93 -DLLVM_ENABLE_PROJECTS='clang;lld' \
94 -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
82 -G Ninja ${S}/llvm \ 95 -G Ninja ${S}/llvm \
83" 96"
84 97
@@ -87,12 +100,12 @@ EXTRA_OECMAKE_append_class-native = "\
87 -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' \ 100 -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' \
88 -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin \ 101 -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin \
89 -DBOOTSTRAP_LLVM_ENABLE_LLD=ON \ 102 -DBOOTSTRAP_LLVM_ENABLE_LLD=ON \
90 -DBOOTSTRAP_LLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
91 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ 103 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
92 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ 104 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
93" 105"
94EXTRA_OECMAKE_append_class-nativesdk = "\ 106EXTRA_OECMAKE_append_class-nativesdk = "\
95 -DCMAKE_CROSSCOMPILING:BOOL=ON \ 107 -DCMAKE_CROSSCOMPILING:BOOL=ON \
108 -DLLVM_ENABLE_LLD=ON \
96 -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \ 109 -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
97 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ 110 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
98 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ 111 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
@@ -116,9 +129,9 @@ EXTRA_OECMAKE_append_class-target_riscv64 = "\
116EXTRA_OECMAKE_append_class-target_riscv32 = "\ 129EXTRA_OECMAKE_append_class-target_riscv32 = "\
117 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \ 130 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
118" 131"
119DEPENDS = "zlib libffi libxml2 ninja-native" 132DEPENDS = "binutils zlib libffi libxml2 ninja-native"
120DEPENDS_append_class-nativesdk = " clang-native virtual/${TARGET_PREFIX}binutils-crosssdk virtual/${TARGET_PREFIX}gcc-crosssdk virtual/${TARGET_PREFIX}g++-crosssdk" 133DEPENDS_append_class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk"
121DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} ${@bb.utils.contains('TOOLCHAIN', 'gcc', 'virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++', '', d)}" 134DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH}"
122 135
123BOOTSTRAPSTAGE ?= "" 136BOOTSTRAPSTAGE ?= ""
124BOOTSTRAPSTAGE_class-native = "stage2" 137BOOTSTRAPSTAGE_class-native = "stage2"
@@ -126,12 +139,11 @@ INSTALLTARGET ?= "install"
126INSTALLTARGET_class-native = "stage2-install" 139INSTALLTARGET_class-native = "stage2-install"
127PASSTRHOUGH ?= "" 140PASSTRHOUGH ?= ""
128PASSTHROUGH_class-native = "\ 141PASSTHROUGH_class-native = "\
129CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_ENABLE_LTO;LLVM_BUILD_LLVM_DYLIB;\ 142CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\
130LLVM_BINUTILS_INCDIR;LLVM_LINK_LLVM_DYLIB;\
131LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\ 143LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\
132LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\ 144LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\
133LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\ 145LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\
134CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;\ 146CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_BINUTILS_INCDIR;\
135LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;\ 147LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;\
136" 148"
137 149
@@ -172,6 +184,7 @@ FILES_${PN} += "\
172 ${libdir}/BugpointPasses.so \ 184 ${libdir}/BugpointPasses.so \
173 ${libdir}/LLVMHello.so \ 185 ${libdir}/LLVMHello.so \
174 ${libdir}/TestPlugin.so \ 186 ${libdir}/TestPlugin.so \
187 ${libdir}/LLVMgold.so \
175 ${datadir}/scan-* \ 188 ${datadir}/scan-* \
176 ${datadir}/opt-viewer/ \ 189 ${datadir}/opt-viewer/ \
177" 190"
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"
7LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/NCSA;md5=1b5fdec70ee13ad8a91667f16c1959d7" 7LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/NCSA;md5=1b5fdec70ee13ad8a91667f16c1959d7"
8SECTION = "devel" 8SECTION = "devel"
9 9
10require clang.inc
11require common-source.inc
12inherit nativesdk 10inherit nativesdk
13DEPENDS += "nativesdk-clang" 11DEPENDS += "nativesdk-clang"
14 12
@@ -25,3 +23,9 @@ sysroot_stage_all () {
25 23
26FILES_${PN} += "${prefix_nativesdk}" 24FILES_${PN} += "${prefix_nativesdk}"
27FILES_${PN}-dbg = "" 25FILES_${PN}-dbg = ""
26
27deltask do_configure
28deltask do_compile
29deltask do_patch
30deltask do_fetch
31deltask do_unpack