1+ cmake_minimum_required (VERSION 3.20.0)
2+
13set (LLVM_SUBPROJECT_TITLE "BOLT" )
24
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 ()
415
516set (BOLT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
617set (BOLT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} )
@@ -9,6 +20,42 @@ set(CMAKE_CXX_STANDARD 17)
920# Add path for custom modules.
1021list (INSERT CMAKE_MODULE_PATH 0 "${BOLT_SOURCE_DIR} /cmake/modules" )
1122
23+ include (GNUInstallDirs)
24+
25+ # standalone build, copied from clang
26+ if (BOLT_BUILT_STANDALONE)
27+ set (CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to" )
28+ set (CMAKE_CXX_STANDARD_REQUIRED YES )
29+ set (CMAKE_CXX_EXTENSIONS NO )
30+
31+ if (NOT MSVC_IDE )
32+ set (LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS}
33+ CACHE BOOL "Enable assertions" )
34+ # Assertions should follow llvm-config's.
35+ mark_as_advanced (LLVM_ENABLE_ASSERTIONS)
36+ endif ()
37+
38+ find_package (LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR} " )
39+ list (APPEND CMAKE_MODULE_PATH "${LLVM_DIR} " )
40+
41+ set (LLVM_MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR} /../llvm" CACHE PATH "Path to LLVM source tree" )
42+ find_program (LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR}
43+ NO_DEFAULT_PATH)
44+
45+ # They are used as destination of target generators.
46+ set (LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /bin)
47+ set (LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /lib${LLVM_LIBDIR_SUFFIX} )
48+
49+ include (AddLLVM)
50+ include (TableGen)
51+ include_directories (${LLVM_INCLUDE_DIRS} )
52+ link_directories ("${LLVM_LIBRARY_DIR} " )
53+
54+ set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_INSTALL_BINDIR} " )
55+ set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_INSTALL_LIBDIR} /${LLVM_LIBDIR_SUFFIX} " )
56+ set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_INSTALL_LIBDIR} /${LLVM_LIBDIR_SUFFIX} " )
57+ endif () # standalone
58+
1259# Determine default set of targets to build -- the intersection of
1360# those BOLT supports and those LLVM is targeting.
1461set (BOLT_TARGETS_TO_BUILD_all "AArch64;X86;RISCV" )
@@ -94,6 +141,8 @@ if (BOLT_ENABLE_RUNTIME)
94141 if (CMAKE_SYSROOT)
95142 list (APPEND extra_args -DCMAKE_SYSROOT=${CMAKE_SYSROOT} )
96143 endif ()
144+
145+ include (ExternalProject)
97146 ExternalProject_Add(bolt_rt
98147 SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /runtime"
99148 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR} /bolt_rt-stamps
@@ -104,6 +153,7 @@ if (BOLT_ENABLE_RUNTIME)
104153 -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
105154 -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX}
106155 -DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR}
156+ -DBOLT_BUILT_STANDALONE=${BOLT_BUILT_STANDALONE}
107157 ${extra_args}
108158 INSTALL_COMMAND ""
109159 BUILD_ALWAYS True
@@ -113,6 +163,8 @@ if (BOLT_ENABLE_RUNTIME)
113163 add_llvm_install_targets(install -bolt_rt
114164 DEPENDS bolt_rt bolt
115165 COMPONENT bolt)
166+ set (LIBBOLT_RT_INSTR "${CMAKE_CURRENT_BINARY_DIR} /bolt_rt-bins/lib/libbolt_rt_instr.a" )
167+ set (LIBBOLT_RT_HUGIFY "${CMAKE_CURRENT_BINARY_DIR} /bolt_rt-bins/lib/libbolt_rt_hugify.a" )
116168endif ()
117169
118170find_program (GNU_LD_EXECUTABLE NAMES ${LLVM_DEFAULT_TARGET_TRIPLE} -ld.bfd ld.bfd DOC "GNU ld" )
0 commit comments