c: (CMake) Copy lesson resources on platforms w/o Xcode bundles

Also lesson09 was copying lesson6 shader by accident, whoops.
This commit is contained in:
2025-06-15 22:12:17 +10:00
parent 84e0800479
commit 75e67ba630
2 changed files with 49 additions and 23 deletions

View File

@@ -15,28 +15,54 @@ function (add_lesson target)
$<$<C_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>) $<$<C_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>)
target_link_libraries(${target} SDL3::SDL3) target_link_libraries(${target} SDL3::SDL3)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows") 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
$<TARGET_FILE:SDL3::SDL3> $<TARGET_FILE_DIR:${target}>) $<TARGET_FILE:SDL3::SDL3> $<TARGET_FILE_DIR:${target}>)
endif() endif()
target_sources(${target} PRIVATE ${arg_SOURCES}) 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
"$<TARGET_FILE_DIR:${target}>/Data/Shaders")
endif()
foreach (shader IN LISTS arg_SHADERS) foreach (shader IN LISTS arg_SHADERS)
if (shader MATCHES "\\.metal$") if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(path "${CMAKE_SOURCE_DIR}/src/shaders/${shader}") # 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() 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"
"$<TARGET_FILE_DIR:${target}>/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"
"$<TARGET_FILE_DIR:${target}>/Data/Shaders")
endif() endif()
set_source_files_properties(${path} PROPERTIES
HEADER_FILE_ONLY ON
MACOSX_PACKAGE_LOCATION "Resources/Data/Shaders")
target_sources(${target} PRIVATE "${path}")
endforeach() endforeach()
foreach (resource IN LISTS arg_DATA) foreach (file IN LISTS arg_DATA)
set(path "${CMAKE_SOURCE_DIR}/data/${resource}") set(path "${CMAKE_SOURCE_DIR}/data/${file}")
set_source_files_properties(${path} PROPERTIES if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
MACOSX_PACKAGE_LOCATION "Resources/Data") # Add data file to bundle resources
target_sources(${target} PRIVATE "${path}") 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}" "$<TARGET_FILE_DIR:${target}>/Data")
endif()
unset(path)
endforeach() endforeach()
unset(path)
endfunction() endfunction()

View File

@@ -1,12 +1,12 @@
include(AddLesson) include(AddLesson)
add_lesson(lesson01 SOURCES lesson1.c) add_lesson(lesson01 SOURCES lesson1.c)
add_lesson(lesson02 SOURCES lesson2.c SHADERS lesson2.metallib) add_lesson(lesson02 SOURCES lesson2.c SHADERS lesson2)
add_lesson(lesson03 SOURCES lesson3.c SHADERS lesson3.metallib) add_lesson(lesson03 SOURCES lesson3.c SHADERS lesson3)
add_lesson(lesson04 SOURCES lesson4.c SHADERS lesson3.metallib) add_lesson(lesson04 SOURCES lesson4.c SHADERS lesson3)
add_lesson(lesson05 SOURCES lesson5.c SHADERS lesson3.metallib) add_lesson(lesson05 SOURCES lesson5.c SHADERS lesson3)
add_lesson(lesson06 SOURCES lesson6.c SHADERS lesson6.metallib DATA NeHe.bmp) add_lesson(lesson06 SOURCES lesson6.c SHADERS lesson6 DATA NeHe.bmp)
add_lesson(lesson07 SOURCES lesson7.c SHADERS lesson6.metallib lesson7.metallib DATA Crate.bmp) add_lesson(lesson07 SOURCES lesson7.c SHADERS lesson6 lesson7 DATA Crate.bmp)
add_lesson(lesson08 SOURCES lesson8.c SHADERS lesson7.metallib lesson8.metallib DATA Glass.bmp) add_lesson(lesson08 SOURCES lesson8.c SHADERS lesson7 lesson8 DATA Glass.bmp)
add_lesson(lesson09 SOURCES lesson9.c SHADERS lesson6.metallib lesson9.metallib DATA Star.bmp) add_lesson(lesson09 SOURCES lesson9.c SHADERS lesson9 DATA Star.bmp)
add_lesson(lesson10 SOURCES lesson10.c SHADERS lesson6.metallib DATA Mud.bmp World.txt) add_lesson(lesson10 SOURCES lesson10.c SHADERS lesson6 DATA Mud.bmp World.txt)