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