1cmake_minimum_required(VERSION 2.8.8) 2 3# FIXME: It may be removed when we use 2.8.12. 4if(CMAKE_VERSION VERSION_LESS 2.8.12) 5 # Invalidate a couple of keywords. 6 set(cmake_2_8_12_INTERFACE) 7 set(cmake_2_8_12_PRIVATE) 8else() 9 # Use ${cmake_2_8_12_KEYWORD} intead of KEYWORD in target_link_libraries(). 10 set(cmake_2_8_12_INTERFACE INTERFACE) 11 set(cmake_2_8_12_PRIVATE PRIVATE) 12 if(POLICY CMP0022) 13 cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required 14 endif() 15endif() 16 17# If we are not building as a part of LLVM, build Clang as an 18# standalone project, using LLVM as an external library: 19if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) 20 project(Clang) 21 22 # Rely on llvm-config. 23 set(CONFIG_OUTPUT) 24 find_program(LLVM_CONFIG "llvm-config") 25 if(LLVM_CONFIG) 26 message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") 27 set(CONFIG_COMMAND ${LLVM_CONFIG} 28 "--assertion-mode" 29 "--bindir" 30 "--libdir" 31 "--includedir" 32 "--prefix" 33 "--src-root") 34 execute_process( 35 COMMAND ${CONFIG_COMMAND} 36 RESULT_VARIABLE HAD_ERROR 37 OUTPUT_VARIABLE CONFIG_OUTPUT 38 ) 39 if(NOT HAD_ERROR) 40 string(REGEX REPLACE 41 "[ \t]*[\r\n]+[ \t]*" ";" 42 CONFIG_OUTPUT ${CONFIG_OUTPUT}) 43 else() 44 string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}") 45 message(STATUS "${CONFIG_COMMAND_STR}") 46 message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") 47 endif() 48 else() 49 message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") 50 endif() 51 52 list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) 53 list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) 54 list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) 55 list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) 56 list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) 57 list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) 58 59 if(NOT MSVC_IDE) 60 set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} 61 CACHE BOOL "Enable assertions") 62 # Assertions should follow llvm-config's. 63 mark_as_advanced(LLVM_ENABLE_ASSERTIONS) 64 endif() 65 66 set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin") 67 set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib") 68 set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include") 69 set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree") 70 set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") 71 72 find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} 73 NO_DEFAULT_PATH) 74 75 set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/share/llvm/cmake") 76 set(LLVMCONFIG_FILE "${LLVM_CMAKE_PATH}/LLVMConfig.cmake") 77 if(EXISTS ${LLVMCONFIG_FILE}) 78 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}") 79 include(${LLVMCONFIG_FILE}) 80 else() 81 message(FATAL_ERROR "Not found: ${LLVMCONFIG_FILE}") 82 endif() 83 84 # They are used as destination of target generators. 85 set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) 86 set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) 87 if(WIN32 OR CYGWIN) 88 # DLL platform -- put DLLs into bin. 89 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) 90 else() 91 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) 92 endif() 93 94 option(LLVM_INSTALL_TOOLCHAIN_ONLY 95 "Only include toolchain files in the 'install' target." OFF) 96 97 option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN 98 "Set to ON to force using an old, unsupported host toolchain." OFF) 99 100 include(AddLLVM) 101 include(TableGen) 102 include(HandleLLVMOptions) 103 104 set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") 105 106 if (NOT DEFINED LLVM_INCLUDE_TESTS) 107 set(LLVM_INCLUDE_TESTS ON) 108 endif() 109 110 include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}") 111 link_directories("${LLVM_LIBRARY_DIR}") 112 113 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) 114 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) 115 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) 116 117 if(LLVM_INCLUDE_TESTS) 118 # Check prebuilt llvm/utils. 119 if(EXISTS ${LLVM_TOOLS_BINARY_DIR}/FileCheck${CMAKE_EXECUTABLE_SUFFIX} 120 AND EXISTS ${LLVM_TOOLS_BINARY_DIR}/count${CMAKE_EXECUTABLE_SUFFIX} 121 AND EXISTS ${LLVM_TOOLS_BINARY_DIR}/not${CMAKE_EXECUTABLE_SUFFIX}) 122 set(LLVM_UTILS_PROVIDED ON) 123 endif() 124 125 if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py) 126 set(LLVM_LIT ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py) 127 if(NOT LLVM_UTILS_PROVIDED) 128 add_subdirectory(${LLVM_MAIN_SRC_DIR}/utils/FileCheck utils/FileCheck) 129 add_subdirectory(${LLVM_MAIN_SRC_DIR}/utils/count utils/count) 130 add_subdirectory(${LLVM_MAIN_SRC_DIR}/utils/not utils/not) 131 set(LLVM_UTILS_PROVIDED ON) 132 set(CLANG_TEST_DEPS FileCheck count not) 133 endif() 134 set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) 135 if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h 136 AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} 137 AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) 138 add_subdirectory(${UNITTEST_DIR} utils/unittest) 139 endif() 140 else() 141 # Seek installed Lit. 142 find_program(LLVM_LIT "lit.py" ${LLVM_MAIN_SRC_DIR}/utils/lit 143 DOC "Path to lit.py") 144 endif() 145 146 if(LLVM_LIT) 147 # Define the default arguments to use with 'lit', and an option for the user 148 # to override. 149 set(LIT_ARGS_DEFAULT "-sv") 150 if (MSVC OR XCODE) 151 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar") 152 endif() 153 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit") 154 155 # On Win32 hosts, provide an option to specify the path to the GnuWin32 tools. 156 if( WIN32 AND NOT CYGWIN ) 157 set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools") 158 endif() 159 else() 160 set(LLVM_INCLUDE_TESTS OFF) 161 endif() 162 endif() 163 164 set( CLANG_BUILT_STANDALONE 1 ) 165 set(BACKEND_PACKAGE_STRING "LLVM ${LLVM_PACKAGE_VERSION}") 166else() 167 set(BACKEND_PACKAGE_STRING "${PACKAGE_STRING}") 168endif() 169 170find_package(LibXml2) 171if (LIBXML2_FOUND) 172 set(CLANG_HAVE_LIBXML 1) 173endif() 174 175set(CLANG_RESOURCE_DIR "" CACHE STRING 176 "Relative directory from the Clang binary to its resource files.") 177 178set(C_INCLUDE_DIRS "" CACHE STRING 179 "Colon separated list of directories clang will search for headers.") 180 181set(GCC_INSTALL_PREFIX "" CACHE PATH "Directory where gcc is installed." ) 182set(DEFAULT_SYSROOT "" CACHE PATH 183 "Default <path> to all compiler invocations for --sysroot=<path>." ) 184 185set(CLANG_VENDOR "" CACHE STRING 186 "Vendor-specific text for showing with version information.") 187 188if( CLANG_VENDOR ) 189 add_definitions( -DCLANG_VENDOR="${CLANG_VENDOR} " ) 190endif() 191 192set(CLANG_REPOSITORY_STRING "" CACHE STRING 193 "Vendor-specific text for showing the repository the source is taken from.") 194 195if(CLANG_REPOSITORY_STRING) 196 add_definitions(-DCLANG_REPOSITORY_STRING="${CLANG_REPOSITORY_STRING}") 197endif() 198 199set(CLANG_VENDOR_UTI "org.llvm.clang" CACHE STRING 200 "Vendor-specific uti.") 201 202# The libdir suffix must exactly match whatever LLVM's configuration used. 203set(CLANG_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}") 204 205set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 206set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) 207 208if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE ) 209 message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite " 210"the makefiles distributed with LLVM. Please create a directory and run cmake " 211"from there, passing the path to this source directory as the last argument. " 212"This process created the file `CMakeCache.txt' and the directory " 213"`CMakeFiles'. Please delete them.") 214endif() 215 216if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) 217 file(GLOB_RECURSE 218 tablegenned_files_on_include_dir 219 "${CLANG_SOURCE_DIR}/include/clang/*.inc") 220 if( tablegenned_files_on_include_dir ) 221 message(FATAL_ERROR "Apparently there is a previous in-source build, " 222"probably as the result of running `configure' and `make' on " 223"${CLANG_SOURCE_DIR}. This may cause problems. The suspicious files are:\n" 224"${tablegenned_files_on_include_dir}\nPlease clean the source directory.") 225 endif() 226endif() 227 228# Compute the Clang version from the LLVM version. 229string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION 230 ${PACKAGE_VERSION}) 231message(STATUS "Clang version: ${CLANG_VERSION}") 232 233string(REGEX REPLACE "([0-9]+)\\.[0-9]+(\\.[0-9]+)?" "\\1" CLANG_VERSION_MAJOR 234 ${CLANG_VERSION}) 235string(REGEX REPLACE "[0-9]+\\.([0-9]+)(\\.[0-9]+)?" "\\1" CLANG_VERSION_MINOR 236 ${CLANG_VERSION}) 237if (${CLANG_VERSION} MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") 238 set(CLANG_HAS_VERSION_PATCHLEVEL 1) 239 string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" CLANG_VERSION_PATCHLEVEL 240 ${CLANG_VERSION}) 241else() 242 set(CLANG_HAS_VERSION_PATCHLEVEL 0) 243endif() 244 245# Configure the Version.inc file. 246configure_file( 247 ${CMAKE_CURRENT_SOURCE_DIR}/include/clang/Basic/Version.inc.in 248 ${CMAKE_CURRENT_BINARY_DIR}/include/clang/Basic/Version.inc) 249 250# Add appropriate flags for GCC 251if (LLVM_COMPILER_IS_GCC_COMPATIBLE) 252 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common -Woverloaded-virtual -fno-strict-aliasing") 253 254 # Enable -pedantic for Clang even if it's not enabled for LLVM. 255 if (NOT LLVM_ENABLE_PEDANTIC) 256 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wno-long-long") 257 endif () 258 259 check_cxx_compiler_flag("-Werror -Wnested-anon-types" CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG) 260 if( CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG ) 261 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-nested-anon-types" ) 262 endif() 263endif () 264 265# Determine HOST_LINK_VERSION on Darwin. 266set(HOST_LINK_VERSION) 267if (APPLE) 268 set(LD_V_OUTPUT) 269 execute_process( 270 COMMAND sh -c "${CMAKE_LINKER} -v 2>&1 | head -1" 271 RESULT_VARIABLE HAD_ERROR 272 OUTPUT_VARIABLE LD_V_OUTPUT 273 ) 274 if (NOT HAD_ERROR) 275 if ("${LD_V_OUTPUT}" MATCHES ".*ld64-([0-9.]+).*") 276 string(REGEX REPLACE ".*ld64-([0-9.]+).*" "\\1" HOST_LINK_VERSION ${LD_V_OUTPUT}) 277 elseif ("${LD_V_OUTPUT}" MATCHES "[^0-9]*([0-9.]+).*") 278 string(REGEX REPLACE "[^0-9]*([0-9.]+).*" "\\1" HOST_LINK_VERSION ${LD_V_OUTPUT}) 279 endif() 280 else() 281 message(FATAL_ERROR "${CMAKE_LINKER} failed with status ${HAD_ERROR}") 282 endif() 283endif() 284 285configure_file( 286 ${CLANG_SOURCE_DIR}/include/clang/Config/config.h.cmake 287 ${CLANG_BINARY_DIR}/include/clang/Config/config.h) 288 289include(CMakeParseArguments) 290 291function(clang_tablegen) 292 # Syntax: 293 # clang_tablegen output-file [tablegen-arg ...] SOURCE source-file 294 # [[TARGET cmake-target-name] [DEPENDS extra-dependency ...]] 295 # 296 # Generates a custom command for invoking tblgen as 297 # 298 # tblgen source-file -o=output-file tablegen-arg ... 299 # 300 # and, if cmake-target-name is provided, creates a custom target for 301 # executing the custom command depending on output-file. It is 302 # possible to list more files to depend after DEPENDS. 303 304 cmake_parse_arguments(CTG "" "SOURCE;TARGET" "" ${ARGN}) 305 306 if( NOT CTG_SOURCE ) 307 message(FATAL_ERROR "SOURCE source-file required by clang_tablegen") 308 endif() 309 310 set( LLVM_TARGET_DEFINITIONS ${CTG_SOURCE} ) 311 tablegen(CLANG ${CTG_UNPARSED_ARGUMENTS}) 312 313 if(CTG_TARGET) 314 add_public_tablegen_target(${CTG_TARGET}) 315 set_target_properties( ${CTG_TARGET} PROPERTIES FOLDER "Clang tablegenning") 316 set_property(GLOBAL APPEND PROPERTY CLANG_TABLEGEN_TARGETS ${CTG_TARGET}) 317 endif() 318endfunction(clang_tablegen) 319 320macro(add_clang_library name) 321 cmake_parse_arguments(ARG 322 "" 323 "" 324 "ADDITIONAL_HEADERS" 325 ${ARGN}) 326 set(srcs) 327 if(MSVC_IDE OR XCODE) 328 # Add public headers 329 file(RELATIVE_PATH lib_path 330 ${CLANG_SOURCE_DIR}/lib/ 331 ${CMAKE_CURRENT_SOURCE_DIR} 332 ) 333 if(NOT lib_path MATCHES "^[.][.]") 334 file( GLOB_RECURSE headers 335 ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.h 336 ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.def 337 ) 338 set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON) 339 340 file( GLOB_RECURSE tds 341 ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.td 342 ) 343 source_group("TableGen descriptions" FILES ${tds}) 344 set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON) 345 346 if(headers OR tds) 347 set(srcs ${headers} ${tds}) 348 endif() 349 endif() 350 endif(MSVC_IDE OR XCODE) 351 if(srcs OR ARG_ADDITIONAL_HEADERS) 352 set(srcs 353 ADDITIONAL_HEADERS 354 ${srcs} 355 ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args. 356 ) 357 endif() 358 llvm_add_library(${name} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) 359 360 if(TARGET ${name}) 361 target_link_libraries(${name} ${cmake_2_8_12_INTERFACE} ${LLVM_COMMON_LIBS}) 362 363 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang") 364 install(TARGETS ${name} 365 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} 366 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} 367 RUNTIME DESTINATION bin) 368 endif() 369 set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name}) 370 else() 371 # Add empty "phony" target 372 add_custom_target(${name}) 373 endif() 374 375 set_target_properties(${name} PROPERTIES FOLDER "Clang libraries") 376endmacro(add_clang_library) 377 378macro(add_clang_executable name) 379 add_llvm_executable( ${name} ${ARGN} ) 380 set_target_properties(${name} PROPERTIES FOLDER "Clang executables") 381endmacro(add_clang_executable) 382 383set(CMAKE_INCLUDE_CURRENT_DIR ON) 384 385include_directories(BEFORE 386 ${CMAKE_CURRENT_BINARY_DIR}/include 387 ${CMAKE_CURRENT_SOURCE_DIR}/include 388 ) 389 390if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) 391 install(DIRECTORY include/clang include/clang-c 392 DESTINATION include 393 FILES_MATCHING 394 PATTERN "*.def" 395 PATTERN "*.h" 396 PATTERN "config.h" EXCLUDE 397 PATTERN ".svn" EXCLUDE 398 ) 399 400 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/clang 401 DESTINATION include 402 FILES_MATCHING 403 PATTERN "CMakeFiles" EXCLUDE 404 PATTERN "*.inc" 405 PATTERN "*.h" 406 ) 407endif() 408 409install(DIRECTORY include/clang-c 410 DESTINATION include 411 FILES_MATCHING 412 PATTERN "*.h" 413 PATTERN ".svn" EXCLUDE 414 ) 415 416add_definitions( -D_GNU_SOURCE ) 417 418option(CLANG_ENABLE_ARCMT "Build ARCMT." ON) 419if (CLANG_ENABLE_ARCMT) 420 set(ENABLE_CLANG_ARCMT "1") 421else() 422 set(ENABLE_CLANG_ARCMT "0") 423endif() 424 425option(CLANG_ENABLE_STATIC_ANALYZER "Build static analyzer." ON) 426if (CLANG_ENABLE_STATIC_ANALYZER) 427 set(ENABLE_CLANG_STATIC_ANALYZER "1") 428else() 429 set(ENABLE_CLANG_STATIC_ANALYZER "0") 430endif() 431 432if (NOT CLANG_ENABLE_STATIC_ANALYZER AND CLANG_ENABLE_ARCMT) 433 message(FATAL_ERROR "Cannot disable static analyzer while enabling ARCMT") 434endif() 435 436if(CLANG_ENABLE_ARCMT) 437 add_definitions(-DCLANG_ENABLE_ARCMT) 438 add_definitions(-DCLANG_ENABLE_OBJC_REWRITER) 439endif() 440if(CLANG_ENABLE_STATIC_ANALYZER) 441 add_definitions(-DCLANG_ENABLE_STATIC_ANALYZER) 442endif() 443 444# Clang version information 445set(CLANG_EXECUTABLE_VERSION 446 "${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR}" CACHE STRING 447 "Version number that will be placed into the clang executable, in the form XX.YY") 448set(LIBCLANG_LIBRARY_VERSION 449 "${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR}" CACHE STRING 450 "Version number that will be placed into the libclang library , in the form XX.YY") 451mark_as_advanced(CLANG_EXECUTABLE_VERSION LIBCLANG_LIBRARY_VERSION) 452 453add_subdirectory(utils/TableGen) 454 455add_subdirectory(include) 456 457# All targets below may depend on all tablegen'd files. 458get_property(CLANG_TABLEGEN_TARGETS GLOBAL PROPERTY CLANG_TABLEGEN_TARGETS) 459list(APPEND LLVM_COMMON_DEPENDS ${CLANG_TABLEGEN_TARGETS}) 460 461add_subdirectory(lib) 462add_subdirectory(tools) 463add_subdirectory(runtime) 464 465option(CLANG_BUILD_EXAMPLES "Build CLANG example programs by default." OFF) 466if (CLANG_BUILD_EXAMPLES) 467 set(ENABLE_CLANG_EXAMPLES "1") 468else() 469 set(ENABLE_CLANG_EXAMPLES "0") 470endif() 471add_subdirectory(examples) 472 473option(CLANG_INCLUDE_TESTS 474 "Generate build targets for the Clang unit tests." 475 ${LLVM_INCLUDE_TESTS}) 476 477if( CLANG_INCLUDE_TESTS ) 478 if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include/gtest/gtest.h) 479 add_subdirectory(unittests) 480 list(APPEND CLANG_TEST_DEPS ClangUnitTests) 481 list(APPEND CLANG_TEST_PARAMS 482 clang_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/test/Unit/lit.site.cfg 483 ) 484 endif() 485 add_subdirectory(test) 486 487 if(CLANG_BUILT_STANDALONE) 488 # Add a global check rule now that all subdirectories have been traversed 489 # and we know the total set of lit testsuites. 490 get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) 491 get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) 492 get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) 493 get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) 494 add_lit_target(check-all 495 "Running all regression tests" 496 ${LLVM_LIT_TESTSUITES} 497 PARAMS ${LLVM_LIT_PARAMS} 498 DEPENDS ${LLVM_LIT_DEPENDS} 499 ARGS ${LLVM_LIT_EXTRA_ARGS} 500 ) 501 endif() 502endif() 503 504option(CLANG_INCLUDE_DOCS "Generate build targets for the Clang docs." 505 ${LLVM_INCLUDE_DOCS}) 506if( CLANG_INCLUDE_DOCS ) 507 add_subdirectory(docs) 508endif() 509 510set(CLANG_ORDER_FILE "" CACHE FILEPATH 511 "Order file to use when compiling clang in order to improve startup time.") 512 513if (CLANG_BUILT_STANDALONE) 514 # Generate a list of CMake library targets so that other CMake projects can 515 # link against them. LLVM calls its version of this file LLVMExports.cmake, but 516 # the usual CMake convention seems to be ${Project}Targets.cmake. 517 set(CLANG_INSTALL_PACKAGE_DIR share/clang/cmake) 518 set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/${CLANG_INSTALL_PACKAGE_DIR}") 519 get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS) 520 export(TARGETS ${CLANG_EXPORTS} FILE ${clang_cmake_builddir}/ClangTargets.cmake) 521 522 # Install a <prefix>/share/clang/cmake/ClangConfig.cmake file so that 523 # find_package(Clang) works. Install the target list with it. 524 install(FILES 525 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/ClangConfig.cmake 526 ${CLANG_BINARY_DIR}/share/clang/cmake/ClangTargets.cmake 527 DESTINATION share/clang/cmake) 528 529 # Also copy ClangConfig.cmake to the build directory so that dependent projects 530 # can build against a build directory of Clang more easily. 531 configure_file( 532 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/ClangConfig.cmake 533 ${CLANG_BINARY_DIR}/share/clang/cmake/ClangConfig.cmake 534 COPYONLY) 535endif () 536