OSDN Git Service

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