diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-17 11:32:05 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-17 11:32:05 +0100 |
| commit | 95dd0ff4c000f3752c5c9112d79de3a4bdaa7b25 (patch) | |
| tree | ec6ff52b0bd8de357068f3bb7521ddf0b004c5e2 | |
| parent | bd26bc743933dcd5241fc87d160a893f83644dfb (diff) | |
fix(build): Resolve clean build failure from generated timeline header
When starting from a clean tree (where `src/generated/` does not exist), the build would fail with a "file not found" error for `generated/timeline.h`. This was due to an incorrect dependency graph where `gpu.cc` was compiled before its required header was generated.
This commit fixes the issue by making the dependency explicit:
- Modified `tools/seq_compiler.py` to explicitly generate `timeline.h` alongside `timeline.cc`.
- Updated `cmake/DemoCodegen.cmake` to declare both files as `OUTPUT`s of the timeline compilation step.
- Added a direct dependency from the `gpu` library target to the `generate_timeline` custom target in `cmake/DemoLibraries.cmake`.
- Refactored the generated file paths in `DemoCodegen.cmake` into a single `GENERATED_CODE` variable for improved clarity and future-proofing.
| -rw-r--r-- | cmake/DemoCodegen.cmake | 8 | ||||
| -rw-r--r-- | cmake/DemoLibraries.cmake | 4 | ||||
| -rwxr-xr-x | tools/seq_compiler.py | 24 |
3 files changed, 29 insertions, 7 deletions
diff --git a/cmake/DemoCodegen.cmake b/cmake/DemoCodegen.cmake index 1e0badf..aa20a92 100644 --- a/cmake/DemoCodegen.cmake +++ b/cmake/DemoCodegen.cmake @@ -122,15 +122,17 @@ endfunction() # Timeline compilation set(DEMO_SEQ_PATH ${WORKSPACE_TIMELINE}) set(GENERATED_TIMELINE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/timeline.cc) +set(GENERATED_TIMELINE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/timeline.h) +set(GENERATED_CODE ${GENERATED_TIMELINE_CC} ${GENERATED_TIMELINE_H}) add_custom_command( - OUTPUT ${GENERATED_TIMELINE_CC} + OUTPUT ${GENERATED_CODE} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/generated COMMAND ${SEQ_COMPILER_CMD} ${DEMO_SEQ_PATH} --output ${GENERATED_TIMELINE_CC} DEPENDS ${SEQ_COMPILER_DEPENDS} ${DEMO_SEQ_PATH} src/gpu/demo_effects.h COMMENT "Compiling demo sequence from workspace ${DEMO_WORKSPACE}..." ) -add_custom_target(generate_timeline ALL DEPENDS ${GENERATED_TIMELINE_CC}) +add_custom_target(generate_timeline ALL DEPENDS ${GENERATED_CODE}) # Music compilation set(TRACKER_MUSIC_PATH ${WORKSPACE_MUSIC}) @@ -255,5 +257,5 @@ pack_test_assets(test_assets ${CMAKE_CURRENT_SOURCE_DIR}/workspaces/test/assets. # Mark generated files so CMake always checks if they need rebuilding set_source_files_properties(${GEN_DEMO_H} ${GEN_DEMO_CC} PROPERTIES GENERATED TRUE) set_source_files_properties(${GEN_TEST_H} ${GEN_TEST_CC} PROPERTIES GENERATED TRUE) -set_source_files_properties(${GENERATED_TIMELINE_CC} PROPERTIES GENERATED TRUE) +set_source_files_properties(${GENERATED_CODE} PROPERTIES GENERATED TRUE) set_source_files_properties(${GENERATED_MUSIC_DATA_CC} PROPERTIES GENERATED TRUE) diff --git a/cmake/DemoLibraries.cmake b/cmake/DemoLibraries.cmake index f1891fb..39cd3f4 100644 --- a/cmake/DemoLibraries.cmake +++ b/cmake/DemoLibraries.cmake @@ -21,9 +21,9 @@ target_include_directories(3d PUBLIC ${CORE_INCLUDES}) add_dependencies(3d generate_demo_assets) # GPU effects library -add_library(gpu STATIC ${GPU_SOURCES}) +add_library(gpu STATIC ${GPU_SOURCES} ${GENERATED_TIMELINE_CC}) target_include_directories(gpu PUBLIC ${CORE_INCLUDES}) -add_dependencies(gpu generate_demo_assets) +add_dependencies(gpu generate_demo_assets generate_timeline) # Note: Static libraries do not strictly need to link dependencies, # but if they did, PRIVATE would propagate to the executable. diff --git a/tools/seq_compiler.py b/tools/seq_compiler.py index dec3ab1..18d5a1f 100755 --- a/tools/seq_compiler.py +++ b/tools/seq_compiler.py @@ -710,11 +710,31 @@ void RenderTimeline(WGPUSurface surface, float time, int width, int height, } ''' - # Write output + # Write C++ output with open(args.output, 'w') as f: f.write(all_cpp) - print(f"Generated {len(sequences)} sequence(s) -> {args.output}") + # Write C++ header + header_path = os.path.splitext(args.output)[0] + ".h" + header_content = f'''// Generated by seq_compiler.py +// DO NOT EDIT +#pragma once + +#include "gpu/gpu.h" +#include "gpu/sequence.h" + +void InitializeSequences(const GpuContext& ctx, int width, int height); +Sequence* GetActiveSequence(float time); +void RenderTimeline(WGPUCommandEncoder encoder, float time, int width, int height, + float beat_time, float audio_intensity); +void RenderTimeline(WGPUSurface surface, float time, int width, int height, + float beat_time, float audio_intensity); +float GetDemoDuration(); +''' + with open(header_path, 'w') as f: + f.write(header_content) + + print(f"Generated {len(sequences)} sequence(s) -> {args.output} and {header_path}") if __name__ == '__main__': main() |
