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.bb499
1 files changed, 0 insertions, 499 deletions
diff --git a/recipes-devtools/clang/clang_git.bb b/recipes-devtools/clang/clang_git.bb
deleted file mode 100644
index 6e2817c..0000000
--- a/recipes-devtools/clang/clang_git.bb
+++ /dev/null
@@ -1,499 +0,0 @@
1# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4SUMMARY = "LLVM based C/C++ compiler"
5DESCRIPTION = "Clang is an LLVM based C/C++/Objective-C compiler, \
6 which aims to deliver amazingly fast compiles, \
7 extremely useful error and warning messages and \
8 to provide a platform for building great source \
9 level tools. The Clang Static Analyzer and \
10 clang-tidy are tools that automatically find bugs \
11 in your code, and are great examples of the sort \
12 of tools that can be built using the Clang frontend \
13 as a library to parse C/C++ code"
14HOMEPAGE = "http://clang.llvm.org/"
15SECTION = "devel"
16
17require clang.inc
18require common-source.inc
19
20INHIBIT_DEFAULT_DEPS = "1"
21
22BUILD_CC:class-nativesdk = "clang"
23BUILD_CXX:class-nativesdk = "clang++"
24BUILD_AR:class-nativesdk = "llvm-ar"
25BUILD_RANLIB:class-nativesdk = "llvm-ranlib"
26BUILD_NM:class-nativesdk = "llvm-nm"
27
28BUILDSDK_CPPFLAGS:append:class-nativesdk = "${@oe.utils.vartrue('DEBUG_BUILD', ' -Wno-error=unused-command-line-argument', '', d)}"
29
30LDFLAGS:remove:class-nativesdk = "-fuse-ld=lld"
31
32LDFLAGS:append:class-target:riscv32 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
33LDFLAGS:append:class-target:mips = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
34
35inherit cmake cmake-native pkgconfig python3native python3targetconfig
36
37OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH"
38
39def get_clang_arch(bb, d, arch_var):
40 import re
41 a = d.getVar(arch_var)
42 if re.match('(i.86|athlon|x86.64)$', a): return 'X86'
43 elif re.match('arm$', a): return 'ARM'
44 elif re.match('armeb$', a): return 'ARM'
45 elif re.match('aarch64$', a): return 'AArch64'
46 elif re.match('aarch64_be$', a): return 'AArch64'
47 elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
48 elif re.match('riscv32$', a): return 'riscv32'
49 elif re.match('riscv64$', a): return 'riscv64'
50 elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC'
51 elif re.match('loongarch64$', a): return 'loongarch64'
52 else:
53 bb.note("'%s' is not a primary llvm architecture" % a)
54 return ""
55
56def get_clang_host_arch(bb, d):
57 return get_clang_arch(bb, d, 'HOST_ARCH')
58
59def get_clang_target_arch(bb, d):
60 return get_clang_arch(bb, d, 'TARGET_ARCH')
61
62PACKAGECONFIG_CLANG_COMMON = "build-id eh libedit rtti shared-libs \
63 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcplusplus libomp unwindlib', '', d)} \
64 "
65
66PACKAGECONFIG ??= "compiler-rt libcplusplus lldb-wchar terminfo \
67 ${PACKAGECONFIG_CLANG_COMMON} \
68 ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
69 "
70PACKAGECONFIG:class-native = "clangd \
71 ${PACKAGECONFIG_CLANG_COMMON} \
72 "
73PACKAGECONFIG:class-nativesdk = "clangd \
74 ${PACKAGECONFIG_CLANG_COMMON} \
75 ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)} \
76 "
77
78PACKAGECONFIG[bootstrap] = "-DCLANG_ENABLE_BOOTSTRAP=On -DCLANG_BOOTSTRAP_PASSTHROUGH='${PASSTHROUGH}' -DBOOTSTRAP_LLVM_ENABLE_LTO=Thin -DBOOTSTRAP_LLVM_ENABLE_LLD=ON,,,"
79PACKAGECONFIG[build-id] = "-DENABLE_LINKER_BUILD_ID=ON,-DENABLE_LINKER_BUILD_ID=OFF,,"
80PACKAGECONFIG[clangd] = "-DCLANG_ENABLE_CLANGD=ON,-DCLANG_ENABLE_CLANGD=OFF,,"
81
82# Activate to build the dexp tool in clangd
83# Disabled by default for -native since it is known to trigger compiler failure on Debian 11
84# See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15803
85PACKAGECONFIG[clangd-dexp] = "-DCLANGD_BUILD_DEXP=ON,-DCLANGD_BUILD_DEXP=OFF,,"
86
87PACKAGECONFIG[compiler-rt] = "-DCLANG_DEFAULT_RTLIB=compiler-rt,,"
88PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF,,"
89PACKAGECONFIG[libcplusplus] = "-DCLANG_DEFAULT_CXX_STDLIB=libc++,,"
90PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON -DLLDB_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF -DLLDB_ENABLE_LIBEDIT=OFF,libedit libedit-native"
91PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
92PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,"
93PACKAGECONFIG[lldb-lua] = "-DLLDB_ENABLE_LUA=ON,-DLLDB_ENABLE_LUA=OFF,lua"
94PACKAGECONFIG[lldb-wchar] = "-DLLDB_EDITLINE_USE_WCHAR=1,-DLLDB_EDITLINE_USE_WCHAR=0,"
95PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
96PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
97PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
98PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
99PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF,,"
100PACKAGECONFIG[terminfo] = "-DLLVM_ENABLE_TERMINFO=ON -DCOMPILER_RT_TERMINFO_LIB=ON,-DLLVM_ENABLE_TERMINFO=OFF -DCOMPILER_RT_TERMINFO_LIB=OFF,ncurses,"
101PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
102PACKAGECONFIG[unwindlib] = "-DCLANG_DEFAULT_UNWINDLIB=libunwind,-DCLANG_DEFAULT_UNWINDLIB=libgcc,,"
103
104OECMAKE_SOURCEPATH = "${S}/llvm"
105
106OECMAKE_TARGET_COMPILE = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2', 'all', d)}"
107OECMAKE_TARGET_INSTALL = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', 'stage2-install', 'install', d)}"
108BINPATHPREFIX = "${@bb.utils.contains('PACKAGECONFIG', 'bootstrap', '/tools/clang/stage2-bins/NATIVE', '', d)}"
109
110PASSTHROUGH = "\
111CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_CXX_STDLIB;LLVM_BUILD_LLVM_DYLIB;LLVM_LINK_LLVM_DYLIB;\
112LLVM_ENABLE_ASSERTIONS;LLVM_ENABLE_EXPENSIVE_CHECKS;LLVM_ENABLE_PIC;\
113LLVM_BINDINGS_LIST;LLVM_ENABLE_FFI;FFI_INCLUDE_DIR;LLVM_OPTIMIZED_TABLEGEN;\
114LLVM_ENABLE_RTTI;LLVM_ENABLE_EH;LLVM_BUILD_EXTERNAL_COMPILER_RT;CMAKE_SYSTEM_NAME;\
115CMAKE_BUILD_TYPE;BUILD_SHARED_LIBS;LLVM_ENABLE_PROJECTS;LLVM_ENABLE_RUNTIMES;LLVM_BINUTILS_INCDIR;\
116LLVM_TARGETS_TO_BUILD;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;PYTHON_EXECUTABLE;\
117PYTHON_LIBRARY;PYTHON_INCLUDE_DIR;LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN;LLDB_EDITLINE_USE_WCHAR;\
118LLVM_ENABLE_LIBEDIT;LLDB_ENABLE_LIBEDIT;LLDB_PYTHON_RELATIVE_PATH;LLDB_PYTHON_EXE_RELATIVE_PATH;\
119LLDB_PYTHON_EXT_SUFFIX;CMAKE_C_FLAGS_RELEASE;CMAKE_CXX_FLAGS_RELEASE;CMAKE_ASM_FLAGS_RELEASE;\
120CLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;CLANG_DEFAULT_UNWINDLIB;\
121CLANG_DEFAULT_OPENMP_RUNTIME;LLVM_ENABLE_PER_TARGET_RUNTIME_DIR;\
122LLVM_BUILD_TOOLS;LLVM_USE_HOST_TOOLS;LLVM_CONFIG_PATH;\
123"
124#
125# Default to build all OE-Core supported target arches (user overridable).
126# Gennerally setting LLVM_TARGETS_TO_BUILD = "" in local.conf is ok in most simple situations
127# where only one target architecture is needed along with just one build arch (usually X86)
128#
129LLVM_TARGETS_TO_BUILD ?= "AMDGPU;AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;NVPTX;SPIRV"
130
131LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
132
133HF = ""
134HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
135HF[vardepvalue] = "${HF}"
136
137# Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc
138# they are enabled via LLVM_ENABLE_RUNTIMES
139LLVM_PROJECTS ?= "clang;clang-tools-extra;lld${LLDB}"
140LLDB ?= ";lldb"
141# LLDB support for RISCV32/Mips32 does not work yet
142LLDB:riscv32 = ""
143LLDB:mips = ""
144LLDB:mipsel = ""
145LLDB:powerpc = ""
146
147# linux hosts (.so) on Windows .pyd
148SOLIBSDEV:mingw32 = ".pyd"
149
150#CMAKE_VERBOSE = "VERBOSE=1"
151
152EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
153 -DLLVM_APPEND_VC_REV=OFF \
154 -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
155 -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
156 -DLLVM_ENABLE_PIC=ON \
157 -DCLANG_DEFAULT_PIE_ON_LINUX=ON \
158 -DLLVM_BINDINGS_LIST='' \
159 -DLLVM_ENABLE_FFI=ON \
160 -DLLVM_ENABLE_ZSTD=ON \
161 -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
162 -DLLVM_OPTIMIZED_TABLEGEN=ON \
163 -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
164 -DCMAKE_SYSTEM_NAME=Linux \
165 -DCMAKE_BUILD_TYPE=Release \
166 -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
167 -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
168 -DBUILD_SHARED_LIBS=OFF \
169 -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
170 -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
171 -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
172 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
173 -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
174 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
175"
176
177EXTRA_OECMAKE:append:class-native = "\
178 -DPYTHON_EXECUTABLE='${PYTHON}' \
179"
180EXTRA_OECMAKE:append:class-nativesdk = "\
181 -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
182 -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \
183 -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
184 -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
185 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
186 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
187 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
188 -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
189 -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
190 -DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \
191 -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
192 -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
193 -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \
194 -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
195 -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
196 -DPYTHON_EXECUTABLE='${PYTHON}' \
197"
198EXTRA_OECMAKE:append:class-target = "\
199 -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
200 -DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \
201 -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
202 -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
203 -DCMAKE_NM=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-nm \
204 -DCMAKE_STRIP=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-strip \
205 -DLLVM_TARGET_ARCH=${@get_clang_target_arch(bb, d)} \
206 -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
207 -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
208 -DPYTHON_LIBRARY=${STAGING_LIBDIR}/lib${PYTHON_DIR}${PYTHON_ABI}.so \
209 -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
210 -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
211 -DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
212 -DLLDB_PYTHON_EXE_RELATIVE_PATH=${bindir} \
213 -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
214"
215
216DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native"
217DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils nativesdk-python3"
218DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 compiler-rt libcxx"
219
220RRECOMMENDS:${PN} = "binutils"
221RRECOMMENDS:${PN}:append:class-target = " libcxx-dev"
222
223# patch out build host paths for reproducibility
224reproducible_build_variables() {
225 sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \
226 -e "s,--sysroot=${RECIPE_SYSROOT},,g" \
227 -e "s,${STAGING_DIR_HOST},,g" \
228 -e "s,${S}/llvm,,g" \
229 -e "s,${B},,g" \
230 ${B}/tools/llvm-config/BuildVariables.inc
231}
232
233do_configure:append:class-target() {
234 reproducible_build_variables
235}
236
237do_configure:append:class-nativesdk() {
238 reproducible_build_variables
239}
240
241do_install:append() {
242 rm -rf ${D}${libdir}/python*/site-packages/six.py
243 for t in clang-pseudo clang-pseudo-gen clang-rename; do
244 if [ -e ${B}${BINPATHPREFIX}/bin/$t ]; then
245 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/$t ${D}${bindir}/$t
246 fi
247 done
248}
249
250do_install:append:class-target () {
251 # Allow bin path to change based on YOCTO_ALTERNATE_EXE_PATH
252 sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
253
254 # Insert function to populate Import Variables
255 sed -i "4i\
256if(DEFINED ENV{YOCTO_ALTERNATE_EXE_PATH})\n\
257 execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n\
258else()\n\
259 set(_IMPORT_PREFIX_BIN \"\${_IMPORT_PREFIX}/bin\")\n\
260endif()\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
261
262 if [ -n "${LLVM_LIBDIR_SUFFIX}" ]; then
263 mkdir -p ${D}${nonarch_libdir}
264 mv ${D}${libdir}/clang ${D}${nonarch_libdir}/clang
265 ln -rs ${D}${nonarch_libdir}/clang ${D}${libdir}/clang
266 rmdir --ignore-fail-on-non-empty ${D}${libdir}
267 fi
268 for t in clang clang++ llvm-nm llvm-ar llvm-as llvm-ranlib llvm-strip llvm-objcopy llvm-objdump llvm-readelf \
269 llvm-addr2line llvm-dwp llvm-size llvm-strings llvm-cov; do
270 ln -sf $t ${D}${bindir}/${TARGET_PREFIX}$t
271 done
272
273 # reproducibility
274 sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
275}
276
277do_install:append:class-native () {
278 if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
279 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer
280 fi
281 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
282 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
283 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/lldb-tblgen ${D}${bindir}/lldb-tblgen
284 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/llvm-min-tblgen ${D}${bindir}/llvm-min-tblgen
285 for f in `find ${D}${bindir} -executable -type f -not -type l`; do
286 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
287 echo "stripped $f"
288 done
289 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
290 ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
291 ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
292
293 if ${@ 'false' if 'llvm' in d.getVar('PROVIDES') or '' else 'true' } ; then
294 for f in bugpoint dsymutil llc lli opt reduce-chunk-list sancov sanstats verify-uselistorder ; do
295 rm -f ${D}${bindir}/$f
296 done
297 rm -f ${D}${bindir}/llvm-*
298
299 rm -rf ${D}${includedir}/llvm
300 rm -rf ${D}${includedir}/llvm-c
301 rm -rf ${D}${libdir}/cmake/llvm
302 rm -rf ${D}${libdir}/libLLVM*
303 rm -rf ${D}${libdir}/libLTO*
304 rm -rf ${D}${libdir}/libRemarks*
305 fi
306}
307
308do_install:append:class-nativesdk () {
309 if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
310 sed -i -e "s|${B}/./bin/||g" ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
311 fi
312 if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
313 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer
314 fi
315 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
316 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
317 for f in `find ${D}${bindir} -executable -type f -not -type l`; do
318 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
319 done
320 ln -sf clang-tblgen ${D}${bindir}/clang-tblgen${PV}
321 ln -sf llvm-tblgen ${D}${bindir}/llvm-tblgen${PV}
322 ln -sf llvm-config ${D}${bindir}/llvm-config${PV}
323 rm -rf ${D}${datadir}/llvm/cmake
324 rm -rf ${D}${datadir}/llvm
325
326 #reproducibility
327 if [ -e ${D}${libdir}/cmake/llvm/LLVMConfig.cmake ] ; then
328 sed -i -e 's,${B},,g' ${D}${libdir}/cmake/llvm/LLVMConfig.cmake
329 fi
330}
331
332PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \
333 libclang lldb lldb-server liblldb llvm-linker-tools"
334
335BBCLASSEXTEND = "native nativesdk"
336
337RDEPENDS:lldb += "${PN}-lldb-python lldb-server"
338
339RDEPENDS:${PN}-tools += "\
340 perl-module-digest-md5 \
341 perl-module-file-basename \
342 perl-module-file-copy \
343 perl-module-file-find \
344 perl-module-file-path \
345 perl-module-findbin \
346 perl-module-hash-util \
347 perl-module-sys-hostname \
348 perl-module-term-ansicolor \
349"
350
351RRECOMMENDS:${PN}-tidy += "${PN}-tools"
352
353FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*"
354
355FILES:${PN}-libclang-cpp = "${libdir}/libclang-cpp.so.*"
356
357FILES:${PN}-lldb-python = "${libdir}/python*/site-packages/lldb/*"
358
359FILES:${PN}-tidy = "${bindir}/*clang-tidy*"
360FILES:${PN}-format = "${bindir}/*clang-format*"
361
362FILES:${PN}-tools = "${bindir}/analyze-build \
363 ${bindir}/c-index-test \
364 ${bindir}/clang-apply-replacements \
365 ${bindir}/clang-change-namespace \
366 ${bindir}/clang-check \
367 ${bindir}/clang-doc \
368 ${bindir}/clang-extdef-mapping \
369 ${bindir}/clang-include-fixer \
370 ${bindir}/clang-linker-wrapper \
371 ${bindir}/clang-move \
372 ${bindir}/clang-nvlink-wrapper \
373 ${bindir}/clang-offload-bundler \
374 ${bindir}/clang-offload-packager \
375 ${bindir}/clang-pseudo* \
376 ${bindir}/clang-query \
377 ${bindir}/clang-refactor \
378 ${bindir}/clang-rename* \
379 ${bindir}/clang-reorder-fields \
380 ${bindir}/clang-repl \
381 ${bindir}/clang-scan-deps \
382 ${bindir}/diagtool \
383 ${bindir}/find-all-symbols \
384 ${bindir}/hmaptool \
385 ${bindir}/hwasan_symbolize \
386 ${bindir}/intercept-build \
387 ${bindir}/modularize \
388 ${bindir}/pp-trace \
389 ${bindir}/sancov \
390 ${bindir}/scan-build \
391 ${bindir}/scan-build-py \
392 ${bindir}/scan-view \
393 ${bindir}/split-file \
394 ${libdir}/libscanbuild/* \
395 ${libdir}/libear/* \
396 ${libexecdir}/analyze-c++ \
397 ${libexecdir}/analyze-cc \
398 ${libexecdir}/c++-analyzer \
399 ${libexecdir}/ccc-analyzer \
400 ${libexecdir}/intercept-c++ \
401 ${libexecdir}/intercept-cc \
402 ${datadir}/scan-build/* \
403 ${datadir}/scan-view/* \
404 ${datadir}/opt-viewer/* \
405 ${datadir}/clang/* \
406"
407
408FILES:${PN} += "\
409 ${bindir}/clang-cl \
410 ${libdir}/BugpointPasses.so \
411 ${libdir}/LLVMHello.so \
412 ${libdir}/*Plugin.so \
413 ${libdir}/${BPN} \
414 ${nonarch_libdir}/${BPN}/*/include/ \
415"
416
417FILES:lldb = "\
418 ${bindir}/lldb \
419 ${bindir}/lldb-argdumper \
420 ${bindir}/lldb-instr \
421 ${bindir}/lldb-vscode \
422"
423
424FILES:lldb-server = "\
425 ${bindir}/lldb-server \
426"
427
428FILES:liblldb = "\
429 ${libdir}/liblldbIntelFeatures.so.* \
430 ${libdir}/liblldb.so.* \
431"
432
433FILES:${PN}-libllvm =+ "\
434 ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
435 ${libdir}/libLLVM-${MAJOR_VER}.so \
436 ${libdir}/libRemarks.so.* \
437"
438
439FILES:libclang = "\
440 ${libdir}/libclang.so.* \
441"
442
443FILES:${PN}-dev += "\
444 ${datadir}/llvm/cmake \
445 ${libdir}/cmake \
446 ${nonarch_libdir}/libear \
447 ${nonarch_libdir}/${BPN}/*.la \
448"
449FILES:${PN}-doc += "${datadir}/clang-doc"
450
451FILES:${PN}-staticdev += "${nonarch_libdir}/${BPN}/*.a"
452
453FILES:${PN}-staticdev:remove = "${libdir}/${BPN}/*.a"
454FILES:${PN}-dev:remove = "${libdir}/${BPN}/*.la"
455FILES:${PN}:remove = "${libdir}/${BPN}/*"
456
457
458INSANE_SKIP:${PN} += "already-stripped"
459#INSANE_SKIP:${PN}-dev += "dev-elf"
460INSANE_SKIP:${PN}-lldb-python += "dev-so dev-deps"
461INSANE_SKIP:${MLPREFIX}liblldb = "dev-so"
462INSANE_SKIP:${PN}-libllvm = "dev-so"
463
464#Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
465SSTATE_SCAN_FILES:remove = "*-config"
466
467TOOLCHAIN = "clang"
468TOOLCHAIN:class-native = "gcc"
469TOOLCHAIN:class-nativesdk = "clang"
470COMPILER_RT:class-nativesdk:toolchain-clang:runtime-llvm = "-rtlib=libgcc --unwindlib=libgcc"
471LIBCPLUSPLUS:class-nativesdk:toolchain-clang:runtime-llvm = "-stdlib=libstdc++"
472
473SYSROOT_DIRS:append:class-target = " ${nonarch_libdir}"
474
475SYSROOT_PREPROCESS_FUNCS:append:class-target = " clang_sysroot_preprocess"
476SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " clang_sysroot_preprocess"
477
478clang_sysroot_preprocess() {
479 install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
480 install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
481 ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
482 # LLDTargets.cmake references the lld executable(!) that some modules/plugins link to
483 install -d ${SYSROOT_DESTDIR}${bindir}
484
485 binaries="lld diagtool clang-${MAJOR_VER} clang-format clang-offload-packager
486 clang-offload-bundler clang-scan-deps clang-repl
487 clang-refactor clang-check clang-extdef-mapping clang-apply-replacements
488 clang-reorder-fields clang-tidy clang-change-namespace clang-doc clang-include-fixer
489 find-all-symbols clang-move clang-query pp-trace modularize"
490
491 if ${@bb.utils.contains('PACKAGECONFIG', 'clangd', 'true', 'false', d)}; then
492 binaries="${binaries} clangd"
493 fi
494
495 for f in ${binaries}
496 do
497 install -m 755 ${D}${bindir}/$f ${SYSROOT_DESTDIR}${bindir}/
498 done
499}