]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | set(LLVM_VERSION "11.1.0") |
2 | ||
3 | vcpkg_check_linkage(ONLY_STATIC_LIBRARY) | |
4 | ||
5 | vcpkg_from_github( | |
6 | OUT_SOURCE_PATH SOURCE_PATH | |
7 | REPO llvm/llvm-project | |
8 | REF llvmorg-${LLVM_VERSION} | |
9 | SHA512 9a8ce022a935eed42fa71a224f2a207122aadcbef58ee855fdb4825f879e7d028e4dcff22c19b9d336db1c8bf63fb84372d44981acf84615f757e54306c92b81 | |
10 | HEAD_REF master | |
11 | PATCHES | |
12 | 0001-add-msvc-options.patch # Fixed in LLVM 12.0.0 | |
13 | 0002-fix-install-paths.patch # This patch fixes paths in ClangConfig.cmake, LLVMConfig.cmake, LLDConfig.cmake etc. | |
14 | 0003-fix-openmp-debug.patch | |
15 | 0004-fix-dr-1734.patch | |
16 | 0005-fix-tools-path.patch | |
17 | 0006-workaround-msvc-bug.patch # Fixed in LLVM 12.0.0 | |
18 | 0007-fix-compiler-rt-install-path.patch | |
19 | 0008-fix-libcxx-install.patch | |
20 | 0009-fix-tools-install-path.patch | |
21 | ) | |
22 | ||
23 | vcpkg_check_features( | |
24 | OUT_FEATURE_OPTIONS FEATURE_OPTIONS | |
25 | FEATURES | |
26 | tools LLVM_BUILD_TOOLS | |
27 | tools LLVM_INCLUDE_TOOLS | |
28 | utils LLVM_BUILD_UTILS | |
29 | utils LLVM_INCLUDE_UTILS | |
30 | enable-rtti LLVM_ENABLE_RTTI | |
31 | enable-ffi LLVM_ENABLE_FFI | |
32 | enable-terminfo LLVM_ENABLE_TERMINFO | |
33 | enable-threads LLVM_ENABLE_THREADS | |
34 | enable-eh LLVM_ENABLE_EH | |
35 | enable-bindings LLVM_ENABLE_BINDINGS | |
36 | ) | |
37 | ||
38 | # LLVM generates CMake error due to Visual Studio version 16.4 is known to miscompile part of LLVM. | |
39 | # LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON disables this error. | |
40 | # See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html | |
41 | # and thread "[llvm-dev] Longstanding failing tests - clang-tidy, MachO, Polly" on llvm-dev Jan 21-23 2020. | |
42 | list(APPEND FEATURE_OPTIONS | |
43 | -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON | |
44 | ) | |
45 | ||
46 | # By default assertions are enabled for Debug configuration only. | |
47 | if("enable-assertions" IN_LIST FEATURES) | |
48 | # Force enable assertions for all configurations. | |
49 | list(APPEND FEATURE_OPTIONS | |
50 | -DLLVM_ENABLE_ASSERTIONS=ON | |
51 | ) | |
52 | elseif("disable-assertions" IN_LIST FEATURES) | |
53 | # Force disable assertions for all configurations. | |
54 | list(APPEND FEATURE_OPTIONS | |
55 | -DLLVM_ENABLE_ASSERTIONS=OFF | |
56 | ) | |
57 | endif() | |
58 | ||
59 | # LLVM_ABI_BREAKING_CHECKS can be WITH_ASSERTS (default), FORCE_ON or FORCE_OFF. | |
60 | # By default abi-breaking checks are enabled if assertions are enabled. | |
61 | if("enable-abi-breaking-checks" IN_LIST FEATURES) | |
62 | # Force enable abi-breaking checks. | |
63 | list(APPEND FEATURE_OPTIONS | |
64 | -DLLVM_ABI_BREAKING_CHECKS=FORCE_ON | |
65 | ) | |
66 | elseif("disable-abi-breaking-checks" IN_LIST FEATURES) | |
67 | # Force disable abi-breaking checks. | |
68 | list(APPEND FEATURE_OPTIONS | |
69 | -DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF | |
70 | ) | |
71 | endif() | |
72 | ||
73 | set(LLVM_ENABLE_PROJECTS) | |
74 | if("clang" IN_LIST FEATURES OR "clang-tools-extra" IN_LIST FEATURES) | |
75 | list(APPEND LLVM_ENABLE_PROJECTS "clang") | |
76 | if("disable-clang-static-analyzer" IN_LIST FEATURES) | |
77 | list(APPEND FEATURE_OPTIONS | |
78 | # Disable ARCMT | |
79 | -DCLANG_ENABLE_ARCMT=OFF | |
80 | # Disable static analyzer | |
81 | -DCLANG_ENABLE_STATIC_ANALYZER=OFF | |
82 | ) | |
83 | endif() | |
84 | # 1) LLVM/Clang tools are relocated from ./bin/ to ./tools/llvm/ (LLVM_TOOLS_INSTALL_DIR=tools/llvm) | |
85 | # 2) Clang resource files are relocated from ./lib/clang/<version> to ./tools/llvm/lib/clang/<version> (see patch 0007-fix-compiler-rt-install-path.patch) | |
86 | # So, the relative path should be changed from ../lib/clang/<version> to ./lib/clang/<version> | |
87 | list(APPEND FEATURE_OPTIONS -DCLANG_RESOURCE_DIR=lib/clang/${LLVM_VERSION}) | |
88 | endif() | |
89 | if("clang-tools-extra" IN_LIST FEATURES) | |
90 | list(APPEND LLVM_ENABLE_PROJECTS "clang-tools-extra") | |
91 | endif() | |
92 | if("compiler-rt" IN_LIST FEATURES) | |
93 | list(APPEND LLVM_ENABLE_PROJECTS "compiler-rt") | |
94 | endif() | |
95 | if("flang" IN_LIST FEATURES) | |
96 | # Disable Flang on Windows (see http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html). | |
97 | if(VCPKG_TARGET_IS_WINDOWS) | |
98 | message(FATAL_ERROR "Building Flang with MSVC is not supported. Disable it until issues are fixed.") | |
99 | endif() | |
100 | list(APPEND LLVM_ENABLE_PROJECTS "flang") | |
101 | list(APPEND FEATURE_OPTIONS | |
102 | # Flang requires C++17 | |
103 | -DCMAKE_CXX_STANDARD=17 | |
104 | ) | |
105 | endif() | |
106 | if("libclc" IN_LIST FEATURES) | |
107 | list(APPEND LLVM_ENABLE_PROJECTS "libclc") | |
108 | endif() | |
109 | if("libcxx" IN_LIST FEATURES) | |
110 | if(VCPKG_TARGET_IS_WINDOWS) | |
111 | message(FATAL_ERROR "Building libcxx with MSVC is not supported. Disable it until issues are fixed.") | |
112 | endif() | |
113 | list(APPEND LLVM_ENABLE_PROJECTS "libcxx") | |
114 | endif() | |
115 | if("libcxxabi" IN_LIST FEATURES) | |
116 | if(VCPKG_TARGET_IS_WINDOWS) | |
117 | message(FATAL_ERROR "Building libcxxabi with MSVC is not supported. Disable it until issues are fixed.") | |
118 | endif() | |
119 | list(APPEND LLVM_ENABLE_PROJECTS "libcxxabi") | |
120 | endif() | |
121 | if("libunwind" IN_LIST FEATURES) | |
122 | if(VCPKG_TARGET_IS_WINDOWS) | |
123 | message(FATAL_ERROR "Building libunwind with MSVC is not supported. Disable it until issues are fixed.") | |
124 | endif() | |
125 | list(APPEND LLVM_ENABLE_PROJECTS "libunwind") | |
126 | endif() | |
127 | if("lld" IN_LIST FEATURES) | |
128 | list(APPEND LLVM_ENABLE_PROJECTS "lld") | |
129 | endif() | |
130 | if("lldb" IN_LIST FEATURES) | |
131 | list(APPEND LLVM_ENABLE_PROJECTS "lldb") | |
132 | endif() | |
133 | if("mlir" IN_LIST FEATURES) | |
134 | list(APPEND LLVM_ENABLE_PROJECTS "mlir") | |
135 | endif() | |
136 | if("openmp" IN_LIST FEATURES) | |
137 | # Disable OpenMP on Windows (see https://bugs.llvm.org/show_bug.cgi?id=45074). | |
138 | if(VCPKG_TARGET_IS_WINDOWS) | |
139 | message(FATAL_ERROR "Building OpenMP with MSVC is not supported. Disable it until issues are fixed.") | |
140 | endif() | |
141 | list(APPEND LLVM_ENABLE_PROJECTS "openmp") | |
142 | # Perl is required for the OpenMP run-time | |
143 | vcpkg_find_acquire_program(PERL) | |
144 | list(APPEND FEATURE_OPTIONS | |
145 | "-DPERL_EXECUTABLE=${PERL}" | |
146 | ) | |
147 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") | |
148 | list(APPEND FEATURE_OPTIONS | |
149 | -DLIBOMP_DEFAULT_LIB_NAME=libompd | |
150 | ) | |
151 | endif() | |
152 | endif() | |
153 | if("parallel-libs" IN_LIST FEATURES) | |
154 | list(APPEND LLVM_ENABLE_PROJECTS "parallel-libs") | |
155 | endif() | |
156 | if("polly" IN_LIST FEATURES) | |
157 | list(APPEND LLVM_ENABLE_PROJECTS "polly") | |
158 | endif() | |
159 | if("pstl" IN_LIST FEATURES) | |
160 | if(VCPKG_TARGET_IS_WINDOWS) | |
161 | message(FATAL_ERROR "Building pstl with MSVC is not supported. Disable it until issues are fixed.") | |
162 | endif() | |
163 | list(APPEND LLVM_ENABLE_PROJECTS "pstl") | |
164 | endif() | |
165 | ||
166 | set(known_llvm_targets | |
167 | AArch64 | |
168 | AMDGPU | |
169 | ARM | |
170 | AVR | |
171 | BPF | |
172 | Hexagon | |
173 | Lanai | |
174 | Mips | |
175 | MSP430 | |
176 | NVPTX | |
177 | PowerPC | |
178 | RISCV | |
179 | Sparc | |
180 | SystemZ | |
181 | WebAssembly | |
182 | X86 | |
183 | XCore | |
184 | ) | |
185 | ||
186 | set(LLVM_TARGETS_TO_BUILD "") | |
187 | foreach(llvm_target IN LISTS known_llvm_targets) | |
188 | string(TOLOWER "target-${llvm_target}" feature_name) | |
189 | if(feature_name IN_LIST FEATURES) | |
190 | list(APPEND LLVM_TARGETS_TO_BUILD "${llvm_target}") | |
191 | endif() | |
192 | endforeach() | |
193 | ||
194 | vcpkg_find_acquire_program(PYTHON3) | |
195 | get_filename_component(PYTHON3_DIR ${PYTHON3} DIRECTORY) | |
196 | vcpkg_add_to_path(${PYTHON3_DIR}) | |
197 | ||
198 | vcpkg_configure_cmake( | |
199 | SOURCE_PATH ${SOURCE_PATH}/llvm | |
200 | PREFER_NINJA | |
201 | OPTIONS | |
202 | ${FEATURE_OPTIONS} | |
203 | -DLLVM_INCLUDE_EXAMPLES=OFF | |
204 | -DLLVM_BUILD_EXAMPLES=OFF | |
205 | -DLLVM_INCLUDE_TESTS=OFF | |
206 | -DLLVM_BUILD_TESTS=OFF | |
207 | # Disable optional dependencies to libxml2 and zlib. | |
208 | -DLLVM_ENABLE_LIBXML2=OFF | |
209 | -DLLVM_ENABLE_ZLIB=OFF | |
210 | # Force TableGen to be built with optimization. This will significantly improve build time. | |
211 | -DLLVM_OPTIMIZED_TABLEGEN=ON | |
212 | "-DLLVM_ENABLE_PROJECTS=${LLVM_ENABLE_PROJECTS}" | |
213 | "-DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}" | |
214 | -DPACKAGE_VERSION=${LLVM_VERSION} | |
215 | # Limit the maximum number of concurrent link jobs to 1. This should fix low amount of memory issue for link. | |
216 | -DLLVM_PARALLEL_LINK_JOBS=1 | |
217 | # Disable build LLVM-C.dll (Windows only) due to doesn't compile with CMAKE_DEBUG_POSTFIX | |
218 | -DLLVM_BUILD_LLVM_C_DYLIB=OFF | |
219 | # Path for binary subdirectory (defaults to 'bin') | |
220 | -DLLVM_TOOLS_INSTALL_DIR=tools/llvm | |
221 | OPTIONS_DEBUG | |
222 | -DCMAKE_DEBUG_POSTFIX=d | |
223 | ) | |
224 | ||
225 | vcpkg_install_cmake() | |
226 | ||
227 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/llvm" TARGET_PATH "share/llvm") | |
228 | file(INSTALL ${SOURCE_PATH}/llvm/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/llvm RENAME copyright) | |
229 | file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/llvm_usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/llvm RENAME usage) | |
230 | ||
231 | if("clang" IN_LIST FEATURES) | |
232 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/clang" TARGET_PATH "share/clang" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
233 | file(INSTALL ${SOURCE_PATH}/clang/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/clang RENAME copyright) | |
234 | file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/clang_usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/clang RENAME usage) | |
235 | endif() | |
236 | ||
237 | if("clang-tools-extra" IN_LIST FEATURES) | |
238 | # Remove empty include directory include/clang-tidy/plugin | |
239 | file(GLOB_RECURSE INCLUDE_CLANG_TIDY_PLUGIN_FILES "${CURRENT_PACKAGES_DIR}/include/clang-tidy/plugin/*") | |
240 | if(NOT INCLUDE_CLANG_TIDY_PLUGIN_FILES) | |
241 | file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/clang-tidy/plugin") | |
242 | endif() | |
243 | endif() | |
244 | ||
245 | if("flang" IN_LIST FEATURES) | |
246 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/flang" TARGET_PATH "share/flang" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
247 | file(INSTALL ${SOURCE_PATH}/flang/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/flang RENAME copyright) | |
248 | file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/flang_usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/flang RENAME usage) | |
249 | # Remove empty include directory /include/flang/Config | |
250 | file(GLOB_RECURSE INCLUDE_FLANG_CONFIG_FILES "${CURRENT_PACKAGES_DIR}/include/flang/Config/*") | |
251 | if(NOT INCLUDE_FLANG_CONFIG_FILES) | |
252 | file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/flang/Config") | |
253 | endif() | |
254 | endif() | |
255 | ||
256 | if("lld" IN_LIST FEATURES) | |
257 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/lld" TARGET_PATH "share/lld" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
258 | file(INSTALL ${SOURCE_PATH}/lld/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/lld RENAME copyright) | |
259 | file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/lld_usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/lld RENAME usage) | |
260 | endif() | |
261 | ||
262 | if("mlir" IN_LIST FEATURES) | |
263 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/mlir" TARGET_PATH "share/mlir" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
264 | file(INSTALL ${SOURCE_PATH}/mlir/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/mlir RENAME copyright) | |
265 | file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/mlir_usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/mlir RENAME usage) | |
266 | endif() | |
267 | ||
268 | if("polly" IN_LIST FEATURES) | |
269 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/polly" TARGET_PATH "share/polly" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
270 | file(INSTALL ${SOURCE_PATH}/polly/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/polly RENAME copyright) | |
271 | endif() | |
272 | ||
273 | if("pstl" IN_LIST FEATURES) | |
274 | vcpkg_fixup_cmake_targets(CONFIG_PATH "share/ParallelSTL" TARGET_PATH "share/ParallelSTL" DO_NOT_DELETE_PARENT_CONFIG_PATH) | |
275 | file(INSTALL ${SOURCE_PATH}/pstl/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/ParallelSTL RENAME copyright) | |
276 | endif() | |
277 | ||
278 | vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}) | |
279 | ||
280 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") | |
281 | file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) | |
282 | file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) | |
283 | file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/tools) | |
284 | endif() | |
285 | ||
286 | # LLVM still generates a few DLLs in the static build: | |
287 | # * libclang.dll | |
288 | # * LTO.dll | |
289 | # * Remarks.dll | |
290 | set(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled) |