summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-01-28 09:15:56 +0100
committerskal <pascal.massimino@gmail.com>2026-01-28 09:15:56 +0100
commitf804dcb9740540b3735628ebf8c006235cc56fca (patch)
tree69b4f87a47760ccc1eecd43d6c62bf9a611bfca1 /CMakeLists.txt
parent3e9e69a6cd9212b5cfd956c0a36b9dc07ab88cf7 (diff)
test(assets): Add functional tests for asset management system
This commit makes the asset packer fully functional and adds an end-to-end test suite. - Updated asset_packer.cc to read file contents and embed them as hex arrays. - Added actual asset files (null.bin, test_asset.txt) for testing. - Implemented src/tests/test_assets.cc to verify data integrity at runtime. - Refactored CMakeLists.txt to handle generated file dependencies correctly.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt160
1 files changed, 71 insertions, 89 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1d06033..d460131 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,33 @@ else()
list(APPEND DEMO_LIBS pthread m dl)
endif()
+option(DEMO_BUILD_TOOLS "Build tools" OFF)
+
+# Asset Packing Tool (needed during build if any assets exist)
+if(DEMO_BUILD_TOOLS OR NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc)
+ add_executable(asset_packer
+ tools/asset_packer.cc
+ )
+endif()
+
+# Configure asset generation
+set(ASSETS_TXT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/assets.txt)
+set(GENERATED_ASSETS_H ${CMAKE_CURRENT_BINARY_DIR}/src/assets.h)
+set(GENERATED_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc)
+
+add_custom_command(
+ OUTPUT ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src
+ COMMAND asset_packer ${ASSETS_TXT_PATH} ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
+ DEPENDS asset_packer ${ASSETS_TXT_PATH}
+ COMMENT "Generating assets.h and assets_data.cc"
+)
+
+add_custom_target(generate_assets ALL
+ DEPENDS ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
+)
+
+# Main Demo Target
add_executable(demo64k
src/main.cc
src/platform.cc
@@ -67,9 +94,12 @@ add_executable(demo64k
src/audio/window.cc
src/audio/synth.cc
third_party/glfw3webgpu/glfw3webgpu.c
+ ${GENERATED_ASSETS_DATA_CC}
)
+add_dependencies(demo64k generate_assets)
target_link_libraries(demo64k PRIVATE ${DEMO_LIBS})
+target_include_directories(demo64k PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
if (DEMO_SIZE_OPT)
if (MSVC)
@@ -84,6 +114,7 @@ if (DEMO_SIZE_OPT)
endif()
endif()
+# Tests
option(DEMO_BUILD_TESTS "Build tests" OFF)
enable_testing()
@@ -104,104 +135,55 @@ if(DEMO_BUILD_TESTS)
target_include_directories(test_synth PRIVATE src)
add_test(NAME SynthEngineTest COMMAND test_synth)
- add_executable(test_spectool
-
- src/tests/test_spectool.cc
-
- src/audio/audio.cc
-
- src/audio/window.cc
-
- src/audio/fdct.cc
-
- src/audio/synth.cc
-
- src/audio/idct.cc
-
- third_party/glfw3webgpu/glfw3webgpu.c
-
- )
-
- target_include_directories(test_spectool PRIVATE
-
- src
-
- third_party
-
- ${WGPU_INCLUDE_DIR}
-
- third_party/glfw3webgpu
-
- )
+ add_executable(test_spectool
+ src/tests/test_spectool.cc
+ src/audio/audio.cc
+ src/audio/window.cc
+ src/audio/fdct.cc
+ src/audio/synth.cc
+ src/audio/idct.cc
+ third_party/glfw3webgpu/glfw3webgpu.c
+ )
+ target_include_directories(test_spectool PRIVATE
+ src
+ third_party
+ ${WGPU_INCLUDE_DIR}
+ third_party/glfw3webgpu
+ )
target_link_libraries(test_spectool PRIVATE ${DEMO_LIBS})
add_test(NAME SpectoolEndToEndTest COMMAND test_spectool)
-endif()
-option(DEMO_BUILD_TOOLS "Build tools" OFF)
+ add_executable(test_assets
+ src/tests/test_assets.cc
+ ${GENERATED_ASSETS_DATA_CC}
+ )
+ target_include_directories(test_assets PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src src)
+ add_dependencies(test_assets generate_assets)
+ add_test(NAME AssetManagerTest COMMAND test_assets)
+endif()
+# Tools
if(DEMO_BUILD_TOOLS)
- add_executable(spectool
- tools/spectool.cc
- src/platform.cc
- src/audio/audio.cc
- src/audio/fdct.cc
- src/audio/idct.cc
- src/audio/window.cc
- src/audio/synth.cc
- third_party/glfw3webgpu/glfw3webgpu.c
- )
- target_include_directories(spectool PRIVATE
- src
- third_party
- ${WGPU_INCLUDE_DIR}
- third_party/glfw3webgpu
- )
+ add_executable(spectool
+ tools/spectool.cc
+ src/platform.cc
+ src/audio/audio.cc
+ src/audio/fdct.cc
+ src/audio/idct.cc
+ src/audio/window.cc
+ src/audio/synth.cc
+ third_party/glfw3webgpu/glfw3webgpu.c
+ )
+ target_include_directories(spectool PRIVATE
+ src
+ third_party
+ ${WGPU_INCLUDE_DIR}
+ third_party/glfw3webgpu
+ )
target_link_libraries(spectool PRIVATE ${DEMO_LIBS})
add_executable(specview
tools/specview.cc
)
target_include_directories(specview PRIVATE src)
-
- add_executable(asset_packer
- tools/asset_packer.cc
- )
endif()
-
-# Configure asset generation
-set(ASSETS_TXT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/assets.txt)
-set(GENERATED_ASSETS_H ${CMAKE_CURRENT_BINARY_DIR}/src/assets.h)
-set(GENERATED_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc)
-
-add_custom_command(
- OUTPUT ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src
- COMMAND asset_packer ${ASSETS_TXT_PATH} ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
- DEPENDS tools/asset_packer.cc ${ASSETS_TXT_PATH}
- COMMENT "Generating assets.h and assets_data.cc"
-)
-
-add_custom_target(generate_assets ALL
- DEPENDS ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC}
-)
-
-add_executable(demo64k
- src/main.cc
- src/platform.cc
- src/gpu/gpu.cc
- src/audio/audio.cc
- src/audio/fdct.cc
- src/audio/idct.cc
- src/audio/window.cc
- src/audio/synth.cc
- third_party/glfw3webgpu/glfw3webgpu.c
- ${GENERATED_ASSETS_DATA_CC}
-)
-
-# Ensure demo64k depends on the generated assets
-add_dependencies(demo64k generate_assets)
-
-target_link_libraries(demo64k PRIVATE ${DEMO_LIBS})
-
-# Include generated assets header for compilation
-target_include_directories(demo64k PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) \ No newline at end of file