clang_git.bb 21 KB

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