forked from jjsisjjz/kepub
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
191 lines (162 loc) · 6.98 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# ---------------------------------------------------------------------------------------
# CMake version
# ---------------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.22)
message(STATUS "CMake version: ${CMAKE_VERSION}")
# ---------------------------------------------------------------------------------------
# Start kepub project
# ---------------------------------------------------------------------------------------
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(Version)
kepub_extract_version()
project(
kepub
LANGUAGES ASM CXX
VERSION ${KEPUB_VERSION}
HOMEPAGE_URL https://github.com/KaiserLancelot/kepub)
message(STATUS "${PROJECT_NAME} version: ${KEPUB_VERSION}")
# ---------------------------------------------------------------------------------------
# Set default build to release
# ---------------------------------------------------------------------------------------
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE
"Release"
CACHE STRING "Choose Debug, Release, RelWithDebInfo or MinSizeRel" FORCE)
endif()
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
# ---------------------------------------------------------------------------------------
# Set variables
# ---------------------------------------------------------------------------------------
set(KEPUB_LIBRARY lib${PROJECT_NAME})
set(SFACG_EXECUTABLE sfacg)
set(CIWEIMAO_EXECUTABLE ciweimao)
set(ESJZONE_EXECUTABLE esjzone)
set(LIGHTNOVEL_EXECUTABLE lightnovel)
set(MASIRO_EXECUTABLE masiro)
set(GEN_EPUB_EXECUTABLE gen-epub)
set(APPEND_EPUB_EXECUTABLE append-epub)
set(EXTRACT_EPUB_EXECUTABLE extract-epub)
set(KEPUB_TEST_EXECUTABLE ktest)
set(KEPUB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(KEPUB_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
file(GLOB KEPUB_TEST_FILE CONFIGURE_DEPENDS "${KEPUB_SOURCE_DIR}/data/*")
# https://cmake.org/cmake/help/latest/command/file.html#glob-recurse
file(GLOB_RECURSE KEPUB_LIBRARY_SRC CONFIGURE_DEPENDS
"${KEPUB_SOURCE_DIR}/src/*.cpp")
# ---------------------------------------------------------------------------------------
# Include CMake module
# ---------------------------------------------------------------------------------------
include(CTest)
include(GNUInstallDirs)
include(GenerateExportHeader)
include(Options)
include(Check)
include(Format)
include(CompilerOptions)
# ---------------------------------------------------------------------------------------
# Find package
# ---------------------------------------------------------------------------------------
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)
find_package(fmt REQUIRED)
find_package(pugixml REQUIRED)
find_package(indicators REQUIRED)
find_package(Boost CONFIG REQUIRED COMPONENTS json)
find_package(klib REQUIRED)
find_package(simdjson REQUIRED)
find_package(Microsoft.GSL REQUIRED)
find_package(TBB REQUIRED)
find_package(re2 REQUIRED)
find_package(httplib REQUIRED)
add_definitions(-DDBG_MACRO_NO_WARNING)
if(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Debug"))
add_definitions(-DDBG_MACRO_DISABLE)
endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(opencc REQUIRED IMPORTED_TARGET opencc)
pkg_check_modules(marisa REQUIRED IMPORTED_TARGET marisa)
if(NOT KEPUB_SANITIZER)
message(STATUS "Use mimalloc")
set(MIMALLOC_OBJECT "/usr/local/lib/mimalloc.o")
endif()
include_directories(${KEPUB_BINARY_DIR})
# ---------------------------------------------------------------------------------------
# Build blob file
# ---------------------------------------------------------------------------------------
file(COPY "${KEPUB_SOURCE_DIR}/blob/SourceHanSansSC-Bold.ttf"
DESTINATION ${KEPUB_BINARY_DIR})
file(COPY "${KEPUB_SOURCE_DIR}/blob/style.css" DESTINATION ${KEPUB_BINARY_DIR})
file(COPY "${KEPUB_SOURCE_DIR}/blob/geetest.js" DESTINATION ${KEPUB_BINARY_DIR})
file(COPY "${KEPUB_SOURCE_DIR}/blob/index.html" DESTINATION ${KEPUB_BINARY_DIR})
add_library(blob STATIC "${KEPUB_SOURCE_DIR}/src/blob.s")
target_compile_options(blob PRIVATE "-Wno-unused-command-line-argument")
# ---------------------------------------------------------------------------------------
# Build static library
# ---------------------------------------------------------------------------------------
add_library(${KEPUB_LIBRARY} STATIC ${MIMALLOC_OBJECT} ${KEPUB_LIBRARY_SRC})
target_include_directories(${KEPUB_LIBRARY}
PUBLIC "${KEPUB_SOURCE_DIR}/include")
target_link_libraries(
${KEPUB_LIBRARY}
PRIVATE blob
fmt::fmt
pugixml::pugixml
indicators::indicators
Microsoft.GSL::GSL
klib::klib
${Boost_LIBRARIES}
simdjson::simdjson
PkgConfig::opencc
PkgConfig::marisa
TBB::tbb
re2::re2
httplib::httplib)
set_target_properties(${KEPUB_LIBRARY} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
# ---------------------------------------------------------------------------------------
# Build shared library
# ---------------------------------------------------------------------------------------
add_library(${KEPUB_LIBRARY}-shared SHARED ${MIMALLOC_OBJECT}
${KEPUB_LIBRARY_SRC})
generate_export_header(${KEPUB_LIBRARY}-shared BASE_NAME ${PROJECT_NAME})
target_include_directories(${KEPUB_LIBRARY}-shared
PUBLIC "${KEPUB_SOURCE_DIR}/include")
target_link_libraries(
${KEPUB_LIBRARY}-shared
PRIVATE blob
fmt::fmt
pugixml::pugixml
indicators::indicators
Microsoft.GSL::GSL
klib::klib
${Boost_LIBRARIES}
simdjson::simdjson
PkgConfig::opencc
PkgConfig::marisa
TBB::tbb
re2::re2
httplib::httplib)
set_target_properties(
${KEPUB_LIBRARY}-shared
PROPERTIES OUTPUT_NAME ${PROJECT_NAME}
VERSION ${KEPUB_VERSION}
SOVERSION ${KEPUB_VERSION_MAJOR})
# ---------------------------------------------------------------------------------------
# Build executable
# ---------------------------------------------------------------------------------------
add_subdirectory(tool)
# ---------------------------------------------------------------------------------------
# Build test
# ---------------------------------------------------------------------------------------
if(BUILD_TESTING AND KEPUB_BUILD_TEST)
message(STATUS "Build test")
add_subdirectory(test)
endif()
# ---------------------------------------------------------------------------------------
# Install target
# ---------------------------------------------------------------------------------------
include(Install)
# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake
configure_file("${KEPUB_SOURCE_DIR}/cmake/CMakeUninstall.cmake.in"
"${KEPUB_BINARY_DIR}/CMakeUninstall.cmake" IMMEDIATE @ONLY)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P
${KEPUB_BINARY_DIR}/CMakeUninstall.cmake)