master
ブランチ master
ShaderPlayground / CMakeLists.txt
6.9 KB、212行 生 Blame 履歴
1cmake_minimum_required(VERSION 3.14...3.28)
2
3set(CMAKE_POLICY_DEFAULT_CMP0091 NEW)
4project(shaderplayground LANGUAGES CXX VERSION 0.1.0)
5
6set(NOTOCJK_BINARY "${CMAKE_CURRENT_SOURCE_DIR}/ass/NotoSansCJKjp-Regular.otf")
7set(NOTOCJK_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/ass/NotoSansCJKjp-Regular.h")
8
9add_custom_command(
10 OUTPUT "${NOTOCJK_HEADER}"
11 COMMAND xxd -i -n __NotoSansCJKjp_Regular_otf "${NOTOCJK_BINARY}" > "${NOTOCJK_HEADER}"
12 DEPENDS "${NOTOCJK_BINARY}"
13 COMMENT "NotoSansCJKjp-Regular.hを作成中・・・"
14 VERBATIM
15)
16
17set(NOTOMONO_BINARY "${CMAKE_CURRENT_SOURCE_DIR}/ass/NotoMono-Regular.ttf")
18set(NOTOMONO_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/ass/NotoMono-Regular.h")
19
20add_custom_command(
21 OUTPUT "${NOTOMONO_HEADER}"
22 COMMAND xxd -i -n __NotoMono_Regular_ttf "${NOTOMONO_BINARY}" > "${NOTOMONO_HEADER}"
23 DEPENDS "${NOTOMONO_BINARY}"
24 COMMENT "NotoMono-Regular.hを作成中・・・"
25 VERBATIM
26)
27
28add_custom_target(generate_fonts
29 DEPENDS "${NOTOCJK_HEADER}" "${NOTOMONO_HEADER}"
30)
31
32if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
33 set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "デバッグ又はリリース" FORCE)
34endif()
35
36set(CMAKE_CXX_STANDARD 20)
37set(CMAKE_CXX_STANDARD_REQUIRED ON)
38set(CMAKE_CXX_EXTENSIONS OFF)
39
40set(BUILD_SHARED_LIBS OFF CACHE BOOL "静的リンク" FORCE)
41
42if(MSVC)
43 set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
44 add_compile_options(/utf-8 /bigobj)
45endif()
46
47set(DB_NAME "shaderplayground.db" CACHE STRING "データベースのパス" FORCE)
48
49add_subdirectory(deps/glad)
50
51option(GLFW_BUILD_EXAMPLES OFF)
52option(GLFW_BUILD_TESTS OFF)
53option(GLFW_BUILD_DOCS OFF)
54option(GLFW_INSTALL OFF)
55add_subdirectory(deps/glfw)
56
57if(UNIX)
58 find_package(OpenGL REQUIRED)
59endif()
60
61add_subdirectory(deps/glm)
62add_subdirectory(deps/imgui)
63add_subdirectory(deps/luajit)
64add_subdirectory(deps/sol2)
65add_subdirectory(deps/sqlite)
66add_subdirectory(deps/stb_image)
67
68file(GLOB_RECURSE SHADERPLAYGROUND_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc")
69file(GLOB_RECURSE SHADERPLAYGROUND_INC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh")
70
71add_executable(shaderplayground main.cc ${SHADERPLAYGROUND_SRC} ${SHADERPLAYGROUND_INC})
72add_dependencies(shaderplayground generate_fonts)
73set_target_properties(shaderplayground PROPERTIES CXX_STANDARD 20)
74
75set(PLATFORM_LIBS "")
76
77if(UNIX)
78 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
79 message(STATUS "【!】Solaris又はIllumosで静的リンクが不可能為、動的リンクで伺います。")
80 else()
81 target_link_options(shaderplayground PRIVATE -static-libstdc++ -static-libgcc)
82 endif()
83
84 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
85 list(APPEND PLATFORM_LIBS
86 -Wl,-Bstatic
87 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/illumos-x64/libX11.a
88 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/illumos-x64/libxcb.a
89 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/illumos-x64/libXau.a
90 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/illumos-x64/libXdmcp.a
91 -Wl,-Bdynamic
92 )
93 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
94 list(APPEND PLATFORM_LIBS
95 -Wl,-Bstatic
96 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/linux-x64/libX11.a
97 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/linux-x64/libxcb.a
98 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/linux-x64/libXau.a
99 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/linux-x64/libXdmcp.a
100 -Wl,-Bdynamic
101 )
102 elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
103 list(APPEND PLATFORM_LIBS
104 -Wl,-Bstatic
105 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/freebsd-x64/libX11.a
106 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/freebsd-x64/libxcb.a
107 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/freebsd-x64/libXau.a
108 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/freebsd-x64/libXdmcp.a
109 -Wl,-Bdynamic
110 )
111 elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
112 list(APPEND PLATFORM_LIBS
113 -Wl,-Bstatic
114 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/openbsd-x64/libX11.a
115 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/openbsd-x64/libxcb.a
116 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/openbsd-x64/libXau.a
117 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/openbsd-x64/libXdmcp.a
118 -Wl,-Bdynamic
119 )
120 elseif(CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
121 list(APPEND PLATFORM_LIBS
122 -Wl,-Bstatic
123 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/netbsd-x64/libX11.a
124 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/netbsd-x64/libxcb.a
125 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/netbsd-x64/libXau.a
126 ${CMAKE_SOURCE_DIR}/deps/xlibre/lib/netbsd-x64/libXdmcp.a
127 -Wl,-Bdynamic
128 )
129 endif()
130
131 list(APPEND PLATFORM_LIBS OpenGL::GL)
132elseif(WIN32)
133 list(APPEND PLATFORM_LIBS opengl32)
134endif()
135
136if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
137 set(DB_NAME "shaderplayground.db" CACHE STRING "データベースのパス" FORCE)
138 set(PRODUCTION_BUILD OFF CACHE BOOL "リリース版?" FORCE)
139 target_compile_definitions(shaderplayground PRIVATE
140 DB_NAME="shaderplayground.db"
141 DB_RELATIVE_TO_EXE
142 )
143else()
144 set(PRODUCTION_BUILD ON CACHE BOOL "リリース版?" FORCE)
145 if(WIN32)
146 set(DB_NAME "$ENV{LOCALAPPDATA}/076Studio/ShaderPlayground/data/shaderplayground.db" CACHE STRING "データベースのパス" FORCE)
147 elseif(UNIX)
148 set(DB_NAME "$ENV{HOME}/.local/share/shaderplayground/shaderplayground.db" CACHE STRING "データベースのパス" FORCE)
149 else()
150 set(DB_NAME "shaderplayground.db" CACHE STRING "データベースのパス" FORCE)
151 endif()
152 target_compile_definitions(shaderplayground PRIVATE PRODUCTION_BUILD DB_NAME="${DB_NAME}")
153endif()
154
155message(STATUS "DB_NAME = ${DB_NAME}")
156
157if(WIN32)
158 set(INSTALL_BINDIR "C:/Program Files/076Studio/ShaderPlayground")
159 set(INSTALL_DATADIR "$ENV{LOCALAPPDATA}/076Studio/ShaderPlayground")
160else()
161 include(GNUInstallDirs)
162 set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
163 set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/shaderplayground/data)
164endif()
165
166install(TARGETS shaderplayground
167 RUNTIME DESTINATION ${INSTALL_BINDIR}
168 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
169 COMPONENT Runtime
170)
171
172install(DIRECTORY DESTINATION ${INSTALL_DATADIR}
173 COMPONENT Runtime
174)
175
176if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/shaderplayground.db")
177 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/shaderplayground.db"
178 DESTINATION ${INSTALL_DATADIR}
179 COMPONENT Runtime
180 )
181endif()
182
183if(MSVC)
184 target_compile_definitions(shaderplayground PUBLIC _CRT_SECURE_NO_WARNINGS)
185elseif(MINGW)
186 if(PRODUCTION_BUILD)
187 target_link_options(shaderplayground PRIVATE -mwindows)
188 endif()
189elseif(APPLE OR UNIX)
190 if(PRODUCTION_BUILD)
191 target_link_options("${CMAKE_PROJECT_NAME}" PRIVATE -s)
192 endif()
193endif()
194
195target_link_libraries(shaderplayground PRIVATE
196 glad
197 glfw
198 imgui
199 luajit
200 sqlite3
201 sol2
202 ${PLATFORM_LIBS}
203)
204
205target_include_directories(shaderplayground PRIVATE
206 "${CMAKE_CURRENT_SOURCE_DIR}/include"
207 "${CMAKE_CURRENT_SOURCE_DIR}/ass"
208)
209
210if(MSVC)
211 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT shaderplayground)
212endif()