xref: /openbsd-src/gnu/llvm/lldb/cmake/modules/LLDBStandalone.cmake (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
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