-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
149 lines (115 loc) · 5.27 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
cmake_minimum_required(VERSION 3.18)
# Change project name here
set(PROJECT_NAME "revabdsim")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
if(EMSCRIPTEN OR CMAKE_SYSTEM_NAME MATCHES "Android")
set(GLFM "1")
message("Setting GLFM to true...")
endif()
message(CMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}")
#set(CMAKE_VERBOSE_MAKEFILE on)
project("${PROJECT_NAME}")
set(CMAKE_CXX_STANDARD 20)
if(${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
add_compile_options(-sUSE_FREETYPE=1)
else()
message("Finding packages for desktop...")
add_subdirectory(lib/freetype)
endif()
# include
if (GLFM)
include_directories(lib/glfm/include)
else()
include_directories(lib/glad/include)
endif()
include_directories(lib/soloud/include)
include_directories(lib/json)
include_directories(lib/glm/glm)
include_directories(src)
# source files
if(GLFM)
add_compile_definitions(GLFM_INCLUDE_ES3 USE_GLFM)
add_subdirectory(lib/glfm)
else()
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(lib/glfw)
add_subdirectory(lib/glad)
endif()
set(SOLOUD_BACKEND_SDL2 OFF CACHE BOOL "Set to ON for building SDL2 backend")
add_compile_definitions(WITH_MINIAUDIO)
add_subdirectory(lib/soloud/contrib)
add_subdirectory(lib/glm)
# executable
file(GLOB_RECURSE DIR_SRC src/*.cpp)
if(EMSCRIPTEN)
SET(CMAKE_EXECUTABLE_SUFFIX ".html")
# hack stolen from GLFM build script
# modify shell_minimal.html to make canvas fill the screen
file(READ ${EMSCRIPTEN_ROOT_PATH}/src/shell_minimal.html EMSCRIPTEN_SHELL_HTML)
string(FIND "${EMSCRIPTEN_SHELL_HTML}" "<style>" HAS_STYLE)
if (${HAS_STYLE} EQUAL -1)
message(WARNING "<style> not found in shell_minimal.html, copying as-is")
else()
string(CONCAT STYLE_REPLACEMENT "<meta name=\"viewport\" content=\"width=device-width,user-scalable=no,viewport-fit=cover\">\n"
" <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n"
" <style>\n"
" /* GLFM: Start changes */\n"
" :root {\n"
" --glfm-chrome-top-old: constant(safe-area-inset-top);\n"
" --glfm-chrome-right-old: constant(safe-area-inset-right);\n"
" --glfm-chrome-bottom-old: constant(safe-area-inset-bottom);\n"
" --glfm-chrome-left-old: constant(safe-area-inset-left);\n"
" --glfm-chrome-top: env(safe-area-inset-top);\n"
" --glfm-chrome-right: env(safe-area-inset-right);\n"
" --glfm-chrome-bottom: env(safe-area-inset-bottom);\n"
" --glfm-chrome-left: env(safe-area-inset-left);\n"
" }\n"
" body, html { border: 0px none; padding: 0px; margin: 0px; width: 100%; height: 100%; overflow: hidden; position: fixed; }\n"
" canvas.emscripten { background: black; width: 100%; height: 100%; }\n"
" .emscripten_border { width: 100%; height: 100%; border: 0px none !important;}\n"
" hr { display: none; }\n"
" /* GLFM: End changes */"
)
string(REPLACE "<style>" "${STYLE_REPLACEMENT}" EMSCRIPTEN_SHELL_HTML "${EMSCRIPTEN_SHELL_HTML}")
endif()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/shell.html.in "${EMSCRIPTEN_SHELL_HTML}")
add_executable("${PROJECT_NAME}" ${DIR_SRC})
set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-s MIN_WEBGL_VERSION=2 -s MAX_WEBGL_VERSION=2 -s FULL_ES2=1 -s ASSERTIONS -s GL_ASSERTIONS -s GL_DEBUG -s DEMANGLE_SUPPORT=1 -s OFFSCREEN_FRAMEBUFFER=1 -s ALLOW_MEMORY_GROWTH -s EXIT_RUNTIME=1 --preload-file res@res --shell-file ${CMAKE_CURRENT_BINARY_DIR}/shell.html.in")
elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
# TODO find a better way to get this path...
file(READ ${CMAKE_CURRENT_BINARY_DIR}/../../../../../app/src/main/AndroidManifest.xml.pre FILE_CONTENTS)
string(REPLACE "OUTROSPECTION_PROJECT_NAME" "${PROJECT_NAME}" FILE_CONTENTS "${FILE_CONTENTS}")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/../../../../../app/src/main/AndroidManifest.xml "${FILE_CONTENTS}")
add_library("${PROJECT_NAME}" SHARED ${DIR_SRC})
endif() # TODO iOS
if(GLFM)
set(PLATFORM_DEPS "glfm")
if(CMAKE_SYSTEM_NAME MATCHES "Android")
set(PLATFORM_DEPS_2_ELECTRIC_BOOGALOO "GLESv3")
set(PLATFORM_DEPS_3_ELECTRIC_BOOGALOO "log")
endif()
else()
set(CMAKE_EXE_LINKER_FLAGS) # -static
add_executable("${PROJECT_NAME}" ${DIR_SRC})
set(PLATFORM_DEPS "glfw")
set(PLATFORM_DEPS_2_ELECTRIC_BOOGALOO "glad")
endif()
set_target_properties("${PROJECT_NAME}" PROPERTIES COMPILE_FLAGS "-fPIC -Wno-format-security")
# symlink res folder
add_custom_command(TARGET "${PROJECT_NAME}" PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/res $<TARGET_FILE_DIR:${PROJECT_NAME}>/res)
find_library(GLESv3-lib GLESv3)
# for some reason this fails if I don't put GLFW and GLAD in separate lines. WHAT.
target_link_libraries("${PROJECT_NAME}"
PRIVATE
freetype soloud
PUBLIC
${PLATFORM_DEPS}
${PLATFORM_DEPS_2_ELECTRIC_BOOGALOO}
${PLATFORM_DEPS_3_ELECTRIC_BOOGALOO}
PRIVATE
${CMAKE_DL_LIBS}
)