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