1+ cmake_minimum_required (VERSION 3.25)
2+ project (demo)
3+
4+ # CMake
5+ set (CMAKE_CXX_STANDARD 20)
6+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /lib)
7+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /lib)
8+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /bin)
9+
10+ # CPM
11+ include (cmake/CPM.cmake)
12+
13+ # Debug
14+ add_compile_definitions ($<$<CONFIG:DEBUG>:DEBUG>)
15+
16+ # Vulkan
17+ add_compile_definitions (VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
18+ add_compile_definitions (VULKAN_HPP_NO_CONSTRUCTORS)
19+ find_package (Vulkan REQUIRED COMPONENTS dxc)
20+
21+ # MSVC
22+ if (MSVC )
23+ add_compile_options (/wd5054)
24+ else ()
25+ add_compile_options (-fms-extensions)
26+ endif ()
27+
28+ # GLFW
29+ CPMAddPackage(
30+ NAME glfw
31+ GITHUB_REPOSITORY glfw/glfw
32+ GIT_TAG 3.3.8
33+ OPTIONS
34+ "GLFW_BUILD_DOCS OFF"
35+ "GLFW_BUILD_TESTS OFF"
36+ "GLFW_BUILD_EXAMPLES OFF"
37+ )
38+
39+ # OpenGL Mathematics (GLM)
40+ add_compile_definitions (GLM_ENABLE_EXPERIMENTAL)
41+ add_compile_definitions (GLM_FORCE_DEPTH_ZERO_TO_ONE)
42+ add_compile_definitions (GLM_FORCE_RADIANS)
43+ CPMAddPackage(
44+ NAME glm
45+ GITHUB_REPOSITORY g-truc/glm
46+ GIT_TAG 0.9.9.8
47+ )
48+
49+ # Dear ImGui
50+ CPMAddPackage(
51+ NAME imgui
52+ GITHUB_REPOSITORY ocornut/imgui
53+ GIT_TAG v1.89.9
54+ DOWNLOAD_ONLY
55+ )
56+ include_directories (${imgui_SOURCE_DIR} ${imgui_SOURCE_DIR} /backends)
57+ add_library (imgui
58+ ${imgui_SOURCE_DIR} /backends/imgui_impl_glfw.cpp
59+ ${imgui_SOURCE_DIR} /backends/imgui_impl_glfw.h
60+ ${imgui_SOURCE_DIR} /imconfig.h
61+ ${imgui_SOURCE_DIR} /imgui.cpp
62+ ${imgui_SOURCE_DIR} /imgui.h
63+ ${imgui_SOURCE_DIR} /imgui_demo.cpp
64+ ${imgui_SOURCE_DIR} /imgui_draw.cpp
65+ ${imgui_SOURCE_DIR} /imgui_internal.h
66+ ${imgui_SOURCE_DIR} /imgui_tables.cpp
67+ ${imgui_SOURCE_DIR} /imgui_widgets.cpp
68+ ${imgui_SOURCE_DIR} /imstb_rectpack.h
69+ ${imgui_SOURCE_DIR} /imstb_textedit.h
70+ ${imgui_SOURCE_DIR} /imstb_truetype.h
71+ )
72+ target_link_libraries (imgui Vulkan::Vulkan glfw)
73+
74+ # KTX (Khronos Texture)
75+ CPMAddPackage(
76+ NAME ktx
77+ GITHUB_REPOSITORY KhronosGroup/KTX-Software
78+ GIT_TAG v4.2.1
79+ OPTIONS
80+ "KTX_FEATURE_STATIC_LIBRARY ON"
81+ "KTX_FEATURE_TESTS OFF"
82+ "KTX_FEATURE_TOOLS OFF"
83+ "KTX_FEATURE_GL_UPLOAD OFF"
84+ "KTX_FEATURE_VK_UPLOAD OFF"
85+ )
86+
87+ # MikkTSpace
88+ CPMAddPackage(
89+ NAME MikkTSpace
90+ VERSION 3e895b4
91+ GITHUB_REPOSITORY mmikk/MikkTSpace
92+ GIT_TAG 3e895b4
93+ DOWNLOAD_ONLY
94+ )
95+ include_directories (${MikkTSpace_SOURCE_DIR} )
96+ add_library (MikkTSpace
97+ ${MikkTSpace_SOURCE_DIR} /mikktspace.c
98+ ${MikkTSpace_SOURCE_DIR} /mikktspace.h
99+ )
100+
101+ # MshIO
102+ CPMAddPackage(
103+ NAME mshio
104+ GITHUB_REPOSITORY qnzhou/MshIO
105+ GIT_TAG v0.0.1
106+ )
107+
108+ # SoLoud
109+ CPMAddPackage(
110+ NAME SoLoud
111+ VERSION 20200207
112+ GITHUB_REPOSITORY jarikomppa/soloud
113+ GIT_TAG RELEASE_20200207
114+ DOWNLOAD_ONLY
115+ )
116+ add_compile_definitions (WITH_MINIAUDIO)
117+ include_directories (${SoLoud_SOURCE_DIR} /include )
118+ add_library (SoLoud
119+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/dr_flac.h
120+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/dr_impl.cpp
121+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/dr_mp3.h
122+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/dr_wav.h
123+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/soloud_wav.cpp
124+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/soloud_wavstream.cpp
125+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/stb_vorbis.c
126+ ${SoLoud_SOURCE_DIR} /src/audiosource/wav/stb_vorbis.h
127+ ${SoLoud_SOURCE_DIR} /src/backend/miniaudio/miniaudio.h
128+ ${SoLoud_SOURCE_DIR} /src/backend/miniaudio/soloud_miniaudio.cpp
129+ ${SoLoud_SOURCE_DIR} /src/core/soloud.cpp
130+ ${SoLoud_SOURCE_DIR} /src/core/soloud_audiosource.cpp
131+ ${SoLoud_SOURCE_DIR} /src/core/soloud_bus.cpp
132+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_3d.cpp
133+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_basicops.cpp
134+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_faderops.cpp
135+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_filterops.cpp
136+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_getters.cpp
137+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_setters.cpp
138+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_voicegroup.cpp
139+ ${SoLoud_SOURCE_DIR} /src/core/soloud_core_voiceops.cpp
140+ ${SoLoud_SOURCE_DIR} /src/core/soloud_fader.cpp
141+ ${SoLoud_SOURCE_DIR} /src/core/soloud_fft.cpp
142+ ${SoLoud_SOURCE_DIR} /src/core/soloud_fft_lut.cpp
143+ ${SoLoud_SOURCE_DIR} /src/core/soloud_file.cpp
144+ ${SoLoud_SOURCE_DIR} /src/core/soloud_filter.cpp
145+ ${SoLoud_SOURCE_DIR} /src/core/soloud_misc.cpp
146+ ${SoLoud_SOURCE_DIR} /src/core/soloud_queue.cpp
147+ ${SoLoud_SOURCE_DIR} /src/core/soloud_thread.cpp
148+ )
149+
150+ # stb
151+ CPMAddPackage(
152+ NAME stb
153+ VERSION 5736b15
154+ GITHUB_REPOSITORY nothings/stb
155+ GIT_TAG 5736b15
156+ DOWNLOAD_ONLY
157+ )
158+ include_directories (${stb_SOURCE_DIR} )
159+
160+ # tinygltf
161+ add_compile_definitions (TINYGLTF_NO_EXTERNAL_IMAGE)
162+ add_compile_definitions (TINYGLTF_NO_STB_IMAGE)
163+ add_compile_definitions (TINYGLTF_NO_STB_IMAGE_WRITE)
164+ add_compile_definitions (TINYGLTF_USE_CPP14)
165+ CPMAddPackage(
166+ NAME tinygltf
167+ GITHUB_REPOSITORY syoyo/tinygltf
168+ GIT_TAG v2.8.15
169+ OPTIONS
170+ "TINYGLTF_BUILD_LOADER_EXAMPLE OFF"
171+ "TINYGLTF_HEADER_ONLY ON"
172+ "TINYGLTF_INSTALL OFF"
173+ )
174+
175+ # tinyobjloader
176+ CPMAddPackage(
177+ NAME tinyobjloader
178+ GITHUB_REPOSITORY tinyobjloader/tinyobjloader
179+ GIT_TAG v1.0.6
180+ )
181+
182+ # Vulkan Memory Allocator
183+ CPMAddPackage(
184+ NAME VulkanMemoryAllocator
185+ GITHUB_REPOSITORY GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
186+ GIT_TAG v3.0.1
187+ )
188+ CPMAddPackage(
189+ NAME VulkanMemoryAllocator_Hpp
190+ GITHUB_REPOSITORY ruberith/VulkanMemoryAllocator-Hpp
191+ GIT_TAG v3.0.1
192+ DOWNLOAD_ONLY
193+ )
194+ include_directories (${VulkanMemoryAllocator_Hpp_SOURCE_DIR} /include )
195+
196+ # demo
197+ add_executable (demo
198+ demo/main.cpp
199+ demo/Audio.cpp
200+ demo/Audio.h
201+ demo/Buffer.h
202+ demo/Camera.cpp
203+ demo/Camera.h
204+ demo/Data.h
205+ demo/Demo.cpp
206+ demo/Demo.h
207+ demo/Descriptor.h
208+ demo/Engine.cpp
209+ demo/Engine.h
210+ demo/GLFW.cpp
211+ demo/GLFW.h
212+ demo/GPU.cpp
213+ demo/GPU.h
214+ demo/GUI.cpp
215+ demo/GUI.h
216+ demo/Image.cpp
217+ demo/Image.h
218+ demo/Model.h
219+ demo/Player.cpp
220+ demo/Player.h
221+ demo/Shader.cpp
222+ demo/Shader.h
223+ demo/Storage.h
224+ demo/SurfaceMesh.h
225+ demo/TangentSpace.h
226+ demo/Uniform.h
227+ demo/Utils.h
228+ demo/VersionNumber.h
229+ demo/Vertex.h
230+ demo/Vulkan.cpp
231+ demo/VulkanDescriptors.cpp
232+ demo/VulkanMemory.cpp
233+ demo/VulkanModels.cpp
234+ demo/VulkanPipelines.cpp
235+ demo/VulkanRender.cpp
236+ demo/VulkanSim.cpp
237+ demo/Vulkan.h
238+ )
239+ target_link_libraries (demo
240+ Vulkan::Vulkan
241+ Vulkan::dxc_lib
242+ glfw
243+ glm::glm
244+ imgui
245+ ktx
246+ MikkTSpace
247+ mshio
248+ SoLoud
249+ tinygltf
250+ tinyobjloader
251+ VulkanMemoryAllocator
252+ )
253+
254+ # Resources
255+ set (RESOURCE_FILES
256+ README.md
257+ )
258+ set_source_files_properties (${RESOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE )
259+ source_group (TREE ${CMAKE_SOURCE_DIR} FILES ${RESOURCE_FILES} )
260+ target_sources (demo PRIVATE ${RESOURCE_FILES} )
0 commit comments