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