1
+ cmake_minimum_required (VERSION 3.20.0 )
2
+
1
3
set (LLVM_SUBPROJECT_TITLE "BOLT" )
2
4
3
- include (ExternalProject )
5
+ if (NOT DEFINED LLVM_COMMON_CMAKE_UTILS )
6
+ set (LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR} /../cmake )
7
+ endif ()
8
+ include (${LLVM_COMMON_CMAKE_UTILS} /Modules/CMakePolicy.cmake
9
+ NO_POLICY_SCOPE )
10
+
11
+ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
12
+ project (bolt )
13
+ set (BOLT_BUILT_STANDALONE TRUE )
14
+ endif ()
4
15
5
16
set (BOLT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
6
17
set (BOLT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} )
@@ -9,6 +20,137 @@ set(CMAKE_CXX_STANDARD 17)
9
20
# Add path for custom modules.
10
21
list (INSERT CMAKE_MODULE_PATH 0 "${BOLT_SOURCE_DIR} /cmake/modules" )
11
22
23
+ # standalone build, copied from clang
24
+ if (BOLT_BUILT_STANDALONE )
25
+ set (CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to" )
26
+ set (CMAKE_CXX_STANDARD_REQUIRED YES )
27
+ set (CMAKE_CXX_EXTENSIONS NO )
28
+
29
+ if (NOT MSVC_IDE )
30
+ set (LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
31
+ CACHE BOOL "Enable assertions" )
32
+ # Assertions should follow llvm-config's.
33
+ mark_as_advanced (LLVM_ENABLE_ASSERTIONS )
34
+ endif ()
35
+
36
+ find_package (LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR} " )
37
+ list (APPEND CMAKE_MODULE_PATH "${LLVM_DIR} " )
38
+
39
+ # Turn into CACHE PATHs for overwritting
40
+
41
+ # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets
42
+ # LLVM_CONFIG.
43
+ if (NOT LLVM_CONFIG_FOUND )
44
+ # Pull values from LLVMConfig.cmake. We can drop this once the llvm-config
45
+ # path is removed.
46
+ set (INCLUDE_DIRS ${LLVM_INCLUDE_DIRS} )
47
+ set (LLVM_OBJ_DIR "${LLVM_BINARY_DIR} " )
48
+ # N.B. this is just a default value, the CACHE PATHs below can be overridden.
49
+ set (MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR} /../llvm" )
50
+ else ()
51
+ set (INCLUDE_DIRS "${LLVM_BINARY_DIR} /include" "${MAIN_INCLUDE_DIR} " )
52
+ endif ()
53
+
54
+ set (LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed" )
55
+ set (LLVM_BINARY_DIR "${LLVM_OBJ_ROOT} " CACHE PATH "Path to LLVM build tree" )
56
+ set (LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR} " CACHE PATH "Path to LLVM source tree" )
57
+
58
+ set (LLVM_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR} " CACHE PATH "Path to llvm/bin" )
59
+ set (LLVM_LIBRARY_DIR "${LLVM_LIBRARY_DIR} " CACHE PATH "Path to llvm/lib" )
60
+
61
+ find_program (LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
62
+ NO_DEFAULT_PATH )
63
+
64
+ # They are used as destination of target generators.
65
+ set (LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR}/bin )
66
+ set (LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX} )
67
+ if (WIN32 OR CYGWIN )
68
+ # DLL platform -- put DLLs into bin.
69
+ set (LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR} )
70
+ else ()
71
+ set (LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR} )
72
+ endif ()
73
+
74
+ option (LLVM_INSTALL_TOOLCHAIN_ONLY
75
+ "Only include toolchain files in the 'install' target." OFF )
76
+
77
+ option (LLVM_FORCE_USE_OLD_TOOLCHAIN
78
+ "Set to ON to force using an old, unsupported host toolchain." OFF )
79
+ option (CLANG_ENABLE_BOOTSTRAP "Generate the clang bootstrap target" OFF )
80
+ option (LLVM_ENABLE_LIBXML2 "Use libxml2 if available." ON )
81
+
82
+ include (AddLLVM )
83
+ include (TableGen )
84
+ include (HandleLLVMOptions )
85
+ include (CheckAtomic )
86
+ include (GetErrcMessages )
87
+ include (LLVMDistributionSupport )
88
+
89
+ if (NOT DEFINED LLVM_INCLUDE_TESTS )
90
+ set (LLVM_INCLUDE_TESTS ON )
91
+ endif ()
92
+
93
+ include_directories (${LLVM_INCLUDE_DIRS} )
94
+ link_directories ("${LLVM_LIBRARY_DIR} " )
95
+
96
+ set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin )
97
+ set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /lib${LLVM_LIBDIR_SUFFIX} )
98
+ set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /lib${LLVM_LIBDIR_SUFFIX} )
99
+
100
+ find_package (Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED
101
+ COMPONENTS Interpreter )
102
+
103
+ if (LLVM_INCLUDE_TESTS )
104
+ # Check prebuilt llvm/utils.
105
+ if (EXISTS ${LLVM_TOOLS_BINARY_DIR} /FileCheck${CMAKE_EXECUTABLE_SUFFIX}
106
+ AND EXISTS ${LLVM_TOOLS_BINARY_DIR} /count${CMAKE_EXECUTABLE_SUFFIX}
107
+ AND EXISTS ${LLVM_TOOLS_BINARY_DIR} /not${CMAKE_EXECUTABLE_SUFFIX} )
108
+ set (LLVM_UTILS_PROVIDED ON )
109
+ endif ()
110
+
111
+ # Seek installed Lit.
112
+ find_program (LLVM_LIT
113
+ NAMES llvm-lit lit.py lit
114
+ PATHS "${LLVM_MAIN_SRC_DIR} /utils/lit"
115
+ DOC "Path to lit.py" )
116
+
117
+ if (EXISTS ${LLVM_MAIN_SRC_DIR} /utils/lit/lit.py )
118
+ # Note: path not really used, except for checking if lit was found
119
+ if (EXISTS ${LLVM_MAIN_SRC_DIR} /utils/llvm-lit )
120
+ add_subdirectory (${LLVM_MAIN_SRC_DIR} /utils/llvm-lit utils/llvm-lit )
121
+ endif ()
122
+ if (NOT LLVM_UTILS_PROVIDED )
123
+ add_subdirectory (${LLVM_MAIN_SRC_DIR} /utils/FileCheck utils/FileCheck )
124
+ add_subdirectory (${LLVM_MAIN_SRC_DIR} /utils/count utils/count )
125
+ add_subdirectory (${LLVM_MAIN_SRC_DIR} /utils/not utils/not )
126
+ set (LLVM_UTILS_PROVIDED ON )
127
+ set (CLANG_TEST_DEPS FileCheck count not )
128
+ endif ()
129
+ endif ()
130
+
131
+ if (LLVM_LIT )
132
+ # Define the default arguments to use with 'lit', and an option for the user
133
+ # to override.
134
+ set (LIT_ARGS_DEFAULT "-sv" )
135
+ if (MSVC OR XCODE )
136
+ set (LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar" )
137
+ endif ()
138
+ set (LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT} " CACHE STRING "Default options for lit" )
139
+
140
+ get_errc_messages (LLVM_LIT_ERRC_MESSAGES )
141
+
142
+ # On Win32 hosts, provide an option to specify the path to the GnuWin32 tools.
143
+ if ( WIN32 AND NOT CYGWIN )
144
+ set (LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools" )
145
+ endif ()
146
+ else ()
147
+ set (LLVM_INCLUDE_TESTS OFF )
148
+ endif ()
149
+
150
+ umbrella_lit_testsuite_begin (check-all )
151
+ endif () # LLVM_INCLUDE_TESTS
152
+ endif () # standalone
153
+
12
154
# Determine default set of targets to build -- the intersection of
13
155
# those BOLT supports and those LLVM is targeting.
14
156
set (BOLT_TARGETS_TO_BUILD_all "AArch64;X86;RISCV" )
@@ -94,6 +236,8 @@ if (BOLT_ENABLE_RUNTIME)
94
236
if (CMAKE_SYSROOT )
95
237
list (APPEND extra_args -DCMAKE_SYSROOT=${CMAKE_SYSROOT} )
96
238
endif ()
239
+
240
+ include (ExternalProject )
97
241
ExternalProject_Add (bolt_rt
98
242
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /runtime"
99
243
STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR} /bolt_rt-stamps
0 commit comments