-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
136 lines (118 loc) · 3.74 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
cmake_minimum_required(VERSION 3.11)
project(fission)
# project structure
set(FIS_BINS "bin")
set(FIS_DATA "data")
set(FIS_LIBS "external")
set(FIS_SRCS "source")
set(FIS_RUST "rust")
# gl libs
# glfw
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF)
option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF)
option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF)
option(GLFW_INSTALL "Generate installation target" OFF)
add_subdirectory(
"${CMAKE_SOURCE_DIR}/${FIS_LIBS}/glfw"
)
# glad
add_library(glad STATIC
"${FIS_LIBS}/glad/gl.c"
)
target_include_directories(glad PRIVATE
"${CMAKE_SOURCE_DIR}/${FIS_LIBS}"
)
# output everything to bin/, including the data folder (look at the bottom of this file)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${FIS_BINS}")
# fission
add_executable(fission
"${FIS_SRCS}/main.c"
"${FIS_SRCS}/text_buf.c"
"${FIS_SRCS}/font.c"
"${FIS_SRCS}/file_io.c"
"${FIS_SRCS}/component.c"
"${FIS_SRCS}/backend.c"
"${FIS_SRCS}/component/detailed_timer.c"
"${FIS_SRCS}/component/key_value.c"
"${FIS_SRCS}/component/splits.c"
"${FIS_SRCS}/component/text.c"
"${FIS_SRCS}/component/timer.c"
"${FIS_SRCS}/component/title.c"
"${FIS_SRCS}/backend/glfw_gl4.c"
)
# change to c_std_c11 for easy visual studio intellisense fix
target_compile_features(fission PRIVATE c_restrict)
# livesplit-core
include(ExternalProject)
set_directory_properties(PROPERTIES EP_PREFIX "${CMAKE_BINARY_DIR}/${FIS_RUST}")
if(CMAKE_CROSSCOMPILING)
set(CARGO_TARGET_PATH "${CARGO_TARGET}")
set(CARGO_TARGET_PARAM --target "${CARGO_TARGET}")
else()
set(CARGO_TARGET_PATH)
set(CARGO_TARGET_PARAM)
endif()
if(MSVC)
set(CARGO_LIB_PFX "")
set(CARGO_LIB_EXT ".lib")
else()
set(CARGO_LIB_PFX "lib")
set(CARGO_LIB_EXT ".a")
endif()
set(RELEASE "$<NOT:$<CONFIG:Debug>>")
set(RUST_BUILD_TYPE_DIR "$<IF:${RELEASE},release,debug>")
ExternalProject_Add(
livesplit-core
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} -E env "CARGO_TARGET_DIR=${CMAKE_BINARY_DIR}/${FIS_RUST}/target" cargo build $<${RELEASE}:--release> -p staticlib ${CARGO_TARGET_PARAM}
SOURCE_DIR "${CMAKE_SOURCE_DIR}/${FIS_LIBS}/livesplit-core"
BUILD_IN_SOURCE ON
INSTALL_COMMAND ""
LOG_BUILD ON
BUILD_BYPRODUCTS
"${CMAKE_BINARY_DIR}/${FIS_RUST}/target/${CARGO_TARGET_PATH}/${RUST_BUILD_TYPE_DIR}/${CARGO_LIB_PFX}livesplit_core${CARGO_LIB_EXT}"
)
# livesplit_core.h
ExternalProject_Add(
livesplit_core-h
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND cargo run
SOURCE_DIR "${CMAKE_SOURCE_DIR}/${FIS_LIBS}/livesplit-core/capi/bind_gen"
BUILD_IN_SOURCE ON
INSTALL_COMMAND ""
LOG_BUILD ON
DEPENDS livesplit-core
BUILD_BYPRODUCTS
"${CMAKE_SOURCE_DIR}/${FIS_LIBS}/livesplit-core/capi/bindings/livesplit_core.h"
)
# dependencies
add_dependencies(fission livesplit_core-h livesplit-core)
# fission config and link
target_include_directories(fission PRIVATE
"${CMAKE_SOURCE_DIR}/${FIS_LIBS}"
"${CMAKE_SOURCE_DIR}/${FIS_LIBS}/livesplit-core/capi/bindings"
)
find_package(OpenGL REQUIRED)
find_package(Threads REQUIRED)
target_link_libraries(fission
"${CMAKE_BINARY_DIR}/${FIS_RUST}/target/${CARGO_TARGET_PATH}/${RUST_BUILD_TYPE_DIR}/${CARGO_LIB_PFX}livesplit_core${CARGO_LIB_EXT}"
glad glfw OpenGL::GL Threads::Threads
)
# TODO: narrow this down and use cmake builtin for dl
if(UNIX)
target_link_libraries(fission
m dl
)
elseif(WIN32)
target_link_libraries(fission
debug ws2_32 userenv
bcrypt
)
endif()
# data files
file(COPY
"${CMAKE_SOURCE_DIR}/${FIS_DATA}/"
DESTINATION "${CMAKE_BINARY_DIR}/${FIS_BINS}/${FIS_DATA}/"
)