xref: /OK3568_Linux_fs/buildroot/package/llvm/llvm.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# llvm
4#
5################################################################################
6
7# LLVM, Clang and lld should be version bumped together
8LLVM_VERSION = 9.0.1
9LLVM_SITE = https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LLVM_VERSION)
10LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz
11LLVM_LICENSE = Apache-2.0 with exceptions
12LLVM_LICENSE_FILES = LICENSE.TXT
13LLVM_CPE_ID_VENDOR = llvm
14LLVM_SUPPORTS_IN_SOURCE_BUILD = NO
15LLVM_INSTALL_STAGING = YES
16
17# LLVM >= 9.0 can use python3 to build.
18HOST_LLVM_DEPENDENCIES = host-python3
19LLVM_DEPENDENCIES = host-llvm
20
21# LLVM >= 9.0 will soon require C++14 support, building llvm 8.x using a
22# toolchain using gcc < 5.1 gives an error but actually still works. Setting
23# this option makes it still build with gcc >= 4.8.
24# https://reviews.llvm.org/D57264
25HOST_LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
26LLVM_CONF_OPTS += -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
27
28# Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects
29# This flag assumes that projects are checked out side-by-side and not nested
30HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
31LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
32
33HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
34LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=$(if $(BR2_CCACHE),ON,OFF)
35
36# This option prevents AddLLVM.cmake from adding $ORIGIN/../lib to
37# binaries. Otherwise, llvm-config (host variant installed in STAGING)
38# will try to use target's libc.
39HOST_LLVM_CONF_OPTS += -DCMAKE_INSTALL_RPATH="$(HOST_DIR)/lib"
40
41# Get target architecture
42LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
43
44# Build backend for target architecture. This include backends like AMDGPU.
45LLVM_TARGETS_TO_BUILD = $(LLVM_TARGET_ARCH)
46HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
47LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst $(space),;,$(LLVM_TARGETS_TO_BUILD))"
48
49# LLVM target to use for native code generation. This is required for JIT generation.
50# It must be set to LLVM_TARGET_ARCH for host and target, otherwise we get
51# "No available targets are compatible for this triple" with llvmpipe when host
52# and target architectures are different.
53HOST_LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
54LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(LLVM_TARGET_ARCH)
55
56# Build AMDGPU backend
57# We need to build AMDGPU backend for both host and target because
58# llvm-config --targets built (host variant installed in STAGING) will
59# output only $(LLVM_TARGET_ARCH) if not, and mesa3d won't build as
60# it thinks AMDGPU backend is not installed on the target.
61ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
62LLVM_TARGETS_TO_BUILD += AMDGPU
63endif
64
65# Build BPF backend
66ifeq ($(BR2_PACKAGE_LLVM_BPF),y)
67LLVM_TARGETS_TO_BUILD += BPF
68endif
69
70# Use native llvm-tblgen from host-llvm (needed for cross-compilation)
71LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/bin/llvm-tblgen
72
73# Use native llvm-config from host-llvm (needed for cross-compilation)
74LLVM_CONF_OPTS += -DLLVM_CONFIG_PATH=$(HOST_DIR)/bin/llvm-config
75
76# BUILD_SHARED_LIBS has a misleading name. It is in fact an option for
77# LLVM developers to build all LLVM libraries as separate shared libraries.
78# For normal use of LLVM, it is recommended to build a single
79# shared library, which is achieved by BUILD_SHARED_LIBS=OFF and
80# LLVM_BUILD_LLVM_DYLIB=ON.
81HOST_LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
82LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF
83
84# Generate libLLVM.so. This library contains a default set of LLVM components
85# that can be overwritten with "LLVM_DYLIB_COMPONENTS". The default contains
86# most of LLVM and is defined in "tools/llvm-shlib/CMakelists.txt".
87HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
88LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
89
90# LLVM_BUILD_LLVM_DYLIB to ON. We need to enable this option for the
91# host as llvm-config for the host will be used in STAGING_DIR by packages
92# linking against libLLVM and if this option is not selected, then llvm-config
93# does not work properly. For example, it assumes that LLVM is built statically
94# and cannot find libLLVM.so.
95HOST_LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
96LLVM_CONF_OPTS += -DLLVM_LINK_LLVM_DYLIB=ON
97
98LLVM_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1
99
100# Disabled for the host since no host-libedit.
101# Fall back to "Simple fgets-based implementation" of llvm line editor.
102HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
103LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF
104
105# We want to install llvm libraries and modules.
106HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
107LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
108
109# We build from a release archive without vcs files.
110HOST_LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
111LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF
112
113# No backtrace package in Buildroot.
114# https://documentation.backtrace.io
115HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
116LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
117
118# Enable signal handlers overrides support.
119HOST_LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
120LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON
121
122# Disable ffi for now.
123HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
124LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF
125
126# Disable terminfo database (needs ncurses libtinfo.so)
127HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
128LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF
129
130# Enable thread support
131HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
132LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON
133
134# Enable optional host-zlib support for LLVM Machine Code (llvm-mc) to add
135# compression/uncompression capabilities.
136# Not needed on the target.
137HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=ON
138HOST_LLVM_DEPENDENCIES += host-zlib
139LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=OFF
140
141# libxml2 can be disabled as it is used for LLVM Windows builds where COFF
142# files include manifest info
143HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF
144LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBXML2=OFF
145
146# Disable optional Z3Prover since there is no such package in Buildroot.
147HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF
148LLVM_CONF_OPTS += -DLLVM_ENABLE_Z3_SOLVER=OFF
149
150# We don't use llvm for static only build, so enable PIC
151HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
152LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON
153
154# Default is Debug build, which requires considerably more disk space and
155# build time. Release build is selected for host and target because the linker
156# can run out of memory in Debug mode.
157HOST_LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
158LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release
159
160# Disable C++1y (ISO C++ 2014 standard)
161# Disable C++1z (ISO C++ 2017 standard)
162# Compile llvm with the C++11 (ISO C++ 2011 standard) which is the fallback.
163HOST_LLVM_CONF_OPTS += \
164	-DLLVM_ENABLE_CXX1Y=OFF \
165	-DLLVM_ENABLE_CXX1Z=OFF
166LLVM_CONF_OPTS += \
167	-DLLVM_ENABLE_CXX1Y=OFF \
168	-DLLVM_ENABLE_CXX1Z=OFF
169
170# Disabled, requires sys/ndir.h header
171# Disable debug in module
172HOST_LLVM_CONF_OPTS += \
173	-DLLVM_ENABLE_MODULES=OFF \
174	-DLLVM_ENABLE_MODULE_DEBUGGING=OFF
175LLVM_CONF_OPTS += \
176	-DLLVM_ENABLE_MODULES=OFF \
177	-DLLVM_ENABLE_MODULE_DEBUGGING=OFF
178
179# Don't change the standard library to libc++.
180HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
181LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF
182
183# Don't use lld as a linker.
184HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
185LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF
186
187# Generate code for the target. LLVM selects a target by looking at the
188# toolchain tuple
189HOST_LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
190LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME)
191
192# LLVM_HOST_TRIPLE has a misleading name, it is in fact the triple of the
193# system where llvm is going to run on. We need to specify triple for native
194# code generation on the target.
195# This solves "No available targets are compatible for this triple" with llvmpipe
196LLVM_CONF_OPTS += -DLLVM_HOST_TRIPLE=$(GNU_TARGET_NAME)
197
198# Building the Go and OCaml bindings is yet unsupported.
199HOST_LLVM_CONF_OPTS += \
200	-DLLVM_ENABLE_BINDINGS=OFF
201
202# Builds a release host tablegen that gets used during the LLVM build.
203HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON
204
205# Keep llvm utility binaries for the host. llvm-tblgen is built anyway as
206# CMakeLists.txt has add_subdirectory(utils/TableGen) unconditionally.
207HOST_LLVM_CONF_OPTS += \
208	-DLLVM_BUILD_UTILS=ON \
209	-DLLVM_INCLUDE_UTILS=ON \
210	-DLLVM_INSTALL_UTILS=ON
211LLVM_CONF_OPTS += \
212	-DLLVM_BUILD_UTILS=OFF \
213	-DLLVM_INCLUDE_UTILS=OFF \
214	-DLLVM_INSTALL_UTILS=OFF
215
216HOST_LLVM_CONF_OPTS += \
217	-DLLVM_INCLUDE_TOOLS=ON \
218	-DLLVM_BUILD_TOOLS=ON
219
220# We need to activate LLVM_INCLUDE_TOOLS, otherwise it does not generate
221# libLLVM.so
222LLVM_CONF_OPTS += \
223	-DLLVM_INCLUDE_TOOLS=ON \
224	-DLLVM_BUILD_TOOLS=OFF
225
226ifeq ($(BR2_PACKAGE_LLVM_RTTI),y)
227HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON
228LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=ON
229else
230HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF
231LLVM_CONF_OPTS += -DLLVM_ENABLE_RTTI=OFF
232endif
233
234# Compiler-rt not in the source tree.
235# llvm runtime libraries are not in the source tree.
236# Polly is not in the source tree.
237HOST_LLVM_CONF_OPTS += \
238	-DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
239	-DLLVM_BUILD_RUNTIME=OFF \
240	-DLLVM_INCLUDE_RUNTIMES=OFF \
241	-DLLVM_POLLY_BUILD=OFF
242LLVM_CONF_OPTS += \
243	-DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF \
244	-DLLVM_BUILD_RUNTIME=OFF \
245	-DLLVM_INCLUDE_RUNTIMES=OFF \
246	-DLLVM_POLLY_BUILD=OFF
247
248HOST_LLVM_CONF_OPTS += \
249	-DLLVM_ENABLE_WARNINGS=ON \
250	-DLLVM_ENABLE_PEDANTIC=ON \
251	-DLLVM_ENABLE_WERROR=OFF
252LLVM_CONF_OPTS += \
253	-DLLVM_ENABLE_WARNINGS=ON \
254	-DLLVM_ENABLE_PEDANTIC=ON \
255	-DLLVM_ENABLE_WERROR=OFF
256
257HOST_LLVM_CONF_OPTS += \
258	-DLLVM_BUILD_EXAMPLES=OFF \
259	-DLLVM_BUILD_DOCS=OFF \
260	-DLLVM_BUILD_TESTS=OFF \
261	-DLLVM_ENABLE_DOXYGEN=OFF \
262	-DLLVM_ENABLE_OCAMLDOC=OFF \
263	-DLLVM_ENABLE_SPHINX=OFF \
264	-DLLVM_INCLUDE_EXAMPLES=OFF \
265	-DLLVM_INCLUDE_DOCS=OFF \
266	-DLLVM_INCLUDE_GO_TESTS=OFF \
267	-DLLVM_INCLUDE_TESTS=OFF
268LLVM_CONF_OPTS += \
269	-DLLVM_BUILD_EXAMPLES=OFF \
270	-DLLVM_BUILD_DOCS=OFF \
271	-DLLVM_BUILD_TESTS=OFF \
272	-DLLVM_ENABLE_DOXYGEN=OFF \
273	-DLLVM_ENABLE_OCAMLDOC=OFF \
274	-DLLVM_ENABLE_SPHINX=OFF \
275	-DLLVM_INCLUDE_EXAMPLES=OFF \
276	-DLLVM_INCLUDE_DOCS=OFF \
277	-DLLVM_INCLUDE_GO_TESTS=OFF \
278	-DLLVM_INCLUDE_TESTS=OFF
279
280# Copy llvm-config (host variant) to STAGING_DIR
281# llvm-config (host variant) returns include and lib directories
282# for the host if it's installed in host/bin:
283# output/host/bin/llvm-config --includedir
284# output/host/include
285# When installed in STAGING_DIR, llvm-config returns include and lib
286# directories from STAGING_DIR.
287# output/staging/usr/bin/llvm-config --includedir
288# output/staging/usr/include
289define HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
290	$(INSTALL) -D -m 0755 $(HOST_DIR)/bin/llvm-config \
291		$(STAGING_DIR)/usr/bin/llvm-config
292endef
293HOST_LLVM_POST_INSTALL_HOOKS = HOST_LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
294
295# By default llvm-tblgen is built and installed on the target but it is
296# not necessary. Also erase LLVMHello.so from /usr/lib
297define LLVM_DELETE_LLVM_TBLGEN_TARGET
298	rm -f $(TARGET_DIR)/usr/bin/llvm-tblgen $(TARGET_DIR)/usr/lib/LLVMHello.so
299endef
300LLVM_POST_INSTALL_TARGET_HOOKS = LLVM_DELETE_LLVM_TBLGEN_TARGET
301
302$(eval $(cmake-package))
303$(eval $(host-cmake-package))
304