1*f6aab3d8Srobertif(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) 2*f6aab3d8Srobert set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) 3*f6aab3d8Srobertendif() 4*f6aab3d8Srobert 5*f6aab3d8Srobertlist(APPEND CMAKE_MODULE_PATH "${LLVM_COMMON_CMAKE_UTILS}/Modules") 6*f6aab3d8Srobert 7061da546Spatrickoption(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) 8061da546Spatrick 9061da546Spatrickfind_package(LLVM REQUIRED CONFIG HINTS ${LLVM_DIR} NO_CMAKE_FIND_ROOT_PATH) 10061da546Spatrickfind_package(Clang REQUIRED CONFIG HINTS ${Clang_DIR} ${LLVM_DIR}/../clang NO_CMAKE_FIND_ROOT_PATH) 11061da546Spatrick 12*f6aab3d8Srobert# We set LLVM_CMAKE_DIR so that GetSVN.cmake is found correctly when building SVNVersion.inc 13*f6aab3d8Srobertset(LLVM_CMAKE_DIR ${LLVM_CMAKE_DIR} CACHE PATH "Path to LLVM CMake modules") 14061da546Spatrick 15061da546Spatrickset(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") 16061da546Spatrickset(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_INCLUDE_DIR} CACHE PATH "Path to llvm/include") 17061da546Spatrickset(LLVM_BINARY_DIR ${LLVM_BINARY_DIR} CACHE PATH "Path to LLVM build tree") 18061da546Spatrick 19be691f3bSpatrickset(LLVM_LIT_ARGS "-sv" CACHE STRING "Default options for lit") 20be691f3bSpatrick 21061da546Spatrickset(lit_file_name "llvm-lit") 22061da546Spatrickif(CMAKE_HOST_WIN32 AND NOT CYGWIN) 23061da546Spatrick set(lit_file_name "${lit_file_name}.py") 24061da546Spatrickendif() 25061da546Spatrick 26061da546Spatrickfunction(append_configuration_directories input_dir output_dirs) 27061da546Spatrick set(dirs_list ${input_dir}) 28061da546Spatrick foreach(config_type ${LLVM_CONFIGURATION_TYPES}) 29061da546Spatrick string(REPLACE ${CMAKE_CFG_INTDIR} ${config_type} dir ${input_dir}) 30061da546Spatrick list(APPEND dirs_list ${dir}) 31061da546Spatrick endforeach() 32061da546Spatrick set(${output_dirs} ${dirs_list} PARENT_SCOPE) 33061da546Spatrickendfunction() 34061da546Spatrick 35061da546Spatrick 36061da546Spatrickappend_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs) 37061da546Spatrickfind_program(lit_full_path ${lit_file_name} ${config_dirs} NO_DEFAULT_PATH) 38061da546Spatrickset(LLVM_DEFAULT_EXTERNAL_LIT ${lit_full_path} CACHE PATH "Path to llvm-lit") 39061da546Spatrick 40061da546Spatrickif(LLVM_TABLEGEN) 41061da546Spatrick set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN}) 42061da546Spatrickelse() 43061da546Spatrick if(CMAKE_CROSSCOMPILING) 44061da546Spatrick set(LLVM_NATIVE_BUILD "${LLVM_BINARY_DIR}/NATIVE") 45061da546Spatrick if (NOT EXISTS "${LLVM_NATIVE_BUILD}") 46061da546Spatrick message(FATAL_ERROR 47061da546Spatrick "Attempting to cross-compile LLDB standalone but no native LLVM build 48061da546Spatrick found. Please cross-compile LLVM as well.") 49061da546Spatrick endif() 50061da546Spatrick 51061da546Spatrick if (CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") 52061da546Spatrick set(HOST_EXECUTABLE_SUFFIX ".exe") 53061da546Spatrick endif() 54061da546Spatrick 55061da546Spatrick if (NOT CMAKE_CONFIGURATION_TYPES) 56061da546Spatrick set(LLVM_TABLEGEN_EXE 57061da546Spatrick "${LLVM_NATIVE_BUILD}/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}") 58061da546Spatrick else() 59061da546Spatrick # NOTE: LLVM NATIVE build is always built Release, as is specified in 60061da546Spatrick # CrossCompile.cmake 61061da546Spatrick set(LLVM_TABLEGEN_EXE 62061da546Spatrick "${LLVM_NATIVE_BUILD}/Release/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}") 63061da546Spatrick endif() 64061da546Spatrick else() 65061da546Spatrick set(tblgen_file_name "llvm-tblgen${CMAKE_EXECUTABLE_SUFFIX}") 66061da546Spatrick append_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs) 67061da546Spatrick find_program(LLVM_TABLEGEN_EXE ${tblgen_file_name} ${config_dirs} NO_DEFAULT_PATH) 68061da546Spatrick endif() 69061da546Spatrickendif() 70061da546Spatrick 71061da546Spatrick# They are used as destination of target generators. 72061da546Spatrickset(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) 73061da546Spatrickset(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) 74061da546Spatrickif(WIN32 OR CYGWIN) 75061da546Spatrick # DLL platform -- put DLLs into bin. 76061da546Spatrick set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) 77061da546Spatrickelse() 78061da546Spatrick set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) 79061da546Spatrickendif() 80061da546Spatrick 81061da546Spatrick# We append the directory in which LLVMConfig.cmake lives. We expect LLVM's 82061da546Spatrick# CMake modules to be in that directory as well. 83061da546Spatricklist(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}") 84be691f3bSpatrick 85061da546Spatrickinclude(AddLLVM) 86061da546Spatrickinclude(TableGen) 87061da546Spatrickinclude(HandleLLVMOptions) 88061da546Spatrickinclude(CheckAtomic) 89061da546Spatrickinclude(LLVMDistributionSupport) 90061da546Spatrick 91061da546Spatrickset(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") 92*f6aab3d8Srobert 93*f6aab3d8Srobertset(CMAKE_INCLUDE_CURRENT_DIR ON) 94*f6aab3d8Srobertinclude_directories( 95*f6aab3d8Srobert "${CMAKE_BINARY_DIR}/include" 96*f6aab3d8Srobert "${LLVM_INCLUDE_DIRS}" 97*f6aab3d8Srobert "${CLANG_INCLUDE_DIRS}") 98*f6aab3d8Srobert 99*f6aab3d8Srobertif(LLDB_INCLUDE_TESTS) 100*f6aab3d8Srobert # Build the gtest library needed for unittests, if we have LLVM sources 101*f6aab3d8Srobert # handy. 102*f6aab3d8Srobert if (EXISTS ${LLVM_THIRD_PARTY_DIR}/unittest AND NOT TARGET llvm_gtest) 103*f6aab3d8Srobert add_subdirectory(${LLVM_THIRD_PARTY_DIR}/unittest third-party/unittest) 104*f6aab3d8Srobert endif() 105*f6aab3d8Srobert # LLVMTestingSupport library is needed for Process/gdb-remote. 106*f6aab3d8Srobert if (EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Testing/Support 107*f6aab3d8Srobert AND NOT TARGET LLVMTestingSupport) 108*f6aab3d8Srobert add_subdirectory(${LLVM_MAIN_SRC_DIR}/lib/Testing/Support 109*f6aab3d8Srobert lib/Testing/Support) 110*f6aab3d8Srobert endif() 111*f6aab3d8Srobertendif() 112061da546Spatrick 113061da546Spatrickoption(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) 114061da546Spatrickif(LLVM_USE_FOLDERS) 115061da546Spatrick set_property(GLOBAL PROPERTY USE_FOLDERS ON) 116061da546Spatrickendif() 117061da546Spatrick 118061da546Spatrickset_target_properties(clang-tablegen-targets PROPERTIES FOLDER "lldb misc") 119061da546Spatrickset_target_properties(intrinsics_gen PROPERTIES FOLDER "lldb misc") 120061da546Spatrick 121*f6aab3d8Srobertif(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) 122*f6aab3d8Srobert set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) 123*f6aab3d8Srobertendif() 124061da546Spatrick 125061da546Spatrickset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 126061da546Spatrickset(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) 127061da546Spatrickset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) 128