@@ -4,28 +4,77 @@ if(POLICY CMP0072)
44 cmake_policy (SET CMP0072 NEW )
55endif ()
66
7- # Project renamed to 'game'
87project (game VERSION 1.0)
98
109set (CMAKE_CXX_STANDARD 23)
1110set (CMAKE_CXX_STANDARD_REQUIRED True )
1211
13- set (GLFW_BUILD_WAYLAND OFF CACHE BOOL "Disable Wayland backend in GLFW" )
14- set (GLFW_BUILD_X11 ON CACHE BOOL "Enable X11 backend in GLFW" )
12+ # ── GLFW (cross-platform, disable platform backends we don't need) ──────────
13+ if (WIN32 )
14+ set (GLFW_BUILD_WIN32 ON CACHE BOOL "" FORCE )
15+ set (GLFW_BUILD_WAYLAND OFF CACHE BOOL "" FORCE )
16+ set (GLFW_BUILD_X11 OFF CACHE BOOL "" FORCE )
17+ elseif (APPLE )
18+ set (GLFW_BUILD_WAYLAND OFF CACHE BOOL "" FORCE )
19+ set (GLFW_BUILD_X11 OFF CACHE BOOL "" FORCE )
20+ else () # Linux
21+ set (GLFW_BUILD_WAYLAND OFF CACHE BOOL "" FORCE )
22+ set (GLFW_BUILD_X11 ON CACHE BOOL "" FORCE )
23+ endif ()
1524
1625add_subdirectory (vendors/glfw )
17- add_subdirectory (vendors/cglm )
26+ add_subdirectory (vendors/cglm )
27+
28+ # ── Vulkan ───────────────────────────────────────────────────────────────────
29+ find_package (Vulkan REQUIRED )
30+
31+ # ── Shader compilation ───────────────────────────────────────────────────────
32+ # Requires glslc (ships with the Vulkan SDK) to be on PATH
33+ set (SHADER_DIR ${CMAKE_SOURCE_DIR} /src/shaders)
34+ set (SHADER_OUT ${CMAKE_BINARY_DIR} /shaders)
35+ file (MAKE_DIRECTORY ${SHADER_OUT} )
1836
19- find_package (OpenGL REQUIRED )
37+ set (VERT_SHADER ${SHADER_DIR} /vert.vert)
38+ set (FRAG_SHADER ${SHADER_DIR} /frag.frag)
39+ set (VERT_SPV ${SHADER_OUT} /vert.spv)
40+ set (FRAG_SPV ${SHADER_OUT} /frag.spv)
41+
42+ add_custom_command (
43+ OUTPUT ${VERT_SPV}
44+ COMMAND Vulkan::glslc ${VERT_SHADER} -o ${VERT_SPV}
45+ DEPENDS ${VERT_SHADER}
46+ COMMENT "Compiling vertex shader"
47+ )
48+ add_custom_command (
49+ OUTPUT ${FRAG_SPV}
50+ COMMAND Vulkan::glslc ${FRAG_SHADER} -o ${FRAG_SPV}
51+ DEPENDS ${FRAG_SHADER}
52+ COMMENT "Compiling fragment shader"
53+ )
54+ add_custom_target (shaders ALL DEPENDS ${VERT_SPV} ${FRAG_SPV} )
2055
21- # Executable renamed to 'game'
56+ # ── Executable ───────────────────────────────────────────────────────────────
2257add_executable (game
2358 src/main.cpp
24- src/glad.c
2559)
2660
27- target_include_directories (game PRIVATE include )
61+ add_dependencies (game shaders )
62+
63+ target_include_directories (game PRIVATE
64+ include
65+ ${Vulkan_INCLUDE_DIRS}
66+ )
67+
68+ target_link_libraries (game PRIVATE
69+ glfw
70+ Vulkan::Vulkan
71+ cglm
72+ )
2873
29- target_link_libraries (game
30- PRIVATE glfw OpenGL::GL cglm
74+ # Copy compiled shaders next to the executable after build
75+ add_custom_command (TARGET game POST_BUILD
76+ COMMAND ${CMAKE_COMMAND} -E copy_directory
77+ ${SHADER_OUT}
78+ $<TARGET_FILE_DIR :game >/shaders
79+ COMMENT "Copying shaders to output directory"
3180)
0 commit comments