summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/clang/clang_git.bb
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-devtools/clang/clang_git.bb')
-rw-r--r--recipes-devtools/clang/clang_git.bb64
1 files changed, 41 insertions, 23 deletions
diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb
index 779c4ae..b0c81f1 100644
--- a/recipes-devtools/clang/clang_git.bb
+++ b/recipes-devtools/clang/clang_git.bb
@@ -15,7 +15,6 @@ BUILD_CXX_class-nativesdk = "clang++"
15BUILD_AR_class-nativesdk = "llvm-ar" 15BUILD_AR_class-nativesdk = "llvm-ar"
16BUILD_RANLIB_class-nativesdk = "llvm-ranlib" 16BUILD_RANLIB_class-nativesdk = "llvm-ranlib"
17BUILD_NM_class-nativesdk = "llvm-nm" 17BUILD_NM_class-nativesdk = "llvm-nm"
18LDFLAGS_append_class-nativesdk = " -fuse-ld=gold"
19 18
20inherit cmake cmake-native pkgconfig python3native 19inherit cmake cmake-native pkgconfig python3native
21 20
@@ -35,7 +34,8 @@ def get_clang_arch(bb, d, arch_var):
35 elif re.match('aarch64$', a): return 'AArch64' 34 elif re.match('aarch64$', a): return 'AArch64'
36 elif re.match('aarch64_be$', a): return 'AArch64' 35 elif re.match('aarch64_be$', a): return 'AArch64'
37 elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips' 36 elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
38 elif re.match('riscv(32|64)(eb|)$', a): return 'RISCV' 37 elif re.match('riscv32$', a): return 'riscv32'
38 elif re.match('riscv64$', a): return 'riscv64'
39 elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC' 39 elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC'
40 else: 40 else:
41 bb.note("'%s' is not a primary llvm architecture" % a) 41 bb.note("'%s' is not a primary llvm architecture" % a)
@@ -51,19 +51,19 @@ def get_clang_experimental_target_arch(bb, d):
51 return get_clang_experimental_arch(bb, d, 'TARGET_ARCH') 51 return get_clang_experimental_arch(bb, d, 'TARGET_ARCH')
52 52
53PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs lldb-wchar \ 53PACKAGECONFIG ??= "compiler-rt libcplusplus shared-libs lldb-wchar \
54 ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)} \ 54 ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)} \
55 rtti eh libedit \ 55 rtti eh libedit terminfo \
56 " 56 "
57PACKAGECONFIG_class-native = "rtti eh libedit" 57PACKAGECONFIG_class-native = "rtti eh libedit shared-libs"
58PACKAGECONFIG_class-nativesdk = "rtti eh libedit ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto full-lto', d)}" 58PACKAGECONFIG_class-nativesdk = "rtti eh libedit shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'thin-lto lto', d)}"
59 59
60PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx,compiler-rt" 60PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,libcxx,compiler-rt"
61PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx" 61PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,libcxx"
62PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,libcxx" 62PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,libcxx"
63PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," 63PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
64PACKAGECONFIG[full-lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," 64PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
65PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,," 65PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
66PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON,-DLLVM_ENABLE_TERMINFO=OFF,ncurses," 66PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON -DCOMPILER_RT_TERMINFO_LIB=ON,-DLLVM_ENABLE_TERMINFO=OFF -DCOMPILER_RT_TERMINFO_LIB=OFF,ncurses,"
67PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," 67PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
68PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0," 68PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0,"
69PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,," 69PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
@@ -91,12 +91,10 @@ CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\
91" 91"
92# 92#
93# Default to build all OE-Core supported target arches (user overridable). 93# Default to build all OE-Core supported target arches (user overridable).
94# Gennerally setting LLVM_TARGETS_TO_BUILD = "" in local.conf is ok in most simple situations
95# where only one target architecture is needed along with just one build arch (usually X86)
94# 96#
95LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86" 97LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86"
96LLVM_TARGETS_TO_BUILD_append = ";${@get_clang_host_arch(bb, d)};${@get_clang_target_arch(bb, d)}"
97
98LLVM_TARGETS_TO_BUILD_TARGET ?= "${LLVM_TARGETS_TO_BUILD}"
99LLVM_TARGETS_TO_BUILD_TARGET_append ?= ";${@get_clang_target_arch(bb, d)}"
100 98
101LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= "" 99LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
102LLVM_EXPERIMENTAL_TARGETS_TO_BUILD_append = ";${@get_clang_experimental_target_arch(bb, d)}" 100LLVM_EXPERIMENTAL_TARGETS_TO_BUILD_append = ";${@get_clang_experimental_target_arch(bb, d)}"
@@ -104,6 +102,13 @@ LLVM_EXPERIMENTAL_TARGETS_TO_BUILD_append = ";${@get_clang_experimental_target_a
104HF = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}" 102HF = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
105HF[vardepvalue] = "${HF}" 103HF[vardepvalue] = "${HF}"
106 104
105LLVM_PROJECTS ?= "clang;clang-tools-extra;lld;lldb"
106# There is no LLDB support for RISCV
107LLVM_PROJECTS_riscv32 ?= "clang;clang-tools-extra;lld"
108LLVM_PROJECTS_riscv64 ?= "clang;clang-tools-extra;lld"
109
110#CMAKE_VERBOSE = "VERBOSE=1"
111
107EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ 112EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
108 -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \ 113 -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
109 -DLLVM_ENABLE_PIC=ON \ 114 -DLLVM_ENABLE_PIC=ON \
@@ -114,15 +119,17 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
114 -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \ 119 -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
115 -DCMAKE_SYSTEM_NAME=Linux \ 120 -DCMAKE_SYSTEM_NAME=Linux \
116 -DCMAKE_BUILD_TYPE=Release \ 121 -DCMAKE_BUILD_TYPE=Release \
122 -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
123 -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
117 -DBUILD_SHARED_LIBS=OFF \ 124 -DBUILD_SHARED_LIBS=OFF \
118 -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld;lldb' \ 125 -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
119 -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \ 126 -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
120 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ 127 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
128 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
129 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
121" 130"
122 131
123EXTRA_OECMAKE_append_class-native = "\ 132EXTRA_OECMAKE_append_class-native = "\
124 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
125 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
126 -DPYTHON_EXECUTABLE='${PYTHON}' \ 133 -DPYTHON_EXECUTABLE='${PYTHON}' \
127" 134"
128EXTRA_OECMAKE_append_class-nativesdk = "\ 135EXTRA_OECMAKE_append_class-nativesdk = "\
@@ -131,8 +138,7 @@ EXTRA_OECMAKE_append_class-nativesdk = "\
131 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ 138 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
132 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ 139 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
133 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ 140 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
134 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \ 141 -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
135 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
136 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ 142 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
137 -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ 143 -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
138 -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ 144 -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
@@ -145,12 +151,13 @@ EXTRA_OECMAKE_append_class-target = "\
145 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \ 151 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
146 -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \ 152 -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
147 -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \ 153 -DLLDB_TABLEGEN=${STAGING_BINDIR_NATIVE}/lldb-tblgen \
148 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD_TARGET}' \
149 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \ 154 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
150 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \ 155 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
151 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \ 156 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
157 -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
152 -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \ 158 -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \
153 -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \ 159 -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
160 -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
154 -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \ 161 -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
155 -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \ 162 -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
156 -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \ 163 -DLLVM_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
@@ -161,9 +168,6 @@ DEPENDS = "binutils zlib libffi libxml2 libxml2-native ninja-native swig-native"
161DEPENDS_append_class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk nativesdk-python3" 168DEPENDS_append_class-nativesdk = " clang-crosssdk-${SDK_ARCH} virtual/${TARGET_PREFIX}binutils-crosssdk nativesdk-python3"
162DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} python3" 169DEPENDS_append_class-target = " clang-cross-${TARGET_ARCH} python3"
163 170
164COMPATIBLE_HOST_riscv64 = "null"
165COMPATIBLE_HOST_riscv32 = "null"
166
167RRECOMMENDS_${PN} = "binutils" 171RRECOMMENDS_${PN} = "binutils"
168RRECOMMENDS_${PN}_append_class-target = " libcxx-dev" 172RRECOMMENDS_${PN}_append_class-target = " libcxx-dev"
169 173
@@ -189,13 +193,16 @@ endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
189 lnr ${D}${nonarch_libdir}/clang ${D}${libdir}/clang 193 lnr ${D}${nonarch_libdir}/clang ${D}${libdir}/clang
190 rmdir --ignore-fail-on-non-empty ${D}${libdir} 194 rmdir --ignore-fail-on-non-empty ${D}${libdir}
191 fi 195 fi
196 for t in clang clang++ llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip; do
197 ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
198 done
192} 199}
193 200
194do_install_append_class-native () { 201do_install_append_class-native () {
195 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen 202 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
196 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen 203 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
197 for f in `find ${D}${bindir} -executable -type f -not -type l`; do 204 for f in `find ${D}${bindir} -executable -type f -not -type l`; do
198 test -n "`file $f|grep -i ELF`" && ${STRIP} $f 205 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
199 echo "stripped $f" 206 echo "stripped $f"
200 done 207 done
201 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV} 208 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
@@ -207,7 +214,7 @@ do_install_append_class-nativesdk () {
207 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen 214 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
208 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen 215 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
209 for f in `find ${D}${bindir} -executable -type f -not -type l`; do 216 for f in `find ${D}${bindir} -executable -type f -not -type l`; do
210 test -n "`file $f|grep -i ELF`" && ${STRIP} $f 217 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
211 done 218 done
212 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV} 219 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
213 ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV} 220 ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
@@ -288,3 +295,14 @@ TOOLCHAIN_class-native = "gcc"
288TOOLCHAIN_class-nativesdk = "clang" 295TOOLCHAIN_class-nativesdk = "clang"
289 296
290SYSROOT_DIRS_append_class-target = " ${nonarch_libdir}" 297SYSROOT_DIRS_append_class-target = " ${nonarch_libdir}"
298
299SYSROOT_PREPROCESS_FUNCS_append_class-target = " clang_sysroot_preprocess"
300
301clang_sysroot_preprocess() {
302 install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
303 install -m 0755 ${S}/../llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
304 ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
305 # LLDTargets.cmake references the lld executable(!) that some modules/plugins link to
306 install -d ${SYSROOT_DESTDIR}${bindir}
307 install -m 755 ${D}${bindir}/lld ${SYSROOT_DESTDIR}${bindir}/
308}