brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 1a4cdbf Raw
148 lines · plain
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.inc13set(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(LLDB_TEST_LIBCXX_ROOT_DIR "${LLVM_BINARY_DIR}" CACHE PATH20    "The build root for libcxx. Used in standalone builds to point the API tests to a custom build of libcxx.")21 22set(LLVM_LIT_ARGS "-sv" CACHE STRING "Default options for lit")23 24set(lit_file_name "llvm-lit")25if(CMAKE_HOST_WIN32 AND NOT CYGWIN)26  set(lit_file_name "${lit_file_name}.py")27endif()28 29function(append_configuration_directories input_dir output_dirs)30  set(dirs_list ${input_dir})31  foreach(config_type ${LLVM_CONFIGURATION_TYPES})32    string(REPLACE ${CMAKE_CFG_INTDIR} ${config_type} dir ${input_dir})33    list(APPEND dirs_list ${dir})34  endforeach()35  set(${output_dirs} ${dirs_list} PARENT_SCOPE)36endfunction()37 38 39append_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs)40find_program(lit_full_path ${lit_file_name} ${config_dirs} NO_DEFAULT_PATH)41set(LLVM_DEFAULT_EXTERNAL_LIT ${lit_full_path} CACHE PATH "Path to llvm-lit")42 43if(LLVM_TABLEGEN)44  set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})45else()46  if(CMAKE_CROSSCOMPILING)47    set(LLVM_NATIVE_BUILD "${LLVM_BINARY_DIR}/NATIVE")48    if (NOT EXISTS "${LLVM_NATIVE_BUILD}")49      message(FATAL_ERROR50        "Attempting to cross-compile LLDB standalone but no native LLVM build51        found. Please cross-compile LLVM as well.")52    endif()53 54    if (CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")55      set(HOST_EXECUTABLE_SUFFIX ".exe")56    endif()57 58    if (NOT CMAKE_CONFIGURATION_TYPES)59      set(LLVM_TABLEGEN_EXE60        "${LLVM_NATIVE_BUILD}/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}")61    else()62      # NOTE: LLVM NATIVE build is always built Release, as is specified in63      # CrossCompile.cmake64      set(LLVM_TABLEGEN_EXE65        "${LLVM_NATIVE_BUILD}/Release/bin/llvm-tblgen${HOST_EXECUTABLE_SUFFIX}")66    endif()67  else()68    set(tblgen_file_name "llvm-tblgen${CMAKE_EXECUTABLE_SUFFIX}")69    append_configuration_directories(${LLVM_TOOLS_BINARY_DIR} config_dirs)70    find_program(LLVM_TABLEGEN_EXE ${tblgen_file_name} ${config_dirs} NO_DEFAULT_PATH)71  endif()72endif()73 74# They are used as destination of target generators.75set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)76set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})77if(WIN32 OR CYGWIN)78  # DLL platform -- put DLLs into bin.79  set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})80else()81  set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR})82endif()83 84# We append the directory in which LLVMConfig.cmake lives. We expect LLVM's85# CMake modules to be in that directory as well.86list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")87 88separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})89add_definitions(${LLVM_DEFINITIONS_LIST})90list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST})91 92include(AddLLVM)93include(TableGen)94include(HandleLLVMOptions)95include(CheckAtomic)96include(LLVMDistributionSupport)97 98set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")99 100set(CMAKE_INCLUDE_CURRENT_DIR ON)101include_directories(102  "${CMAKE_BINARY_DIR}/include"103  "${LLVM_INCLUDE_DIRS}"104  "${CLANG_INCLUDE_DIRS}")105 106if(LLDB_INCLUDE_TESTS)107  # Build the gtest library needed for unittests, if we have LLVM sources108  # handy.109  if (EXISTS ${LLVM_THIRD_PARTY_DIR}/unittest AND NOT TARGET llvm_gtest)110    add_subdirectory(${LLVM_THIRD_PARTY_DIR}/unittest third-party/unittest)111  endif()112  # LLVMTestingSupport library is needed for Process/gdb-remote.113  if (EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Testing/Support114      AND NOT TARGET LLVMTestingSupport)115    add_subdirectory(${LLVM_MAIN_SRC_DIR}/lib/Testing/Support116      lib/Testing/Support)117  endif()118endif()119 120option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON)121if(LLVM_USE_FOLDERS)122  set_property(GLOBAL PROPERTY USE_FOLDERS ON)123endif()124 125set_target_properties(clang-tablegen-targets PROPERTIES FOLDER "Clang/Tablegenning")126set_target_properties(intrinsics_gen PROPERTIES FOLDER "LLVM/Tablegenning")127 128if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)129  set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)130endif()131 132set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)133set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})134set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})135 136# If LLDB is building against a prebuilt Clang, then the Clang resource137# directory that LLDB is using for its embedded Clang instance needs to point to138# the resource directory of the used Clang installation.139if (NOT TARGET clang-resource-headers)140  include(GetClangResourceDir)141  get_clang_resource_dir(LLDB_EXTERNAL_CLANG_RESOURCE_DIR142    PREFIX "${Clang_DIR}/../../../")143 144  if (NOT EXISTS ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR})145    message(FATAL_ERROR "Expected directory for clang-resource-headers not found: ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}")146  endif()147endif()148