This repository has been archived by the owner on Oct 21, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
157 lines (119 loc) · 3.91 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
cmake_minimum_required(VERSION 3.0)
cmake_policy(VERSION 3.0)
set(CMAKE_SUPPRESS_REGENERATION true)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_STANDARD 11)
project("Lynx engine" VERSION 1.0)
option(BUILD_EXAMPLES "Build examples" ON)
include(${CMAKE_SOURCE_DIR}/CMake/RedirectOutputTo.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/CompileFlags.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/CreateSymlink.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/GroupSources.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/StaticLibsCompile.cmake)
include(${CMAKE_SOURCE_DIR}/CMake/BuildExamples.cmake)
file(MAKE_DIRECTORY "bin")
RedirectOutputTo("bin")
### TODO:
# May we use it in the future
set(ROOT_DIR "${PROJECT_SOURCE_DIR}")
# configure a header file to pass some of the CMake settings to header
configure_file (
"${PROJECT_SOURCE_DIR}/cmake/configuration.h.in"
"${PROJECT_SOURCE_DIR}/headers/common/configuration.h"
)
###
### Engine
set(ENGINE_DIR ${PROJECT_SOURCE_DIR}/src/engine)
file(GLOB_RECURSE SRC_FILES
${ENGINE_DIR}/*.cpp
${ENGINE_DIR}/*.cxx
${ENGINE_DIR}/*.c
)
foreach(FILE ${SRC_FILES})
message("[Engine]Found source file: ${FILE}")
set(ENGINE_SRC ${LAUNCHER_SRC} ${FILE})
endforeach(FILE)
add_library(Engine MODULE ${ENGINE_SRC})
set(EngineHeaders
${PROJECT_SOURCE_DIR}/headers/engine
${PROJECT_SOURCE_DIR}/headers/common
)
target_include_directories(Engine PRIVATE ${EngineHeaders})
set(ENGINE_DIR ${PROJECT_SOURCE_DIR}/headers)
file(GLOB_RECURSE SRC_FILES
${ENGINE_DIR}/common/*.h
${ENGINE_DIR}/common/*.hpp
${ENGINE_DIR}/common/*.hxx
${ENGINE_DIR}/engine/*.h
${ENGINE_DIR}/engine/*.hpp
${ENGINE_DIR}/engine/*.hxx
)
foreach(FILE ${SRC_FILES})
message("[Engine]Found header file: ${FILE}")
set(ENGINE_SRC ${ENGINE_SRC} ${FILE})
endforeach(FILE)
target_sources(Engine PRIVATE ${ENGINE_SRC})
GroupSources("src/engine" "src/engine" "Source Files")
### Launcher
#one executable - launcher for engine and game(s)
set(LAUNCHER_DIR ${PROJECT_SOURCE_DIR}/src/launcher)
file(GLOB_RECURSE SRC_FILES
${LAUNCHER_DIR}/*.cpp
${LAUNCHER_DIR}/*.cxx
${LAUNCHER_DIR}/*.c
)
foreach(FILE ${SRC_FILES})
message("[Launcher]Found source file: ${FILE}")
set(LAUNCHER_SRC ${LAUNCHER_SRC} ${FILE})
endforeach(FILE)
add_executable(Launcher WIN32 ${SRC_FILES})
set(LauncherHeaders
${PROJECT_SOURCE_DIR}/headers/launcher
${PROJECT_SOURCE_DIR}/headers/common
)
target_include_directories(Launcher PRIVATE ${LauncherHeaders})
target_include_directories(Launcher PRIVATE ${EngineHeaders})
set(LAUNCHER_DIR ${PROJECT_SOURCE_DIR}/headers)
file(GLOB_RECURSE SRC_FILES
${LAUNCHER_DIR}/common/*.h
${LAUNCHER_DIR}/common/*.hpp
${LAUNCHER_DIR}/common/*.hxx
${LAUNCHER_DIR}/launcher/*.h
${LAUNCHER_DIR}/launcher/*.hpp
${LAUNCHER_DIR}/launcher/*.hxx
)
foreach(FILE ${SRC_FILES})
message("[Launcher]Found header file: ${FILE}")
set(LAUNCHER_SRC ${LAUNCHER_SRC} ${FILE})
endforeach(FILE)
target_sources(Launcher PRIVATE ${LAUNCHER_SRC})
GroupSources("src/launcher" "src/launcher" "Source Files")
add_dependencies(Launcher Engine)
## Resources symlink
message("Creating symbolic link to resources directory")
#Create symlink to resources in binary dir
CreateSymlink(${PROJECT_SOURCE_DIR}/bin/resources ${PROJECT_SOURCE_DIR}/resources)
## External shared libraries
message("Copy external library to bin")
#copy external dlls to bin folder
file(GLOB_RECURSE DLLS RELATIVE ${PROJECT_SOURCE_DIR}/dll
${PROJECT_SOURCE_DIR}/dll/*.dll
${PROJECT_SOURCE_DIR}/dll/*.lib
${PROJECT_SOURCE_DIR}/dll/*.so
)
foreach(DLL ${DLLS})
message("Copy: ${DLL}")
if(WIN32)
file(COPY ${PROJECT_SOURCE_DIR}/dll/${DLL}
DESTINATION ${PROJECT_SOURCE_DIR}/bin/)
elseif(UNIX AND NOT APPLE)
file(COPY ${DLL} DESTINATION ${PROJECT_SOURCE_DIR}/bin/)
endif(WIN32)
endforeach(DLL)
## Static libraries
StaticLibsCompile(Engine)
if(${BUILD_EXAMPLES})
message("Looking for examples to build")
BuildExamples()
endif()