llvm.bb 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. DESCRIPTION = "The LLVM Compiler Infrastructure"
  2. HOMEPAGE = "http://llvm.org"
  3. LICENSE = "Apache-2.0-with-LLVM-exception"
  4. SECTION = "devel"
  5. LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
  6. DEPENDS = "libffi libxml2 zlib libedit libatomic-ops ninja-native"
  7. DEPENDS:append:class-target = " llvm-native"
  8. RDEPENDS:${PN}:append:class-target = " ncurses-terminfo"
  9. MAJOR_VERSION = "10"
  10. MINOR_VERSION = "0"
  11. PATCH_VERSION = "2"
  12. PV = "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}"
  13. LLVM_RELEASE = "${PV}"
  14. UPSTREAM_CHECK_GITTAGREGEX = "llvmorg-(?P<pver>\d+(\.\d+)+)"
  15. BRANCH = "release/${MAJOR_VERSION}.x"
  16. SRCREV = "ef32c611aa214dea855364efd7ba451ec5ec3f74"
  17. SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH} \
  18. file://0006-llvm-TargetLibraryInfo-Undefine-libc-functions-if-th.patch;striplevel=2 \
  19. file://0007-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
  20. file://0001-fix-the-atomic-build-failure.patch;patchdir=.. \
  21. file://0001-Force-to-link-the-dl-to-wa-the-find-dl-lib-issue.patch;patchdir=.. \
  22. "
  23. S = "${WORKDIR}/git/llvm"
  24. inherit cmake pkgconfig
  25. PROVIDES:append:class-target = "llvm"
  26. PROVIDES:append:class-native = "llvm-native"
  27. SYSROOT_DIRS = " \
  28. ${includedir} \
  29. ${libdir} \
  30. ${bindir} \
  31. ${sbindir} \
  32. ${base_bindir} \
  33. ${base_sbindir} \
  34. ${libexecdir} \
  35. ${sysconfdir} \
  36. ${localstatedir} \
  37. ${datadir} \
  38. "
  39. def get_llvm_experimental_arch(bb, d, arch_var):
  40. import re
  41. a = d.getVar(arch_var, True)
  42. return ""
  43. def get_llvm_arch(bb, d, arch_var):
  44. import re
  45. a = d.getVar(arch_var, True)
  46. if re.match('(i.86|athlon|x86.64)$', a): return 'X86'
  47. elif re.match('arm$', a): return 'ARM'
  48. elif re.match('armeb$', a): return 'ARM'
  49. elif re.match('aarch64$', a): return 'AArch64'
  50. elif re.match('aarch64_be$', a): return 'AArch64'
  51. elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'Mips'
  52. elif re.match('riscv32$', a): return 'riscv32'
  53. elif re.match('riscv64$', a): return 'riscv64'
  54. elif re.match('p(pc|owerpc)(|64)', a): return 'PowerPC'
  55. else:
  56. bb.note("'%s' is not a primary llvm architecture" % a)
  57. return ""
  58. def get_llvm_host_arch(bb, d):
  59. return get_llvm_arch(bb, d, 'HOST_ARCH')
  60. def get_llvm_target_arch(bb, d):
  61. return get_llvm_arch(bb, d, 'TARGET_ARCH')
  62. def get_llvm_experimental_target_arch(bb, d):
  63. return get_llvm_experimental_arch(bb, d, 'TARGET_ARCH')
  64. # Default to build all OE-Core supported target arches (user overridable).
  65. LLVM_TARGETS ?= "RISCV"
  66. EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
  67. -DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
  68. -DLLVM_ENABLE_PIC=ON \
  69. -DLLVM_BINDINGS_LIST='' \
  70. -DLLVM_LINK_LLVM_DYLIB=ON \
  71. -DLLVM_ENABLE_FFI=ON \
  72. -DLLVM_ENABLE_RTTI=ON \
  73. -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
  74. -DLLVM_OPTIMIZED_TABLEGEN=ON \
  75. -DLLVM_TARGETS_TO_BUILD='${LLVM_TARGETS}' \
  76. -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
  77. -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
  78. -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
  79. -DLLVM_ENABLE_PROJECTS='clang;libclc;' \
  80. -DCMAKE_SYSTEM_NAME=Linux \
  81. -DCMAKE_BUILD_TYPE=Release \
  82. -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
  83. -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
  84. -G Ninja"
  85. EXTRA_OECMAKE:append:class-target = "\
  86. -DCMAKE_CROSSCOMPILING:BOOL=ON \
  87. -DLLVM_BUILD_TOOLS:BOOL=ON \
  88. -DLLVM_INSTALL_UTILS:BOOL=ON \
  89. -DLLVM_INSTALL_MODULEMAPS:BOOL=ON \
  90. -DLLVM_INSTALL_BINUTILS_SYMLINKS:BOOL=ON \
  91. -DLLVM_INSTALL_CCTOOLS_SYMLINKS:BOOL=ON \
  92. -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
  93. -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
  94. -DLLVM_TARGET_ARCH=${@get_llvm_target_arch(bb, d)} \
  95. -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config \
  96. "
  97. EXTRA_OECMAKE:append:class-native = "\
  98. -DLLVM_BUILD_TOOLS:BOOL=ON \
  99. -DLLVM_INSTALL_UTILS:BOOL=ON \
  100. -DLLVM_INSTALL_MODULEMAPS:BOOL=ON \
  101. -DLLVM_INSTALL_BINUTILS_SYMLINKS:BOOL=ON \
  102. -DLLVM_INSTALL_CCTOOLS_SYMLINKS:BOOL=ON \
  103. "
  104. do_compile:class-target() {
  105. ninja -v ${PARALLEL_MAKE} llvm-config llvm-tblgen llvm-link llvm-as clang-tblgen
  106. }
  107. do_install:class-target() {
  108. DESTDIR=${D} ninja -v install
  109. # sed -i 's;${_IMPORT_PREFIX}/lib;${_IMPORT_PREFIX_LIBRARY};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
  110. sed -i 's;${_IMPORT_PREFIX}/bin;${_IMPORT_PREFIX_BIN};g' ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
  111. # sed -i "4i execute_process(COMMAND \"llvm-config\" \"--bindir\" OUTPUT_VARIABLE _IMPORT_PREFIX_BIN OUTPUT_STRIP_TRAILING_WHITESPACE)\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
  112. sed -i "4i set(_IMPORT_PREFIX_BIN \"\${STAGING_DIR_NATIVE}/usr/bin\")\n" ${D}${libdir}/cmake/llvm/LLVMExports-release.cmake
  113. }
  114. do_configure:prepend() {
  115. sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
  116. }
  117. do_compile:class-native() {
  118. ninja -v ${PARALLEL_MAKE} llvm-config llvm-tblgen llvm-link llvm-as clang-tblgen
  119. }
  120. do_install:class-native() {
  121. DESTDIR=${D} ninja -v install
  122. mkdir -p ${D}${bindir}/
  123. cp ${WORKDIR}/build/bin/clang-tblgen ${D}${bindir}/
  124. }
  125. PACKAGES =+ "${PN}-libllvm"
  126. FILES:${PN}-libllvm = "\
  127. ${bindir}/clang* \
  128. ${bindir}/llvm* \
  129. ${libdir}/libLLVM*.so \
  130. ${libdir}/clang/* \
  131. ${libdir}/libLTO.so.* \
  132. ${libdir}/libRemarks.so.* \
  133. ${libdir}/libclang.so.* \
  134. ${datadir}/clang/* \
  135. ${datadir}/scan* \
  136. ${datadir}/opt-viewer \
  137. "
  138. FILES:${PN}-staticdev += "\
  139. ${libdir}/*.a \
  140. "
  141. INSANE_SKIP:${PN}-libllvm += "dev-so"
  142. BBCLASSEXTEND = "native"