OSDN Git Service

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