llvm_git.bb 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. # Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
  2. # Released under the MIT license (see COPYING.MIT for the terms)
  3. SUMMARY = "The LLVM Compiler Infrastructure"
  4. HOMEPAGE = "http://llvm.org"
  5. LICENSE = "Apache-2.0-with-LLVM-exception"
  6. SECTION = "devel"
  7. require common-clang.inc
  8. require common-source.inc
  9. LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
  10. DEPENDS = "llvm-tblgen-native libffi libxml2 zlib zstd"
  11. inherit cmake pkgconfig lib_package
  12. OECMAKE_SOURCEPATH = "${S}/llvm"
  13. # By default we build all the supported CPU architectures, and the GPU targets
  14. # if the opencl, opengl or vulkan DISTRO_FEATURES are enabled.
  15. #
  16. # For target builds we default to building that specific architecture, BPF, and the GPU targets if required.
  17. #
  18. # The available target list can be seen in the source code
  19. # in the LLVM_ALL_TARGETS assignment:
  20. # https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt
  21. LLVM_TARGETS_GPU ?= "${@bb.utils.contains_any('DISTRO_FEATURES', 'opencl opengl vulkan', 'AMDGPU;NVPTX;SPIRV', '', d)}"
  22. LLVM_TARGETS_TO_BUILD ?= "AArch64;ARM;BPF;Mips;PowerPC;RISCV;X86;LoongArch;${LLVM_TARGETS_GPU}"
  23. LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ?= ""
  24. HF = ""
  25. HF:class-target = "${@ bb.utils.contains('TUNE_CCARGS_MFLOAT', 'hard', 'hf', '', d)}"
  26. HF[vardepvalue] = "${HF}"
  27. EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=MinSizeRel \
  28. -DLLVM_ENABLE_BINDINGS=OFF \
  29. -DLLVM_INSTALL_UTILS=ON \
  30. -DLLVM_ENABLE_FFI=ON \
  31. -DLLVM_ENABLE_RTTI=ON \
  32. -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS_TO_BUILD}' \
  33. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}' \
  34. -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} \
  35. -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
  36. -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
  37. -DLLVM_INCLUDE_TESTS=OFF \
  38. -DLLVM_INCLUDE_EXAMPLES=OFF \
  39. -DLLVM_TOOL_OBJ2YAML_BUILD=OFF \
  40. -DLLVM_TOOL_YAML2OBJ_BUILD=OFF \
  41. -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
  42. -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
  43. -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
  44. "
  45. EXTRA_OECMAKE:append:class-target = "\
  46. -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_SYS}${HF} \
  47. -DLLVM_TARGET_ARCH=${HOST_ARCH} \
  48. -DLLVM_HOST_TRIPLE=${TARGET_SYS}${HF} \
  49. -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
  50. "
  51. EXTRA_OECMAKE:append:class-nativesdk = "\
  52. -DLLVM_HOST_TRIPLE=${SDK_SYS} \
  53. -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
  54. "
  55. PACKAGECONFIG ??= "eh rtti shared-libs ${@bb.utils.filter('DISTRO_FEATURES', 'lto thin-lto', d)}"
  56. PACKAGECONFIG:remove:class-native = "lto thin-lto"
  57. PACKAGECONFIG[eh] = "-DLLVM_ENABLE_EH=ON,-DLLVM_ENABLE_EH=OFF"
  58. PACKAGECONFIG[exegesis] = "-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=ON,-DLLVM_TOOL_LLVM_EXEGESIS_BUILD=OFF"
  59. PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit"
  60. PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF"
  61. PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,-DLLVM_BUILD_LLVM_DYLIB=OFF -DLLVM_LINK_LLVM_DYLIB=OFF"
  62. PACKAGECONFIG[split-dwarf] = "-DLLVM_USE_SPLIT_DWARF=ON,-DLLVM_USE_SPLIT_DWARF=OFF"
  63. PACKAGECONFIG[opt-viewer] = "-DLLVM_TOOL_OPT_VIEWER_BUILD=ON,-DLLVM_TOOL_OPT_VIEWER_BUILD=OFF, \
  64. python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \
  65. python3-pyyaml python3-pygments,"
  66. PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
  67. PACKAGECONFIG[thin-lto] = "-DLLVM_ENABLE_LTO=Thin -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
  68. # LLVM debug symbols are very large (several gigabytes), reduce the debug level
  69. # so they're just hundreds of megabytes.
  70. DEBUG_LEVELFLAG = "-g1"
  71. reproducible_build_variables() {
  72. sed -i -e "s,${DEBUG_PREFIX_MAP},,g" \
  73. -e "s,--sysroot=${RECIPE_SYSROOT},,g" \
  74. -e "s,${STAGING_DIR_HOST},,g" \
  75. -e "s,${S}/llvm,,g" \
  76. -e "s,${B},,g" \
  77. ${B}/tools/llvm-config/BuildVariables.inc
  78. }
  79. do_configure:append:class-target() {
  80. reproducible_build_variables
  81. }
  82. do_configure:append:class-nativesdk() {
  83. reproducible_build_variables
  84. }
  85. do_install:append() {
  86. # llvm hardcodes lib as install path, this corrects it to actual libdir.
  87. # https://github.com/llvm/llvm-project/issues/152193
  88. if [ -d ${D}/${prefix}/lib -a ! -d ${D}/${libdir} ]; then
  89. mv ${D}/${prefix}/lib ${D}/${libdir}
  90. fi
  91. # Reproducibility fixes
  92. sed -i -e 's,${WORKDIR},,g' ${D}/${libdir}/cmake/llvm/LLVMConfig.cmake
  93. }
  94. do_install:append:class-native() {
  95. # These are provided by llvm-tblgen-native
  96. rm ${D}${bindir}/*-tblgen
  97. }
  98. SYSROOT_PREPROCESS_FUNCS:append:class-target = " llvm_sysroot_preprocess"
  99. SYSROOT_PREPROCESS_FUNCS:append:class-nativesdk = " llvm_sysroot_preprocess"
  100. llvm_sysroot_preprocess() {
  101. install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
  102. install -m 0755 ${S}/llvm/tools/llvm-config/llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
  103. }
  104. FILES:${PN}-dev += "${libdir}/llvm-config"
  105. BBCLASSEXTEND = "native nativesdk"