-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
80 lines (71 loc) · 2.48 KB
/
Copy pathCMakeLists.txt
File metadata and controls
80 lines (71 loc) · 2.48 KB
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
# select the sokol-gfx backend depending on platform
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
elseif(FIPS_ANDROID)
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_definitions(-DSOKOL_GLCORE)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLCORE" PARENT_SCOPE)
set(slang "glsl410")
elseif(FIPS_OSX)
add_definitions(-DSOKOL_METAL)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_METAL" PARENT_SCOPE)
if (FIPS_IOS)
set(slang "metal_ios")
else()
set(slang "metal_macos")
endif()
else()
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
# a lib of common code shared between all emulators
add_library(common STATIC
common.h
clock.c clock.h
fs.c fs.h
gfx.c gfx.h
keybuf.c keybuf.h
prof.c prof.h
webapi.c webapi.h)
set(SHADER_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/shaders.glsl)
set(SHADER_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shaders.glsl.h)
add_custom_command(
OUTPUT ${SHADER_OUTPUT}
COMMAND ${SOKOL_SHDC_EXECUTABLE}
--input ${SHADER_INPUT}
--output ${SHADER_OUTPUT}
--format sokol
--slang ${slang}
DEPENDS ${SHADER_INPUT}
COMMENT "Compiling shaders with sokol-shdc"
)
add_custom_target(compile_shaders DEPENDS ${SHADER_OUTPUT})
add_dependencies(common compile_shaders)
target_include_directories(common PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_sources(common PRIVATE sokol.c)
target_compile_options(common BEFORE PRIVATE -include ${CMAKE_CURRENT_SOURCE_DIR}/config.h)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(common PRIVATE X11 Xcursor Xi EGL GL m dl asound)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
target_link_libraries(common PRIVATE
"-s USE_WEBGL2=1" # Enable WebGL 2
"-s FULL_ES3=1" # Use OpenGL ES 3, which supports more features like glClearBufferfv
)
endif()
# optional UI library (using Dear ImGui)
add_library(ui STATIC
ui.cc ui.h)
add_dependencies(ui imgui-docking common)
# a separate library with just keybuf (for the ASCII emulators)
add_library(keybuf STATIC
keybuf.c keybuf.h)