@@ -27,26 +27,59 @@ add_executable(blocks WIN32
2727 src/world.c
2828)
2929target_link_libraries (blocks PUBLIC SDL3::SDL3 )
30- if (UNIX )
31- target_link_libraries (blocks PUBLIC m )
32- endif ()
3330target_include_directories (blocks PUBLIC lib/sqlite3 )
3431target_include_directories (blocks PUBLIC lib/stb )
3532set_target_properties (blocks PROPERTIES C_STANDARD 11 )
3633
34+ find_program (GLSLC glslc )
35+ find_program (SHADERCROSS shadercross )
3736function (shader FILE )
38- set (SOURCE shaders/${FILE} )
39- set (OUTPUT ${BINARY_DIR} /${FILE} )
40- add_custom_command (
41- OUTPUT ${OUTPUT}
42- COMMAND glslc ${SOURCE} -o ${OUTPUT} -I src
43- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
44- DEPENDS ${SOURCE} shaders/helpers.glsl src/config.h
45- COMMENT ${SOURCE}
46- )
47- string (REPLACE . _ NAME ${FILE} )
48- add_custom_target (${NAME} DEPENDS ${OUTPUT} )
49- add_dependencies (blocks ${NAME} )
37+ set (GLSL ${CMAKE_SOURCE_DIR} /shaders/${FILE} )
38+ set (SPV ${CMAKE_SOURCE_DIR} /shaders/bin/${FILE} .spv)
39+ set (DXIL ${CMAKE_SOURCE_DIR} /shaders/bin/${FILE} .dxil)
40+ set (MSL ${CMAKE_SOURCE_DIR} /shaders/bin/${FILE} .msl)
41+ set (JSON ${CMAKE_SOURCE_DIR} /shaders/bin/${FILE} .json)
42+ function (compile PROGRAM SOURCE OUTPUT )
43+ add_custom_command (
44+ OUTPUT ${OUTPUT}
45+ COMMAND ${PROGRAM} ${SOURCE} -o ${OUTPUT} -I src
46+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
47+ DEPENDS ${SOURCE} shaders/helpers.glsl src/config.h
48+ COMMENT "${SOURCE} -> ${OUTPUT} "
49+ )
50+ get_filename_component (NAME ${OUTPUT} NAME )
51+ string (REPLACE . _ NAME ${NAME} )
52+ set (NAME compile_${NAME} )
53+ add_custom_target (${NAME} DEPENDS ${OUTPUT} )
54+ add_dependencies (blocks ${NAME} )
55+ endfunction ()
56+ if (EXISTS ${GLSLC} AND EXISTS ${SHADERCROSS} )
57+ compile (${GLSLC} ${GLSL} ${SPV} )
58+ compile (${SHADERCROSS} ${SPV} ${MSL} )
59+ compile (${SHADERCROSS} ${SPV} ${JSON} )
60+ else ()
61+ message ("Skipping build since dependencies are missing" )
62+ endif ()
63+ function (package OUTPUT )
64+ get_filename_component (NAME ${OUTPUT} NAME )
65+ set (BINARY ${BINARY_DIR} /${NAME} )
66+ add_custom_command (
67+ OUTPUT ${BINARY}
68+ COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT} ${BINARY}
69+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
70+ DEPENDS ${OUTPUT}
71+ COMMENT "${OUTPUT} -> ${BINARY} "
72+ )
73+ string (REPLACE . _ NAME ${NAME} )
74+ set (NAME package_${NAME} )
75+ add_custom_target (${NAME} DEPENDS ${BINARY} )
76+ add_dependencies (blocks ${NAME} )
77+ endfunction ()
78+ if (NOT APPLE )
79+ package (${SPV} )
80+ else ()
81+ package (${MSL} )
82+ endif ()
5083endfunction ()
5184shader (composite.frag )
5285shader (fullscreen.vert )
0 commit comments