OSDN Git Service

CMake: Add LLVM_UTILS_INSTALL_DIR option
[android-x86/external-llvm.git] / CMakeLists.txt
1 # See docs/CMake.html for instructions about how to build LLVM with CMake.
2
3 cmake_minimum_required(VERSION 3.4.3)
4
5 if(POLICY CMP0022)
6   cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required
7 endif()
8
9 if (POLICY CMP0051)
10   # CMake 3.1 and higher include generator expressions of the form
11   # $<TARGETLIB:obj> in the SOURCES property.  These need to be
12   # stripped everywhere that access the SOURCES property, so we just
13   # defer to the OLD behavior of not including generator expressions
14   # in the output for now.
15   cmake_policy(SET CMP0051 OLD)
16 endif()
17
18 if(POLICY CMP0057)
19   cmake_policy(SET CMP0057 NEW)
20 endif()
21
22 if(NOT DEFINED LLVM_VERSION_MAJOR)
23   set(LLVM_VERSION_MAJOR 5)
24 endif()
25 if(NOT DEFINED LLVM_VERSION_MINOR)
26   set(LLVM_VERSION_MINOR 0)
27 endif()
28 if(NOT DEFINED LLVM_VERSION_PATCH)
29   set(LLVM_VERSION_PATCH 0)
30 endif()
31 if(NOT DEFINED LLVM_VERSION_SUFFIX)
32   set(LLVM_VERSION_SUFFIX svn)
33 endif()
34
35 if (POLICY CMP0048)
36   cmake_policy(SET CMP0048 NEW)
37   set(cmake_3_0_PROJ_VERSION
38     VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH})
39   set(cmake_3_0_LANGUAGES LANGUAGES)
40 endif()
41
42 if (NOT PACKAGE_VERSION)
43   set(PACKAGE_VERSION
44     "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}")
45 endif()
46
47 if ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQUAL ""))
48   message(WARNING "Visual Studio generators use the x86 host compiler by "
49                   "default, even for 64-bit targets. This can result in linker "
50                   "instability and out of memory errors. To use the 64-bit "
51                   "host compiler, pass -Thost=x64 on the CMake command line.")
52 endif()
53
54 project(LLVM
55   ${cmake_3_0_PROJ_VERSION}
56   ${cmake_3_0_LANGUAGES}
57   C CXX ASM)
58
59 if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
60   message(STATUS "No build type selected, default to Debug")
61   set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type (default Debug)" FORCE)
62 endif()
63
64 # This should only apply if you are both on an Apple host, and targeting Apple.
65 if(CMAKE_HOST_APPLE AND APPLE)
66   # if CMAKE_LIBTOOL is not set, try and find it with xcrun or find_program
67   if(NOT CMAKE_LIBTOOL)
68     if(NOT CMAKE_XCRUN)
69       find_program(CMAKE_XCRUN NAMES xcrun)
70     endif()
71     if(CMAKE_XCRUN)
72       execute_process(COMMAND ${CMAKE_XCRUN} -find libtool
73         OUTPUT_VARIABLE CMAKE_LIBTOOL
74         OUTPUT_STRIP_TRAILING_WHITESPACE)
75     endif()
76
77     if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL)
78       find_program(CMAKE_LIBTOOL NAMES libtool)
79     endif()
80   endif()
81
82   get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
83   if(CMAKE_LIBTOOL)
84     set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable")
85     message(STATUS "Found libtool - ${CMAKE_LIBTOOL}")
86
87     execute_process(COMMAND ${CMAKE_LIBTOOL} -V
88       OUTPUT_VARIABLE LIBTOOL_V_OUTPUT
89       OUTPUT_STRIP_TRAILING_WHITESPACE)
90     if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*")
91       string(REGEX REPLACE ".*cctools-([0-9.]+).*" "\\1" LIBTOOL_VERSION
92         ${LIBTOOL_V_OUTPUT})
93       if(NOT LIBTOOL_VERSION VERSION_LESS "862")
94         set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols")
95       endif()
96     endif()
97
98     foreach(lang ${languages})
99       set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
100         "${CMAKE_LIBTOOL} -static ${LIBTOOL_NO_WARNING_FLAG} -o <TARGET> \
101         <LINK_FLAGS> <OBJECTS> ")
102     endforeach()
103   endif()
104
105   # If DYLD_LIBRARY_PATH is set we need to set it on archiver commands
106   if(DYLD_LIBRARY_PATH)
107     set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}")
108     foreach(lang ${languages})
109       foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY})
110         list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW
111              "${dyld_envar} ${cmd}")
112       endforeach()
113       set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
114         ${CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW})
115     endforeach()
116   endif()
117 endif()
118
119 # Side-by-side subprojects layout: automatically set the
120 # LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS
121 # This allows an easy way of setting up a build directory for llvm and another
122 # one for llvm+clang+... using the same sources.
123 set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly")
124 set(LLVM_ENABLE_PROJECTS "" CACHE STRING
125         "Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}), or \"all\".")
126 if( LLVM_ENABLE_PROJECTS STREQUAL "all" )
127   set( LLVM_ENABLE_PROJECTS ${LLVM_ALL_PROJECTS})
128 endif()
129 foreach(proj ${LLVM_ENABLE_PROJECTS})
130   set(PROJ_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}")
131   if(NOT EXISTS "${PROJ_DIR}" OR NOT IS_DIRECTORY "${PROJ_DIR}")
132     message(FATAL_ERROR "LLVM_ENABLE_PROJECTS requests ${proj} but directory not found: ${PROJ_DIR}")
133   endif()
134   string(TOUPPER "${proj}" upper_proj)
135   STRING(REGEX REPLACE "-" "_" upper_proj ${upper_proj})
136   set(LLVM_EXTERNAL_${upper_proj}_SOURCE_DIR   "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}")
137   # There is a widely spread opinion that clang-tools-extra should be merged
138   # into clang. The following simulates it by always enabling clang-tools-extra
139   # when enabling clang.
140   if (proj STREQUAL "clang")
141     set(LLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../clang-tools-extra")
142   endif()
143 endforeach()
144
145 # Build llvm with ccache if the package is present
146 set(LLVM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build")
147 if(LLVM_CCACHE_BUILD)
148   find_program(CCACHE_PROGRAM ccache)
149   if(CCACHE_PROGRAM)
150       set(LLVM_CCACHE_SIZE "" CACHE STRING "Size of ccache")
151       set(LLVM_CCACHE_DIR "" CACHE STRING "Directory to keep ccached data")
152       set(CCACHE_PROGRAM "CCACHE_CPP2=yes CCACHE_HASHDIR=yes ${CCACHE_PROGRAM}")
153       if (LLVM_CCACHE_SIZE)
154         set(CCACHE_PROGRAM "CCACHE_SIZE=${LLVM_CCACHE_SIZE} ${CCACHE_PROGRAM}")
155       endif()
156       if (LLVM_CCACHE_DIR)
157         set(CCACHE_PROGRAM "CCACHE_DIR=${LLVM_CCACHE_DIR} ${CCACHE_PROGRAM}")
158       endif()
159       set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
160   else()
161     message(FATAL_ERROR "Unable to find the program ccache. Set LLVM_CCACHE_BUILD to OFF")
162   endif()
163 endif()
164
165 option(LLVM_DEPENDENCY_DEBUGGING "Dependency debugging mode to verify correctly expressed library dependencies (Darwin only)" OFF)
166
167 # Some features of the LLVM build may be disallowed when dependency debugging is
168 # enabled. In particular you cannot use ccache because we want to force compile
169 # operations to always happen.
170 if(LLVM_DEPENDENCY_DEBUGGING)
171   if(NOT CMAKE_HOST_APPLE)
172     message(FATAL_ERROR "Dependency debugging is only currently supported on Darwin hosts.")
173   endif()
174   if(LLVM_CCACHE_BUILD)
175     message(FATAL_ERROR "Cannot enable dependency debugging while using ccache.")
176   endif()
177 endif()
178
179 option(LLVM_BUILD_GLOBAL_ISEL "Experimental: Build GlobalISel" ON)
180 if(LLVM_BUILD_GLOBAL_ISEL)
181   add_definitions(-DLLVM_BUILD_GLOBAL_ISEL)
182 endif()
183
184 option(LLVM_ENABLE_DAGISEL_COV "Debug: Prints tablegen patterns that were used for selecting" OFF)
185
186 # Add path for custom modules
187 set(CMAKE_MODULE_PATH
188   ${CMAKE_MODULE_PATH}
189   "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
190   "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
191   )
192
193 # Generate a CompilationDatabase (compile_commands.json file) for our build,
194 # for use by clang_complete, YouCompleteMe, etc.
195 set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
196
197 option(LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF)
198
199 option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)
200
201 option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON)
202 if ( LLVM_USE_FOLDERS )
203   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
204 endif()
205
206 include(VersionFromVCS)
207
208 option(LLVM_APPEND_VC_REV
209   "Embed the version control system revision id in LLVM" ON)
210
211 if( LLVM_APPEND_VC_REV )
212   add_version_info_from_vcs(PACKAGE_VERSION)
213 endif()
214
215 set(PACKAGE_NAME LLVM)
216 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
217 set(PACKAGE_BUGREPORT "http://llvm.org/bugs/")
218
219 set(BUG_REPORT_URL "${PACKAGE_BUGREPORT}" CACHE STRING
220   "Default URL where bug reports are to be submitted.")
221
222 # Configure CPack.
223 set(CPACK_PACKAGE_INSTALL_DIRECTORY "LLVM")
224 set(CPACK_PACKAGE_VENDOR "LLVM")
225 set(CPACK_PACKAGE_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
226 set(CPACK_PACKAGE_VERSION_MINOR ${LLVM_VERSION_MINOR})
227 set(CPACK_PACKAGE_VERSION_PATCH ${LLVM_VERSION_PATCH})
228 set(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION})
229 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.TXT")
230 set(CPACK_NSIS_COMPRESSOR "/SOLID lzma \r\n SetCompressorDictSize 32")
231 if(WIN32 AND NOT UNIX)
232   set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "LLVM")
233   set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_logo.bmp")
234   set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_icon.ico")
235   set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_icon.ico")
236   set(CPACK_NSIS_MODIFY_PATH "ON")
237   set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON")
238   set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS
239     "ExecWait '$INSTDIR/tools/msbuild/install.bat'")
240   set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
241     "ExecWait '$INSTDIR/tools/msbuild/uninstall.bat'")
242   if( CMAKE_CL_64 )
243     set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
244   endif()
245 endif()
246 include(CPack)
247
248 # Sanity check our source directory to make sure that we are not trying to
249 # generate an in-tree build (unless on MSVC_IDE, where it is ok), and to make
250 # sure that we don't have any stray generated files lying around in the tree
251 # (which would end up getting picked up by header search, instead of the correct
252 # versions).
253 if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
254   message(FATAL_ERROR "In-source builds are not allowed.
255 CMake would overwrite the makefiles distributed with LLVM.
256 Please create a directory and run cmake from there, passing the path
257 to this source directory as the last argument.
258 This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
259 Please delete them.")
260 endif()
261 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
262   file(GLOB_RECURSE
263     tablegenned_files_on_include_dir
264     "${CMAKE_CURRENT_SOURCE_DIR}/include/llvm/*.gen")
265   file(GLOB_RECURSE
266     tablegenned_files_on_lib_dir
267     "${CMAKE_CURRENT_SOURCE_DIR}/lib/Target/*.inc")
268   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
269     message(FATAL_ERROR "Apparently there is a previous in-source build,
270 probably as the result of running `configure' and `make' on
271 ${CMAKE_CURRENT_SOURCE_DIR}.
272 This may cause problems. The suspicious files are:
273 ${tablegenned_files_on_lib_dir}
274 ${tablegenned_files_on_include_dir}
275 Please clean the source directory.")
276   endif()
277 endif()
278
279 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
280
281 if (CMAKE_BUILD_TYPE AND
282     NOT uppercase_CMAKE_BUILD_TYPE MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL)$")
283   message(FATAL_ERROR "Invalid value for CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
284 endif()
285
286 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
287
288 set(LLVM_TOOLS_INSTALL_DIR "bin" CACHE STRING "Path for binary subdirectory (defaults to 'bin')")
289 mark_as_advanced(LLVM_TOOLS_INSTALL_DIR)
290
291 set(LLVM_UTILS_INSTALL_DIR "bin" CACHE STRING
292     "Path to install LLVM utilities (enabled by LLVM_INSTALL_UTILS=ON) (defaults to LLVM_TOOLS_INSTALL_DIR)")
293 mark_as_advanced(LLVM_TOOLS_INSTALL_DIR)
294
295 # They are used as destination of target generators.
296 set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
297 set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
298 if(WIN32 OR CYGWIN)
299   # DLL platform -- put DLLs into bin.
300   set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
301 else()
302   set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
303 endif()
304
305 # Each of them corresponds to llvm-config's.
306 set(LLVM_TOOLS_BINARY_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) # --bindir
307 set(LLVM_LIBRARY_DIR      ${LLVM_LIBRARY_OUTPUT_INTDIR}) # --libdir
308 set(LLVM_MAIN_SRC_DIR     ${CMAKE_CURRENT_SOURCE_DIR}  ) # --src-root
309 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include ) # --includedir
310 set(LLVM_BINARY_DIR       ${CMAKE_CURRENT_BINARY_DIR}  ) # --prefix
311
312 # Note: LLVM_CMAKE_PATH does not include generated files
313 set(LLVM_CMAKE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules)
314 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
315 set(LLVM_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include)
316
317 set(LLVM_ALL_TARGETS
318   AArch64
319   AMDGPU
320   ARM
321   BPF
322   Hexagon
323   Lanai
324   Mips
325   MSP430
326   NVPTX
327   PowerPC
328   RISCV
329   Sparc
330   SystemZ
331   X86
332   XCore
333   )
334
335 # List of targets with JIT support:
336 set(LLVM_TARGETS_WITH_JIT X86 PowerPC AArch64 ARM Mips SystemZ)
337
338 set(LLVM_TARGETS_TO_BUILD "all"
339     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
340
341 set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ""
342   CACHE STRING "Semicolon-separated list of experimental targets to build.")
343
344 option(BUILD_SHARED_LIBS
345   "Build all libraries as shared libraries instead of static" OFF)
346
347 option(LLVM_ENABLE_BACKTRACES "Enable embedding backtraces on crash." ON)
348 if(LLVM_ENABLE_BACKTRACES)
349   set(ENABLE_BACKTRACES 1)
350 endif()
351
352 option(LLVM_ENABLE_CRASH_OVERRIDES "Enable crash overrides." ON)
353 if(LLVM_ENABLE_CRASH_OVERRIDES)
354   set(ENABLE_CRASH_OVERRIDES 1)
355 endif()
356
357 option(LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF)
358 set(FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so")
359 set(FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h")
360
361 set(LLVM_TARGET_ARCH "host"
362   CACHE STRING "Set target to use for LLVM JIT or use \"host\" for automatic detection.")
363
364 option(LLVM_ENABLE_TERMINFO "Use terminfo database if available." ON)
365
366 option(LLVM_ENABLE_LIBEDIT "Use libedit if available." ON)
367
368 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
369
370 option(LLVM_ENABLE_ZLIB "Use zlib for compression/decompression if available." ON)
371
372 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
373   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
374 endif()
375
376 set(LLVM_TARGETS_TO_BUILD
377    ${LLVM_TARGETS_TO_BUILD}
378    ${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD})
379 list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD)
380
381 option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON)
382 option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON)
383 option(LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF)
384 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
385   option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." ON)
386   option(LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY "Compile with -fmodules-local-submodule-visibility." OFF)
387 else()
388   option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." OFF)
389   option(LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY "Compile with -fmodules-local-submodule-visibility." ON)
390 endif()
391 option(LLVM_ENABLE_CXX1Y "Compile with C++1y enabled." OFF)
392 option(LLVM_ENABLE_CXX1Z "Compile with C++1z enabled." OFF)
393 option(LLVM_ENABLE_LIBCXX "Use libc++ if available." OFF)
394 option(LLVM_ENABLE_LLD "Use lld as C and C++ linker." OFF)
395 option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
396 option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
397
398 if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
399   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
400 else()
401   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
402 endif()
403
404 option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF)
405
406 set(LLVM_ABI_BREAKING_CHECKS "WITH_ASSERTS" CACHE STRING
407   "Enable abi-breaking checks.  Can be WITH_ASSERTS, FORCE_ON or FORCE_OFF.")
408
409 option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN
410        "Set to ON to force using an old, unsupported host toolchain." OFF)
411
412 option(LLVM_USE_INTEL_JITEVENTS
413   "Use Intel JIT API to inform Intel(R) VTune(TM) Amplifier XE 2011 about JIT code"
414   OFF)
415
416 if( LLVM_USE_INTEL_JITEVENTS )
417   # Verify we are on a supported platform
418   if( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
419     message(FATAL_ERROR
420       "Intel JIT API support is available on Linux and Windows only.")
421   endif()
422 endif( LLVM_USE_INTEL_JITEVENTS )
423
424 option(LLVM_USE_OPROFILE
425   "Use opagent JIT interface to inform OProfile about JIT code" OFF)
426
427 option(LLVM_EXTERNALIZE_DEBUGINFO
428   "Generate dSYM files and strip executables and libraries (Darwin Only)" OFF)
429
430 # If enabled, verify we are on a platform that supports oprofile.
431 if( LLVM_USE_OPROFILE )
432   if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
433     message(FATAL_ERROR "OProfile support is available on Linux only.")
434   endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
435 endif( LLVM_USE_OPROFILE )
436
437 set(LLVM_USE_SANITIZER "" CACHE STRING
438   "Define the sanitizer used to build binaries and tests.")
439
440 option(LLVM_USE_SPLIT_DWARF
441   "Use -gsplit-dwarf when compiling llvm." OFF)
442
443 option(LLVM_POLLY_LINK_INTO_TOOLS "Statically link Polly into tools (if available)" ON)
444 option(LLVM_POLLY_BUILD "Build LLVM with Polly" ON)
445
446 if (EXISTS ${LLVM_MAIN_SRC_DIR}/tools/polly/CMakeLists.txt)
447   set(POLLY_IN_TREE TRUE)
448 elseif(LLVM_EXTERNAL_POLLY_SOURCE_DIR)
449   set(POLLY_IN_TREE TRUE)
450 else()
451   set(POLLY_IN_TREE FALSE)
452 endif()
453
454 if (LLVM_POLLY_BUILD AND POLLY_IN_TREE)
455   set(WITH_POLLY ON)
456 else()
457   set(WITH_POLLY OFF)
458 endif()
459
460 if (LLVM_POLLY_LINK_INTO_TOOLS AND WITH_POLLY)
461   set(LINK_POLLY_INTO_TOOLS ON)
462 else()
463   set(LINK_POLLY_INTO_TOOLS OFF)
464 endif()
465
466 # Define an option controlling whether we should build for 32-bit on 64-bit
467 # platforms, where supported.
468 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
469   # TODO: support other platforms and toolchains.
470   option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF)
471 endif()
472
473 # Define the default arguments to use with 'lit', and an option for the user to
474 # override.
475 set(LIT_ARGS_DEFAULT "-sv")
476 if (MSVC_IDE OR XCODE)
477   set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
478 endif()
479 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
480
481 # On Win32 hosts, provide an option to specify the path to the GnuWin32 tools.
482 if( WIN32 AND NOT CYGWIN )
483   set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools")
484 endif()
485
486 # Define options to control the inclusion and default build behavior for
487 # components which may not strictly be necessary (tools, examples, and tests).
488 #
489 # This is primarily to support building smaller or faster project files.
490 option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON)
491 option(LLVM_BUILD_TOOLS
492   "Build the LLVM tools. If OFF, just generate build targets." ON)
493
494 option(LLVM_INCLUDE_UTILS "Generate build targets for the LLVM utils." ON)
495 option(LLVM_BUILD_UTILS
496   "Build LLVM utility binaries. If OFF, just generate build targets." ON)
497
498 option(LLVM_INCLUDE_RUNTIMES "Generate build targets for the LLVM runtimes." ON)
499 option(LLVM_BUILD_RUNTIMES
500   "Build the LLVM runtimes. If OFF, just generate build targets." ON)
501
502 option(LLVM_BUILD_RUNTIME
503   "Build the LLVM runtime libraries." ON)
504 option(LLVM_BUILD_EXAMPLES
505   "Build the LLVM example programs. If OFF, just generate build targets." OFF)
506 option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON)
507
508 option(LLVM_BUILD_TESTS
509   "Build LLVM unit tests. If OFF, just generate build targets." OFF)
510 option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
511 option(LLVM_INCLUDE_GO_TESTS "Include the Go bindings tests in test build targets." ON)
512
513 option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF)
514 option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." ON)
515 option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API documentation." OFF)
516 option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF)
517 option (LLVM_ENABLE_OCAMLDOC "Build OCaml bindings documentation." ON)
518
519 set(LLVM_INSTALL_DOXYGEN_HTML_DIR "share/doc/llvm/doxygen-html"
520     CACHE STRING "Doxygen-generated HTML documentation install directory")
521 set(LLVM_INSTALL_OCAMLDOC_HTML_DIR "share/doc/llvm/ocaml-html"
522     CACHE STRING "OCamldoc-generated HTML documentation install directory")
523
524 option (LLVM_BUILD_EXTERNAL_COMPILER_RT
525   "Build compiler-rt as an external project." OFF)
526
527 option (LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO
528   "Show target and host info when tools are invoked with --version." ON)
529
530 # You can configure which libraries from LLVM you want to include in the
531 # shared library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited
532 # list of LLVM components. All component names handled by llvm-config are valid.
533 if(NOT DEFINED LLVM_DYLIB_COMPONENTS)
534   set(LLVM_DYLIB_COMPONENTS "all" CACHE STRING
535     "Semicolon-separated list of components to include in libLLVM, or \"all\".")
536 endif()
537 option(LLVM_LINK_LLVM_DYLIB "Link tools against the libllvm dynamic library" OFF)
538 option(LLVM_BUILD_LLVM_C_DYLIB "Build libllvm-c re-export library (Darwin Only)" OFF)
539 set(LLVM_BUILD_LLVM_DYLIB_default OFF)
540 if(LLVM_LINK_LLVM_DYLIB OR LLVM_BUILD_LLVM_C_DYLIB)
541   set(LLVM_BUILD_LLVM_DYLIB_default ON)
542 endif()
543 option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" ${LLVM_BUILD_LLVM_DYLIB_default})
544
545 option(LLVM_DYLIB_SYMBOL_VERSIONING OFF)
546
547 option(LLVM_OPTIMIZED_TABLEGEN "Force TableGen to be built with optimization" OFF)
548 if(CMAKE_CROSSCOMPILING OR (LLVM_OPTIMIZED_TABLEGEN AND (LLVM_ENABLE_ASSERTIONS OR CMAKE_CONFIGURATION_TYPES)))
549   set(LLVM_USE_HOST_TOOLS ON)
550 endif()
551
552 if (MSVC_IDE AND NOT (MSVC_VERSION LESS 1900))
553   option(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION "Configure project to use Visual Studio native visualizers" TRUE)
554 else()
555   set(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION FALSE CACHE INTERNAL "For Visual Studio 2013, manually copy natvis files to Documents\\Visual Studio 2013\\Visualizers" FORCE)
556 endif()
557
558 if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE)
559   if(NOT LLVM_PROFILE_MERGE_POOL_SIZE)
560     # A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine
561     # for spining disks. Anything higher may only help on slower mediums.
562     set(LLVM_PROFILE_MERGE_POOL_SIZE "4")
563   endif()
564   if(NOT LLVM_PROFILE_FILE_PATTERN)
565     if(NOT LLVM_PROFILE_DATA_DIR)
566       file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
567     else()
568       file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
569     endif()
570   endif()
571 endif()
572
573 if (LLVM_BUILD_STATIC)
574   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
575 endif()
576
577 # Override the default target with an environment variable named by LLVM_TARGET_TRIPLE_ENV.
578 set(LLVM_TARGET_TRIPLE_ENV CACHE STRING "The name of environment variable to override default target. Disabled by blank.")
579 mark_as_advanced(LLVM_TARGET_TRIPLE_ENV)
580
581 # All options referred to from HandleLLVMOptions have to be specified
582 # BEFORE this include, otherwise options will not be correctly set on
583 # first cmake run
584 include(config-ix)
585
586 string(REPLACE "Native" ${LLVM_NATIVE_ARCH}
587   LLVM_TARGETS_TO_BUILD "${LLVM_TARGETS_TO_BUILD}")
588 list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD)
589
590 # By default, we target the host, but this can be overridden at CMake
591 # invocation time.
592 set(LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_HOST_TRIPLE}" CACHE STRING
593   "Default target for which LLVM will generate code." )
594 set(TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}")
595 message(STATUS "LLVM host triple: ${LLVM_HOST_TRIPLE}")
596 message(STATUS "LLVM default target triple: ${LLVM_DEFAULT_TARGET_TRIPLE}")
597
598 include(HandleLLVMOptions)
599
600 # Verify that we can find a Python 2 interpreter.  Python 3 is unsupported.
601 # FIXME: We should support systems with only Python 3, but that requires work
602 # on LLDB.
603 set(Python_ADDITIONAL_VERSIONS 2.7)
604 include(FindPythonInterp)
605 if( NOT PYTHONINTERP_FOUND )
606   message(FATAL_ERROR
607 "Unable to find Python interpreter, required for builds and testing.
608
609 Please install Python or specify the PYTHON_EXECUTABLE CMake variable.")
610 endif()
611
612 if( ${PYTHON_VERSION_STRING} VERSION_LESS 2.7 )
613   message(FATAL_ERROR "Python 2.7 or newer is required")
614 endif()
615
616 ######
617 # LLVMBuild Integration
618 #
619 # We use llvm-build to generate all the data required by the CMake based
620 # build system in one swoop:
621 #
622 #  - We generate a file (a CMake fragment) in the object root which contains
623 #    all the definitions that are required by CMake.
624 #
625 #  - We generate the library table used by llvm-config.
626 #
627 #  - We generate the dependencies for the CMake fragment, so that we will
628 #    automatically reconfigure outselves.
629
630 set(LLVMBUILDTOOL "${LLVM_MAIN_SRC_DIR}/utils/llvm-build/llvm-build")
631 set(LLVMCONFIGLIBRARYDEPENDENCIESINC
632   "${LLVM_BINARY_DIR}/tools/llvm-config/LibraryDependencies.inc")
633 set(LLVMBUILDCMAKEFRAG
634   "${LLVM_BINARY_DIR}/LLVMBuild.cmake")
635
636 # Create the list of optional components that are enabled
637 if (LLVM_USE_INTEL_JITEVENTS)
638   set(LLVMOPTIONALCOMPONENTS IntelJITEvents)
639 endif (LLVM_USE_INTEL_JITEVENTS)
640 if (LLVM_USE_OPROFILE)
641   set(LLVMOPTIONALCOMPONENTS ${LLVMOPTIONALCOMPONENTS} OProfileJIT)
642 endif (LLVM_USE_OPROFILE)
643
644 message(STATUS "Constructing LLVMBuild project information")
645 execute_process(
646   COMMAND ${PYTHON_EXECUTABLE} -B ${LLVMBUILDTOOL}
647             --native-target "${LLVM_NATIVE_ARCH}"
648             --enable-targets "${LLVM_TARGETS_TO_BUILD}"
649             --enable-optional-components "${LLVMOPTIONALCOMPONENTS}"
650             --write-library-table ${LLVMCONFIGLIBRARYDEPENDENCIESINC}
651             --write-cmake-fragment ${LLVMBUILDCMAKEFRAG}
652             OUTPUT_VARIABLE LLVMBUILDOUTPUT
653             ERROR_VARIABLE LLVMBUILDERRORS
654             OUTPUT_STRIP_TRAILING_WHITESPACE
655             ERROR_STRIP_TRAILING_WHITESPACE
656   RESULT_VARIABLE LLVMBUILDRESULT)
657
658 # On Win32, CMake doesn't properly handle piping the default output/error
659 # streams into the GUI console. So, we explicitly catch and report them.
660 if( NOT "${LLVMBUILDOUTPUT}" STREQUAL "")
661   message(STATUS "llvm-build output: ${LLVMBUILDOUTPUT}")
662 endif()
663 if( NOT "${LLVMBUILDRESULT}" STREQUAL "0" )
664   message(FATAL_ERROR
665     "Unexpected failure executing llvm-build: ${LLVMBUILDERRORS}")
666 endif()
667
668 # Include the generated CMake fragment. This will define properties from the
669 # LLVMBuild files in a format which is easy to consume from CMake, and will add
670 # the dependencies so that CMake will reconfigure properly when the LLVMBuild
671 # files change.
672 include(${LLVMBUILDCMAKEFRAG})
673
674 ######
675
676 # Configure all of the various header file fragments LLVM uses which depend on
677 # configuration variables.
678 set(LLVM_ENUM_TARGETS "")
679 set(LLVM_ENUM_ASM_PRINTERS "")
680 set(LLVM_ENUM_ASM_PARSERS "")
681 set(LLVM_ENUM_DISASSEMBLERS "")
682 foreach(t ${LLVM_TARGETS_TO_BUILD})
683   set( td ${LLVM_MAIN_SRC_DIR}/lib/Target/${t} )
684
685   list(FIND LLVM_ALL_TARGETS ${t} idx)
686   list(FIND LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ${t} idy)
687   if( idx LESS 0 AND idy LESS 0 )
688     message(FATAL_ERROR "The target `${t}' does not exist.
689     It should be one of\n${LLVM_ALL_TARGETS}")
690   else()
691     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${t})\n")
692   endif()
693
694   file(GLOB asmp_file "${td}/*AsmPrinter.cpp")
695   if( asmp_file )
696     set(LLVM_ENUM_ASM_PRINTERS
697       "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
698   endif()
699   if( EXISTS ${td}/AsmParser/CMakeLists.txt )
700     set(LLVM_ENUM_ASM_PARSERS
701       "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n")
702   endif()
703   if( EXISTS ${td}/Disassembler/CMakeLists.txt )
704     set(LLVM_ENUM_DISASSEMBLERS
705       "${LLVM_ENUM_DISASSEMBLERS}LLVM_DISASSEMBLER(${t})\n")
706   endif()
707 endforeach(t)
708
709 # Produce the target definition files, which provide a way for clients to easily
710 # include various classes of targets.
711 configure_file(
712   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in
713   ${LLVM_INCLUDE_DIR}/llvm/Config/AsmPrinters.def
714   )
715 configure_file(
716   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in
717   ${LLVM_INCLUDE_DIR}/llvm/Config/AsmParsers.def
718   )
719 configure_file(
720   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Disassemblers.def.in
721   ${LLVM_INCLUDE_DIR}/llvm/Config/Disassemblers.def
722   )
723 configure_file(
724   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
725   ${LLVM_INCLUDE_DIR}/llvm/Config/Targets.def
726   )
727
728 # Configure the three LLVM configuration header files.
729 configure_file(
730   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/config.h.cmake
731   ${LLVM_INCLUDE_DIR}/llvm/Config/config.h)
732 configure_file(
733   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/llvm-config.h.cmake
734   ${LLVM_INCLUDE_DIR}/llvm/Config/llvm-config.h)
735 configure_file(
736   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/abi-breaking.h.cmake
737   ${LLVM_INCLUDE_DIR}/llvm/Config/abi-breaking.h)
738 configure_file(
739   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/DataTypes.h.cmake
740   ${LLVM_INCLUDE_DIR}/llvm/Support/DataTypes.h)
741
742 # Add target for generating source rpm package.
743 set(LLVM_SRPM_USER_BINARY_SPECFILE ${CMAKE_CURRENT_SOURCE_DIR}/llvm.spec.in
744     CACHE FILEPATH ".spec file to use for srpm generation")
745 set(LLVM_SRPM_BINARY_SPECFILE ${CMAKE_CURRENT_BINARY_DIR}/llvm.spec)
746 set(LLVM_SRPM_DIR "${CMAKE_CURRENT_BINARY_DIR}/srpm")
747
748 # SVN_REVISION and GIT_COMMIT get set by the call to add_version_info_from_vcs.
749 # DUMMY_VAR contains a version string which we don't care about.
750 add_version_info_from_vcs(DUMMY_VAR)
751 if ( SVN_REVISION )
752   set(LLVM_RPM_SPEC_REVISION "r${SVN_REVISION}")
753 elseif ( GIT_COMMIT )
754   set (LLVM_RPM_SPEC_REVISION "g${GIT_COMMIT}")
755 endif()
756
757 configure_file(
758   ${LLVM_SRPM_USER_BINARY_SPECFILE}
759   ${LLVM_SRPM_BINARY_SPECFILE} @ONLY)
760
761 add_custom_target(srpm
762   COMMAND cpack -G TGZ --config CPackSourceConfig.cmake -B ${LLVM_SRPM_DIR}/SOURCES
763   COMMAND rpmbuild -bs --define '_topdir ${LLVM_SRPM_DIR}' ${LLVM_SRPM_BINARY_SPECFILE})
764
765
766 # They are not referenced. See set_output_directory().
767 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/bin )
768 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
769 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
770
771 if(APPLE AND DARWIN_LTO_LIBRARY)
772   set(CMAKE_EXE_LINKER_FLAGS
773     "${CMAKE_EXE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}")
774   set(CMAKE_SHARED_LINKER_FLAGS
775     "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}")
776   set(CMAKE_MODULE_LINKER_FLAGS
777     "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}")
778 endif()
779
780 # Work around a broken bfd ld behavior. When linking a binary with a
781 # foo.so library, it will try to find any library that foo.so uses and
782 # check its symbols. This is wasteful (the check was done when foo.so
783 # was created) and can fail since it is not the dynamic linker and
784 # doesn't know how to handle search paths correctly.
785 if (UNIX AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS|AIX")
786   set(CMAKE_EXE_LINKER_FLAGS
787       "${CMAKE_EXE_LINKER_FLAGS} -Wl,-allow-shlib-undefined")
788 endif()
789
790 set(CMAKE_INCLUDE_CURRENT_DIR ON)
791
792 include_directories( ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})
793
794 # when crosscompiling import the executable targets from a file
795 if(LLVM_USE_HOST_TOOLS)
796   include(CrossCompile)
797 endif(LLVM_USE_HOST_TOOLS)
798 if(LLVM_TARGET_IS_CROSSCOMPILE_HOST)
799 # Dummy use to avoid CMake Wraning: Manually-specified variables were not used
800 # (this is a variable that CrossCompile sets on recursive invocations)
801 endif()
802
803 if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
804   # On FreeBSD, /usr/local/* is not used by default. In order to build LLVM
805   # with libxml2, iconv.h, etc., we must add /usr/local paths.
806   include_directories("/usr/local/include")
807   link_directories("/usr/local/lib")
808 endif(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
809
810 if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
811    # special hack for Solaris to handle crazy system sys/regset.h
812    include_directories("${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/Solaris")
813 endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
814
815 # Make sure we don't get -rdynamic in every binary. For those that need it,
816 # use export_executable_symbols(target).
817 set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
818
819 set(LLVM_PROFDATA_FILE "" CACHE FILEPATH
820   "Profiling data file to use when compiling in order to improve runtime performance.")
821
822 if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE})
823   if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
824     add_definitions("-fprofile-instr-use=${LLVM_PROFDATA_FILE}")
825   else()
826     message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang")
827   endif()
828 endif()
829
830 include(AddLLVM)
831 include(TableGen)
832
833 if( MINGW )
834   # People report that -O3 is unreliable on MinGW. The traditional
835   # build also uses -O2 for that reason:
836   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
837 endif()
838
839 # Put this before tblgen. Else we have a circular dependence.
840 add_subdirectory(lib/Demangle)
841 add_subdirectory(lib/Support)
842 add_subdirectory(lib/TableGen)
843
844 add_subdirectory(utils/TableGen)
845
846 # Force target to be built as soon as possible. Clang modules builds depend
847 # header-wise on it as they ship all headers from the umbrella folders. Building
848 # an entire module might include header, which depends on intrinsics_gen. This
849 # should be right after LLVMSupport and LLVMTableGen otherwise we introduce a
850 # circular dependence.
851 if (LLVM_ENABLE_MODULES)
852   list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen)
853 endif(LLVM_ENABLE_MODULES)
854
855 add_subdirectory(include/llvm)
856
857 add_subdirectory(lib)
858
859 if( LLVM_INCLUDE_UTILS )
860   add_subdirectory(utils/FileCheck)
861   add_subdirectory(utils/PerfectShuffle)
862   add_subdirectory(utils/count)
863   add_subdirectory(utils/not)
864   add_subdirectory(utils/llvm-lit)
865   add_subdirectory(utils/yaml-bench)
866 else()
867   if ( LLVM_INCLUDE_TESTS )
868     message(FATAL_ERROR "Including tests when not building utils will not work.
869     Either set LLVM_INCLUDE_UTILS to On, or set LLVM_INCLDE_TESTS to Off.")
870   endif()
871 endif()
872
873 # Use LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION instead of LLVM_INCLUDE_UTILS because it is not really a util
874 if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION)
875   add_subdirectory(utils/LLVMVisualizers)
876 endif()
877
878 foreach( binding ${LLVM_BINDINGS_LIST} )
879   if( EXISTS "${LLVM_MAIN_SRC_DIR}/bindings/${binding}/CMakeLists.txt" )
880     add_subdirectory(bindings/${binding})
881   endif()
882 endforeach()
883
884 add_subdirectory(projects)
885
886 if( LLVM_INCLUDE_TOOLS )
887   add_subdirectory(tools)
888 endif()
889
890 if( LLVM_INCLUDE_RUNTIMES )
891   add_subdirectory(runtimes)
892 endif()
893
894 if( LLVM_INCLUDE_EXAMPLES )
895   add_subdirectory(examples)
896 endif()
897
898 if( LLVM_INCLUDE_TESTS )
899   if(EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite AND TARGET clang)
900     include(LLVMExternalProjectUtils)
901     llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite
902       USE_TOOLCHAIN
903       EXCLUDE_FROM_ALL
904       NO_INSTALL
905       ALWAYS_CLEAN)
906   endif()
907   add_subdirectory(test)
908   add_subdirectory(unittests)
909   if( LLVM_INCLUDE_UTILS )
910     add_subdirectory(utils/unittest)
911   endif()
912
913   if (WIN32)
914     # This utility is used to prevent crashing tests from calling Dr. Watson on
915     # Windows.
916     add_subdirectory(utils/KillTheDoctor)
917   endif()
918
919   # Add a global check rule now that all subdirectories have been traversed
920   # and we know the total set of lit testsuites.
921   get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES)
922   get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS)
923   get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS)
924   get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS)
925   get_property(LLVM_ADDITIONAL_TEST_TARGETS
926                GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS)
927   get_property(LLVM_ADDITIONAL_TEST_DEPENDS
928                GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS)
929   add_lit_target(check-all
930     "Running all regression tests"
931     ${LLVM_LIT_TESTSUITES}
932     PARAMS ${LLVM_LIT_PARAMS}
933     DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS}
934     ARGS ${LLVM_LIT_EXTRA_ARGS}
935     )
936   if(TARGET check-runtimes)
937     add_dependencies(check-all check-runtimes)
938   endif()
939   add_custom_target(test-depends
940                     DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_DEPENDS})
941   set_target_properties(test-depends PROPERTIES FOLDER "Tests")
942 endif()
943
944 if (LLVM_INCLUDE_DOCS)
945   add_subdirectory(docs)
946 endif()
947
948 add_subdirectory(cmake/modules)
949
950 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
951   install(DIRECTORY include/llvm include/llvm-c
952     DESTINATION include
953     COMPONENT llvm-headers
954     FILES_MATCHING
955     PATTERN "*.def"
956     PATTERN "*.h"
957     PATTERN "*.td"
958     PATTERN "*.inc"
959     PATTERN "LICENSE.TXT"
960     PATTERN ".svn" EXCLUDE
961     )
962
963   install(DIRECTORY ${LLVM_INCLUDE_DIR}/llvm
964     DESTINATION include
965     COMPONENT llvm-headers
966     FILES_MATCHING
967     PATTERN "*.def"
968     PATTERN "*.h"
969     PATTERN "*.gen"
970     PATTERN "*.inc"
971     # Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def"
972     PATTERN "CMakeFiles" EXCLUDE
973     PATTERN "config.h" EXCLUDE
974     PATTERN ".svn" EXCLUDE
975     )
976
977   # Installing the headers needs to depend on generating any public
978   # tablegen'd headers.
979   add_custom_target(llvm-headers DEPENDS intrinsics_gen)
980
981   if (NOT CMAKE_CONFIGURATION_TYPES)
982     add_custom_target(install-llvm-headers
983                       DEPENDS llvm-headers
984                       COMMAND "${CMAKE_COMMAND}"
985                               -DCMAKE_INSTALL_COMPONENT=llvm-headers
986                               -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
987   endif()
988 endif()
989
990 # This must be at the end of the LLVM root CMakeLists file because it must run
991 # after all targets are created.
992 if(LLVM_DISTRIBUTION_COMPONENTS)
993   if(CMAKE_CONFIGURATION_TYPES)
994     message(FATAL_ERROR "LLVM_DISTRIBUTION_COMPONENTS cannot be specified with multi-configuration generators (i.e. Xcode or Visual Studio)")
995   endif()
996
997   add_custom_target(distribution)
998   add_custom_target(install-distribution)
999   foreach(target ${LLVM_DISTRIBUTION_COMPONENTS})
1000     if(TARGET ${target})
1001       add_dependencies(distribution ${target})
1002     else()
1003       message(FATAL_ERROR "Specified distribution component '${target}' doesn't have a target")
1004     endif()
1005
1006     if(TARGET install-${target})
1007       add_dependencies(install-distribution install-${target})
1008     else()
1009       message(FATAL_ERROR "Specified distribution component '${target}' doesn't have an install target")
1010     endif()
1011   endforeach()
1012 endif()
1013
1014 # This allows us to deploy the Universal CRT DLLs by passing -DCMAKE_INSTALL_UCRT_LIBRARIES=ON to CMake
1015 if (MSVC)
1016   include(InstallRequiredSystemLibraries)
1017 endif()