-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
84 lines (69 loc) · 2.26 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
cmake_minimum_required(VERSION 3.8)
include(cmake/options.cmake)
set(CMAKE_TOOLCHAIN_FILE vcpkg/scripts/buildsystems/vcpkg.cmake)
set(CMAKE_MACOSX_RPATH ON)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
cmake_policy(SET CMP0079 NEW)
project(cs2cpp)
function(find_packages)
find_package(FMT REQUIRED)
find_package(ICU COMPONENTS i18n uc io data)
endfunction()
function(init_subdirectories)
add_library(cs2cpp cs2cpp.natvis)
add_subdirectory(src)
add_subdirectory(include)
if (CS2CPP_ENABLE_TEST)
enable_testing()
add_subdirectory(test)
endif()
endfunction()
function(init_properties)
set_target_properties(cs2cpp PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
endfunction()
function(init_include_directories)
target_include_directories(cs2cpp PUBLIC
include
${ICU_INCLUDE_DIRS}
)
endfunction()
function(init_compile_definitions)
target_compile_definitions(cs2cpp PUBLIC
# Namespaces
"CS2CPP_NAMESPACE_NAME=${CS2CPP_NAMESPACE_NAME}"
"CS2CPP_NAMESPACE_BEGIN=$<$<BOOL:${CS2CPP_ENABLE_NAMESPACE}>:namespace\t${CS2CPP_NAMESPACE_NAME}{>"
"CS2CPP_NAMESPACE_END=$<$<BOOL:${CS2CPP_ENABLE_NAMESPACE}>:}>"
# Platform settings
"CS2CPP_PLATFORM_$<UPPER_CASE:${CS2CPP_PLATFORM}>=1"
"CS2CPP_SUPPORT_POSIX=$<NOT:$<PLATFORM_ID:Windows>>"
# Compiler attributes
"CS2CPP_NOINLINE=$<IF:$<CXX_COMPILER_ID:MSVC>,__declspec(noinline),__attribute__((noinline))>"
"CS2CPP_NOVTABLE=$<$<CXX_COMPILER_ID:MSVC>:__declspec(novtable)>"
"CS2CPP_SPRINTF=$<IF:$<CXX_COMPILER_ID:MSVC>,sprintf_s,sprintf>"
# Etc
$<$<PLATFORM_ID:Windows>:UNICODE _UNICODE WIN32_LEAN_AND_MEAN NOMINMAX>
"FMT_EXCEPTIONS=0"
)
endfunction()
function(init_link_libraries)
target_link_libraries(cs2cpp PUBLIC
fmt::fmt-header-only
ICU::i18n
ICU::uc
ICU::io
ICU::data
)
endfunction()
function(init_cs2cpp)
find_packages()
init_subdirectories()
init_properties()
init_include_directories()
init_compile_definitions()
init_link_libraries()
endfunction()
init_cs2cpp()