1if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) 2 set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) 3endif() 4 5list(APPEND CMAKE_MODULE_PATH "${LLVM_COMMON_CMAKE_UTILS}/Modules") 6 7option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) 8 9find_package(LLVM REQUIRED CONFIG HINTS ${LLVM_DIR} NO_CMAKE_FIND_ROOT_PATH) 10find_package(Clang REQUIRED CONFIG HINTS ${Clang_DIR} ${LLVM_DIR}/../clang NO_CMAKE_FIND_ROOT_PATH) 11 12# We set LLVM_CMAKE_DIR so that GetSVN.cmake is found correctly when building SVNVersion.inc 13set(LLVM_CMAKE_DIR ${LLVM_CMAKE_DIR} CACHE PATH "Path to LLVM CMake modules") 14 15set(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") 16set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_INCLUDE_DIR} CACHE PATH "Path to llvm/include") 17set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR} CACHE PATH "Path to LLVM build tree") 18 19set(LLVM_LIT_ARGS "-sv" CACHE STRING "Default options for lit") 20 21set(lit_file_name "llvm-lit") 22if(CMAKE_HOST_WIN32 AND NOT CYGWIN) 23 set(lit_file_name "${lit_file_name}.py") 24endif() 25 26function(append_configuration_directories input_dir output_dirs) 27 set(dirs_list ${input_dir}) 28 foreach(config_type ${LLVM_CONFIGURATION_TYPES}) 29 string(REPLACE ${CMAKE_CFG_INTDIR} ${config_type} dir ${input_dir}) 30 list(APPEND dirs_list ${dir}) 31 endforeach() 32 set(${output_dirs} ${dirs_list} PARENT_SCOPE) 33endfunction() 34 35 36append_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs) 37find_program(lit_full_path ${lit_file_name} ${config_dirs} NO_DEFAULT_PATH) 38set(LLVM_DEFAULT_EXTERNAL_LIT ${lit_full_path} CACHE PATH "Path to llvm-lit") 39 40if(LLVM_TABLEGEN) 41 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN}) 42else() 43 if(CMAKE_CROSSCOMPILING) 44 set(LLVM_NATIVE_BUILD "${LLVM_BINARY_DIR}/NATIVE") 45 if (NOT EXISTS "${LLVM_NATIVE_BUILD}") 46 message(FATAL_ERROR 47 "Attempting to cross-compile LLDB standalone but no native LLVM build 48 found. Please cross-compile LLVM as well.") 49 endif() 50 51 if (CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") 52 set(HOST_EXECUTABLE_SUFFIX ".exe") 53 endif() 54 55 if (NOT CMAKE_CONFIGURATION_TYPES) 56 set(LLVM_TABLEGEN_EXE 57 "${LLVM_NATIVE_BUILD}/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}") 58 else() 59 # NOTE: LLVM NATIVE build is always built Release, as is specified in 60 # CrossCompile.cmake 61 set(LLVM_TABLEGEN_EXE 62 "${LLVM_NATIVE_BUILD}/Release/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}") 63 endif() 64 else() 65 set(tblgen_file_name "llvm-tblgen${CMAKE_EXECUTABLE_SUFFIX}") 66 append_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs) 67 find_program(LLVM_TABLEGEN_EXE ${tblgen_file_name} ${config_dirs} NO_DEFAULT_PATH) 68 endif() 69endif() 70 71# They are used as destination of target generators. 72set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) 73set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) 74if(WIN32 OR CYGWIN) 75 # DLL platform -- put DLLs into bin. 76 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) 77else() 78 set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) 79endif() 80 81# We append the directory in which LLVMConfig.cmake lives. We expect LLVM's 82# CMake modules to be in that directory as well. 83list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}") 84 85include(AddLLVM) 86include(TableGen) 87include(HandleLLVMOptions) 88include(CheckAtomic) 89include(LLVMDistributionSupport) 90 91set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") 92 93set(CMAKE_INCLUDE_CURRENT_DIR ON) 94include_directories( 95 "${CMAKE_BINARY_DIR}/include" 96 "${LLVM_INCLUDE_DIRS}" 97 "${CLANG_INCLUDE_DIRS}") 98 99if(LLDB_INCLUDE_TESTS) 100 # Build the gtest library needed for unittests, if we have LLVM sources 101 # handy. 102 if (EXISTS ${LLVM_THIRD_PARTY_DIR}/unittest AND NOT TARGET llvm_gtest) 103 add_subdirectory(${LLVM_THIRD_PARTY_DIR}/unittest third-party/unittest) 104 endif() 105 # LLVMTestingSupport library is needed for Process/gdb-remote. 106 if (EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Testing/Support 107 AND NOT TARGET LLVMTestingSupport) 108 add_subdirectory(${LLVM_MAIN_SRC_DIR}/lib/Testing/Support 109 lib/Testing/Support) 110 endif() 111endif() 112 113option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) 114if(LLVM_USE_FOLDERS) 115 set_property(GLOBAL PROPERTY USE_FOLDERS ON) 116endif() 117 118set_target_properties(clang-tablegen-targets PROPERTIES FOLDER "lldb misc") 119set_target_properties(intrinsics_gen PROPERTIES FOLDER "lldb misc") 120 121if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS) 122 set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) 123endif() 124 125set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 126set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) 127set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) 128