diff --git a/cmake/modules/AddLesson.cmake b/cmake/modules/AddLesson.cmake index eab4ea4..1220354 100644 --- a/cmake/modules/AddLesson.cmake +++ b/cmake/modules/AddLesson.cmake @@ -15,28 +15,54 @@ function (add_lesson target) $<$:_CRT_SECURE_NO_WARNINGS>) target_link_libraries(${target} SDL3::SDL3) if (CMAKE_SYSTEM_NAME STREQUAL "Windows") - add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different + # Copy SDL3.dll to target build folder on Windows + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different $ $) endif() target_sources(${target} PRIVATE ${arg_SOURCES}) + if (NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Ensure target Data & Data/Shaders folders exist + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E make_directory + "$/Data/Shaders") + endif() foreach (shader IN LISTS arg_SHADERS) - if (shader MATCHES "\\.metal$") - set(path "${CMAKE_SOURCE_DIR}/src/shaders/${shader}") + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Add compiled Metal shader libraries as bundle resources + set(path "${CMAKE_SOURCE_DIR}/data/shaders/${shader}.metallib") + set_source_files_properties(${path} PROPERTIES + HEADER_FILE_ONLY ON + MACOSX_PACKAGE_LOCATION "Resources/Data/Shaders") + target_sources(${target} PRIVATE "${path}") + unset(path) else() - set(path "${CMAKE_SOURCE_DIR}/data/shaders/${shader}") + if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + # Copy D3D12 (DXIL) shaders into target shaders folder + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different + "${CMAKE_SOURCE_DIR}/data/shaders/${shader}.vtx.dxb" + "${CMAKE_SOURCE_DIR}/data/shaders/${shader}.pxl.dxb" + "$/Data/Shaders") + endif() + # Copy Vulkan (SPIR-V) shaders into target shaders folder + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different + "${CMAKE_SOURCE_DIR}/data/shaders/${shader}.vtx.spv" + "${CMAKE_SOURCE_DIR}/data/shaders/${shader}.frg.spv" + "$/Data/Shaders") endif() - set_source_files_properties(${path} PROPERTIES - HEADER_FILE_ONLY ON - MACOSX_PACKAGE_LOCATION "Resources/Data/Shaders") - target_sources(${target} PRIVATE "${path}") endforeach() - foreach (resource IN LISTS arg_DATA) - set(path "${CMAKE_SOURCE_DIR}/data/${resource}") - set_source_files_properties(${path} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources/Data") - target_sources(${target} PRIVATE "${path}") + foreach (file IN LISTS arg_DATA) + set(path "${CMAKE_SOURCE_DIR}/data/${file}") + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Add data file to bundle resources + set_source_files_properties(${path} PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources/Data") + target_sources(${target} PRIVATE "${path}") + else() + # Copy the data file into the target Data folder + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different + "${path}" "$/Data") + endif() + unset(path) endforeach() - unset(path) endfunction() diff --git a/src/c/CMakeLists.txt b/src/c/CMakeLists.txt index 6e40d30..618a56f 100644 --- a/src/c/CMakeLists.txt +++ b/src/c/CMakeLists.txt @@ -1,12 +1,12 @@ include(AddLesson) add_lesson(lesson01 SOURCES lesson1.c) -add_lesson(lesson02 SOURCES lesson2.c SHADERS lesson2.metallib) -add_lesson(lesson03 SOURCES lesson3.c SHADERS lesson3.metallib) -add_lesson(lesson04 SOURCES lesson4.c SHADERS lesson3.metallib) -add_lesson(lesson05 SOURCES lesson5.c SHADERS lesson3.metallib) -add_lesson(lesson06 SOURCES lesson6.c SHADERS lesson6.metallib DATA NeHe.bmp) -add_lesson(lesson07 SOURCES lesson7.c SHADERS lesson6.metallib lesson7.metallib DATA Crate.bmp) -add_lesson(lesson08 SOURCES lesson8.c SHADERS lesson7.metallib lesson8.metallib DATA Glass.bmp) -add_lesson(lesson09 SOURCES lesson9.c SHADERS lesson6.metallib lesson9.metallib DATA Star.bmp) -add_lesson(lesson10 SOURCES lesson10.c SHADERS lesson6.metallib DATA Mud.bmp World.txt) +add_lesson(lesson02 SOURCES lesson2.c SHADERS lesson2) +add_lesson(lesson03 SOURCES lesson3.c SHADERS lesson3) +add_lesson(lesson04 SOURCES lesson4.c SHADERS lesson3) +add_lesson(lesson05 SOURCES lesson5.c SHADERS lesson3) +add_lesson(lesson06 SOURCES lesson6.c SHADERS lesson6 DATA NeHe.bmp) +add_lesson(lesson07 SOURCES lesson7.c SHADERS lesson6 lesson7 DATA Crate.bmp) +add_lesson(lesson08 SOURCES lesson8.c SHADERS lesson7 lesson8 DATA Glass.bmp) +add_lesson(lesson09 SOURCES lesson9.c SHADERS lesson9 DATA Star.bmp) +add_lesson(lesson10 SOURCES lesson10.c SHADERS lesson6 DATA Mud.bmp World.txt)