OSDN Git Service

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