-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
135 lines (114 loc) · 3.66 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
cmake_minimum_required(VERSION 3.16)
# Use packagename_ROOT for FindPackage.
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
# Disable default MSVC warning level so we can set it ourselves.
if(POLICY CMP0092)
cmake_policy(SET CMP0092 NEW)
endif()
# Disable default MSVC runtime hardcoding.
if(POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif()
# Platform detection
if(WIN32 OR "${CMAKE_SYSTEM}" MATCHES "Windows")
set(WINDOWS TRUE)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
set(CMAKE_CXX_STANDARD 17)
# Platform-specific configurations
if(WINDOWS)
if(MSVC)
# Build with multiple processes: speeds up build on multi core processors
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
endif()
endif()
# Set up a format target to do automated clang format checking.
find_package(ClangFormat)
include(ClangFormat)
include(FetchContent)
# Configure LIEF options before declaring
set(LIEF_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LIEF_INSTALL OFF CACHE BOOL "" FORCE)
set(LIEF_C_API OFF CACHE BOOL "" FORCE)
set(LIEF_PYTHON_API OFF CACHE BOOL "" FORCE)
set(LIEF_TESTS OFF CACHE BOOL "" FORCE)
set(LIEF_ART OFF CACHE BOOL "" FORCE)
set(LIEF_DEX OFF CACHE BOOL "" FORCE)
set(LIEF_VDEX OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
lief
GIT_REPOSITORY https://github.com/lief-project/LIEF.git
GIT_TAG 0.15.1
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/lief
)
FetchContent_MakeAvailable(lief)
FetchContent_Declare(
json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/nlohmann_json
)
FetchContent_MakeAvailable(json)
FetchContent_Declare(fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 0c9fce2ffefecfdce794e1859584e25877b7b592
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/fmt
)
FetchContent_MakeAvailable(fmt)
FetchContent_Declare(cxxopts
GIT_REPOSITORY https://github.com/jarro2783/cxxopts.git
GIT_TAG 3bf268481da8208d171d8908e6491459de3651d7
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cxxopts
)
FetchContent_MakeAvailable(cxxopts)
# TODO: Can we use FetchContent_MakeAvailable without getting the test suite for it?
FetchContent_Populate(span DOWNLOAD_EXTRACT_TIMESTAMP
GIT_REPOSITORY https://github.com/xezon/span
GIT_TAG master
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/span)
set(GIT_PRE_CONFIGURE_FILE "gitinfo.cpp.in")
set(GIT_POST_CONFIGURE_FILE "${CMAKE_CURRENT_BINARY_DIR}/gitinfo.cpp")
include(GitWatcher)
include(cmake/xllvmdemangler.cmake)
project(MachOCodeGen LANGUAGES C CXX)
add_executable(MachOCodeGen)
# Common sources for all platforms
target_sources(MachOCodeGen PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/gitinfo.cpp
gitinfo.h
src/CppTypes.cpp
src/CppTypes.h
src/MachOReader.cpp
src/MachOReader.h
src/main.cpp
src/utility.cpp
src/utility.h
src/llvm/__cxxabi_config.h
src/llvm/abort_message.cpp
src/llvm/abort_message.h
src/llvm/cxxabi.h
src/llvm/demangle.cpp
src/llvm/demangle.h
src/llvm/private_typeinfo.cpp
src/llvm/private_typeinfo.h
)
# Common libraries for all platforms
target_link_libraries(MachOCodeGen PRIVATE
LIEF::LIEF
nlohmann_json
fmt::fmt
cxxopts::cxxopts
XLLVMDemangler
)
target_include_directories(MachOCodeGen PRIVATE
.
src
apple/MacOSX10.4u.sdk/usr/include
3rdparty/span/include
)
target_compile_definitions(MachOCodeGen PRIVATE
_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS
$<$<CONFIG:MinSizeRel,Release,RelWithDebInfo>:RELEASE=1> # Can we do this nicer?
)