-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
124 lines (101 loc) · 2.7 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
cmake_minimum_required(VERSION 3.15)
project(Umbrella LANGUAGES CXX C)
string(CONCAT WALL_OTHERS "$<"
"$<AND:"
"$<COMPILE_LANGUAGE:CXX,C>,"
"$<NOT:"
"$<CXX_COMPILER_ID:MSVC>"
">"
">:"
"SHELL:-Wall -Wextra -Wdouble-promotion -Wshadow"
">")
string(CONCAT WALL_MSVC "$<"
"$<AND:"
"$<COMPILE_LANGUAGE:CXX,C>,"
"$<CXX_COMPILER_ID:MSVC>"
">:"
"SHELL:/W4 /wd4201"
">")
# multi-cpu build
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
#[[
string(CONCAT ASAN_MSVC "$<"
"$<AND:"
"$<COMPILE_LANGUAGE:CXX,C>,"
"$<CXX_COMPILER_ID:MSVC>,"
"$<CONFIG:DEBUG>"
">:"
"SHELL:/fsanitize=address"
">")
add_compile_options(${ASAN_MSVC})
]]
# enable folder hierarchy: filters on msvc
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# output to current binary directory
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
# glfw
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(vendor/glfw)
# spdlog
add_subdirectory(vendor/spdlog)
# glm
add_subdirectory(vendor/glm)
# umbrella target
list(APPEND UMBRELLA_SOURCES
# umbrella
src/main.cpp
src/umbrella/UmbrellaApplication.cpp
src/umbrella/UmbrellaApplication.h
# umbrella graphics
src/umbrella/gfx/ShaderProgram.cpp
src/umbrella/gfx/ShaderProgram.h
# umbrella utility
src/umbrella/util/File.cpp
src/umbrella/util/File.h
src/umbrella/util/Framework.h
# umbrella systems
src/umbrella/systems/Camera.cpp
src/umbrella/systems/Camera.h
# glad
vendor/glad/src/gl.c
# tinyobjloader
vendor/tinyobjloader/tiny_obj_loader.cc
# stb
vendor/stb/stb_image.cpp
)
list(APPEND UMBRELLA_INCLUDES
# umbrella
src/umbrella
# glad
vendor/glad/include
# tinyobjloader
vendor/tinyobjloader
# stb
vendor/stb
)
add_executable(Umbrella)
target_sources(Umbrella PRIVATE
${UMBRELLA_SOURCES}
)
target_include_directories(Umbrella PRIVATE
${UMBRELLA_INCLUDES}
)
target_link_libraries(Umbrella glfw spdlog glm)
target_compile_features(Umbrella PRIVATE cxx_std_23)
target_compile_options(Umbrella PRIVATE
${WALL_OTHERS} ${WALL_MSVC}
)
# msvc-specific Umbrella settings
if(MSVC)
set_target_properties(Umbrella PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data
)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT Umbrella
)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${UMBRELLA_SOURCES})
endif()