llvm.mk 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. ################################################################################
  2. #
  3. # llvm
  4. #
  5. ################################################################################
  6. LLVM_VERSION = 6.0.0
  7. LLVM_SITE = http://llvm.org/releases/$(LLVM_VERSION)
  8. LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz
  9. LLVM_LICENSE = NCSA
  10. LLVM_LICENSE_FILES = LICENSE.TXT
  11. LLVM_SUPPORTS_IN_SOURCE_BUILD = NO
  12. LLVM_INSTALL_STAGING = YES
  13. # http://llvm.org/docs/GettingStarted.html#software
  14. # host-python: Python interpreter 2.7 or newer is required for builds and testing.
  15. HOST_LLVM_DEPENDENCIES = host-python
  16. LLVM_DEPENDENCIES = host-llvm
  17. # Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects
  18. # This flag assumes that projects are checked out side-by-side and not nested
  19. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
  20. LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
  21. HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
  22. LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
  23. # This option prevents AddLLVM.cmake from adding $ORIGIN/../lib to
  24. # binaries. Otherwise, llvm-config (host variant installed in STAGING)
  25. # will try to use target's libc.
  26. HOST_LLVM_CONF_OPTS += -DCMAKE_INSTALL_RPATH="$(HOST_DIR)/lib"
  27. # Disable experimental Global Instruction Selection support.
  28. # https://llvm.org/docs/GlobalISel.html
  29. HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_GLOBAL_ISEL=OFF
  30. LLVM_CONF_OPTS += -DLLVM_BUILD_GLOBAL_ISEL=OFF
  31. # Get target architecture
  32. LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
  33. # Build backend for target architecture. This include backends like AMDGPU.
  34. LLVM_TARGETS_TO_BUILD = $(LLVM_TARGET_ARCH)
  35. HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
  36. LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
  37. # LLVM target to use for native code generation. This is required for JIT generation.
  38. # It must be set to LLVM_TARGET_ARCH for host and target, otherwise we get
  39. # "No available targets are compatible for this triple" with llvmpipe when host
  40. # and target architectures are different.
  41. HOST_LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
  42. LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
  43. # Build AMDGPU backend
  44. # We need to build AMDGPU backend for both host and target because
  45. # llvm-config --targets built (host variant installed in STAGING) will
  46. # output only $(LLVM_TARGET_ARCH) if not, and mesa3d won't build as
  47. # it thinks AMDGPU backend is not installed on the target.
  48. ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
  49. LLVM_TARGETS_TO_BUILD += AMDGPU
  50. endif
  51. # Use native llvm-tblgen from host-llvm (needed for cross-compilation)
  52. LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/bin/llvm-tblgen
  53. # BUILD_SHARED_LIBS has a misleading name. It is in fact an option for
  54. # LLVM developers to build all LLVM libraries as separate shared libraries.
  55. # For normal use of LLVM, it is recommended to build a single
  56. # shared library, which is achieved by BUILD_SHARED_LIBS=OFF and
  57. # LLVM_BUILD_LLVM_DYLIB=ON.
  58. HOST_LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
  59. LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
  60. # Generate libLLVM.so. This library contains a default set of LLVM components
  61. # that can be overwritten with "LLVM_DYLIB_COMPONENTS". The default contains
  62. # most of LLVM and is defined in "tools/llvm-shlib/CMakelists.txt".
  63. HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
  64. LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
  65. # LLVM_BUILD_LLVM_DYLIB to ON. We need to enable this option for the
  66. # host as llvm-config for the host will be used in STAGING_DIR by packages
  67. # linking against libLLVM and if this option is not selected, then llvm-config
  68. # does not work properly. For example, it assumes that LLVM is built statically
  69. # and cannot find libLLVM.so.
  70. HOST_LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
  71. LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
  72. LLVM_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1
  73. # Disabled for the host since no host-libedit.
  74. # Fall back to "Simple fgets-based implementation" of llvm line editor.
  75. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
  76. LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
  77. # We want to install llvm libraries and modules.
  78. HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
  79. LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
  80. # We build from a release archive without vcs files.
  81. HOST_LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
  82. LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
  83. # No backtrace package in Buildroot.
  84. # https://documentation.backtrace.io
  85. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
  86. LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
  87. # Enable signal handlers overrides support.
  88. HOST_LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
  89. LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
  90. # Disable ffi for now.
  91. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
  92. LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
  93. # Disable terminfo database (needs ncurses libtinfo.so)
  94. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
  95. LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
  96. # Enable thread support
  97. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
  98. LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
  99. # Enable optional host-zlib support for LLVM Machine Code (llvm-mc) to add
  100. # compression/uncompression capabilities.
  101. # Not needed on the target.
  102. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=ON
  103. HOST_LLVM_DEPENDENCIES += host-zlib
  104. LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=OFF
  105. # We don't use llvm for static only build, so enable PIC
  106. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
  107. LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
  108. # Default is Debug build, which requires considerably more disk space and
  109. # build time. Release build is selected for host and target because the linker
  110. # can run out of memory in Debug mode.
  111. HOST_LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
  112. LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
  113. # Disable C++1y (ISO C++ 2014 standard)
  114. # Disable C++1z (ISO C++ 2017 standard)
  115. # Compile llvm with the C++11 (ISO C++ 2011 standard) which is the fallback.
  116. HOST_LLVM_CONF_OPTS += \
  117. -DLLVM_ENABLE_CXX1Y=OFF \
  118. -DLLVM_ENABLE_CXX1Z=OFF
  119. LLVM_CONF_OPTS += \
  120. -DLLVM_ENABLE_CXX1Y=OFF \
  121. -DLLVM_ENABLE_CXX1Z=OFF
  122. # Disabled, requires sys/ndir.h header
  123. # Disable debug in module
  124. HOST_LLVM_CONF_OPTS += \
  125. -DLLVM_ENABLE_MODULES=OFF \
  126. -DLLVM_ENABLE_MODULE_DEBUGGING=OFF
  127. LLVM_CONF_OPTS += \
  128. -DLLVM_ENABLE_MODULES=OFF \
  129. -DLLVM_ENABLE_MODULE_DEBUGGING=OFF
  130. # Don't change the standard library to libc++.
  131. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
  132. LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
  133. # Don't use lld as a linker.
  134. HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
  135. LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
  136. # Generate code for the target. LLVM selects a target by looking at the
  137. # toolchain tuple
  138. HOST_LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
  139. LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
  140. # LLVM_HOST_TRIPLE has a misleading name, it is in fact the triple of the
  141. # system where llvm is going to run on. We need to specify triple for native
  142. # code generation on the target.
  143. # This solves "No available targets are compatible for this triple" with llvmpipe
  144. LLVM_CONF_OPTS += -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME)
  145. # The Go bindings have no CMake rules at the moment, but better remove the
  146. # check preventively. Building the Go and OCaml bindings is yet unsupported.
  147. HOST_LLVM_CONF_OPTS += \
  148. -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \
  149. -DOCAMLFIND=OCAMLFIND-NOTFOUND
  150. # Builds a release host tablegen that gets used during the LLVM build.
  151. HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON
  152. # Keep llvm utility binaries for the host. llvm-tblgen is built anyway as
  153. # CMakeLists.txt has add_subdirectory(utils/TableGen) unconditionally.
  154. HOST_LLVM_CONF_OPTS += \
  155. -DLLVM_BUILD_UTILS=ON \
  156. -DLLVM_INCLUDE_UTILS=ON \
  157. -DLLVM_INSTALL_UTILS=ON
  158. LLVM_CONF_OPTS += \
  159. -DLLVM_BUILD_UTILS=OFF \
  160. -DLLVM_INCLUDE_UTILS=OFF \
  161. -DLLVM_INSTALL_UTILS=OFF
  162. HOST_LLVM_CONF_OPTS += \
  163. -DLLVM_INCLUDE_TOOLS=ON \
  164. -DLLVM_BUILD_TOOLS=ON
  165. # We need to activate LLVM_INCLUDE_TOOLS, otherwise it does not generate
  166. # libLLVM.so
  167. LLVM_CONF_OPTS += \
  168. -DLLVM_INCLUDE_TOOLS=ON \
  169. -DLLVM_BUILD_TOOLS=OFF
  170. # Compiler-rt not in the source tree.
  171. # llvm runtime libraries are not in the source tree.
  172. # Polly is not in the source tree.
  173. HOST_LLVM_CONF_OPTS += \
  174. -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
  175. -DLLVM_BUILD_RUNTIME=OFF \
  176. -DLLVM_INCLUDE_RUNTIMES=OFF \
  177. -DLLVM_POLLY_BUILD=OFF
  178. LLVM_CONF_OPTS += \
  179. -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
  180. -DLLVM_BUILD_RUNTIME=OFF \
  181. -DLLVM_INCLUDE_RUNTIMES=OFF \
  182. -DLLVM_POLLY_BUILD=OFF
  183. HOST_LLVM_CONF_OPTS += \
  184. -DLLVM_ENABLE_WARNINGS=ON \
  185. -DLLVM_ENABLE_PEDANTIC=ON \
  186. -DLLVM_ENABLE_WERROR=OFF
  187. LLVM_CONF_OPTS += \
  188. -DLLVM_ENABLE_WARNINGS=ON \
  189. -DLLVM_ENABLE_PEDANTIC=ON \
  190. -DLLVM_ENABLE_WERROR=OFF
  191. HOST_LLVM_CONF_OPTS += \
  192. -DLLVM_BUILD_EXAMPLES=OFF \
  193. -DLLVM_BUILD_DOCS=OFF \
  194. -DLLVM_BUILD_TESTS=OFF \
  195. -DLLVM_ENABLE_DOXYGEN=OFF \
  196. -DLLVM_ENABLE_OCAMLDOC=OFF \
  197. -DLLVM_ENABLE_SPHINX=OFF \
  198. -DLLVM_INCLUDE_EXAMPLES=OFF \
  199. -DLLVM_INCLUDE_DOCS=OFF \
  200. -DLLVM_INCLUDE_GO_TESTS=OFF \
  201. -DLLVM_INCLUDE_TESTS=OFF
  202. LLVM_CONF_OPTS += \
  203. -DLLVM_BUILD_EXAMPLES=OFF \
  204. -DLLVM_BUILD_DOCS=OFF \
  205. -DLLVM_BUILD_TESTS=OFF \
  206. -DLLVM_ENABLE_DOXYGEN=OFF \
  207. -DLLVM_ENABLE_OCAMLDOC=OFF \
  208. -DLLVM_ENABLE_SPHINX=OFF \
  209. -DLLVM_INCLUDE_EXAMPLES=OFF \
  210. -DLLVM_INCLUDE_DOCS=OFF \
  211. -DLLVM_INCLUDE_GO_TESTS=OFF \
  212. -DLLVM_INCLUDE_TESTS=OFF
  213. # Copy llvm-config (host variant) to STAGING_DIR
  214. # llvm-config (host variant) returns include and lib directories
  215. # for the host if it's installed in host/bin:
  216. # output/host/bin/llvm-config --includedir
  217. # output/host/include
  218. # When installed in STAGING_DIR, llvm-config returns include and lib
  219. # directories from STAGING_DIR.
  220. # output/staging/usr/bin/llvm-config --includedir
  221. # output/staging/usr/include
  222. define HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
  223. $(INSTALL) -D -m 0755 $(HOST_DIR)/bin/llvm-config \
  224. $(STAGING_DIR)/usr/bin/llvm-config
  225. endef
  226. HOST_LLVM_POST_INSTALL_HOOKS = HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
  227. # By default llvm-tblgen is built and installed on the target but it is
  228. # not necessary. Also erase LLVMHello.so from /usr/lib
  229. define LLVM_DELETE_LLVM_TBLGEN_TARGET
  230. rm -f $(TARGET_DIR)/usr/bin/llvm-tblgen $(TARGET_DIR)/usr/lib/LLVMHello.so
  231. endef
  232. LLVM_POST_INSTALL_TARGET_HOOKS = LLVM_DELETE_LLVM_TBLGEN_TARGET
  233. $(eval $(cmake-package))
  234. $(eval $(host-cmake-package))