Compile .ds scripts under assets/ to .dsb before packing into dusk.dsk
tools/asset/pack now special-cases .ds files: each one is compiled with duskscriptcc to a temp .dsb (no .map, nothing reads one yet) and that gets packed under the same path with the extension swapped - the raw .ds source never ends up in the archive. Every other asset type is unchanged, packed byte for byte as before. CMake passes --duskscriptcc "$<TARGET_FILE:duskscriptcc>" and adds a DEPENDS on it, but only on the linux/knulli host target where duskscriptcc is actually built (see its own gating in src/CMakeLists.txt) - a cross-compiled console target has no host-built compiler to point at, so for now it can only pack an assets/ with no .ds in it; the packer raises a clear error rather than silently skipping or mis-packing one if it finds one anyway. The manifest's cache-skip check also now folds in duskscriptcc's own mtime, so a compiler rebuild invalidates every .ds's cached result even when none of their own source files changed. Verified by hand: a .ds under assets/scripts/ packs as the matching .dsb (confirmed by unzipping the resulting dusk.dsk), an unrelated rebuild correctly skips re-packing, touching duskscriptcc correctly forces a re-pack, and a syntax error in the .ds fails the build loudly with duskscriptcc's own error message rather than silently succeeding. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
1 parent
d878463ccb
commit
7e932e67a2
2 files changed
+75
-10
No files matched your search
@@ -142,13 +142,30 @@ endif()
|
||||
# asset edit. tools.asset.pack itself decides whether anything actually
|
||||
# changed (see its manifest check) and no-ops quickly when nothing did,
|
||||
# so this stays cheap on a build where assets are untouched.
|
||||
#
|
||||
# A .ds script under assets/ is compiled to .dsb by duskscriptcc as part of
|
||||
# packing, so dusk.dsk only ever carries bytecode. duskscriptcc is a host
|
||||
# tool, only built when target_system is the build host (linux/knulli, see
|
||||
# src/CMakeLists.txt) - a cross-compiled console target has no duskscriptcc
|
||||
# of its own to depend on or pass down, so it can only pack assets with no
|
||||
# .ds in them until something sets up a host-built duskscriptcc for it too.
|
||||
if(DUSK_TARGET_SYSTEM STREQUAL "linux" OR DUSK_TARGET_SYSTEM STREQUAL "knulli")
|
||||
set(DUSK_ASSET_PACK_DUSKSCRIPTCC_ARGS --duskscriptcc "$<TARGET_FILE:duskscriptcc>")
|
||||
set(DUSK_ASSET_PACK_DEPENDS duskscriptcc)
|
||||
else()
|
||||
set(DUSK_ASSET_PACK_DUSKSCRIPTCC_ARGS "")
|
||||
set(DUSK_ASSET_PACK_DEPENDS "")
|
||||
endif()
|
||||
|
||||
add_custom_target(DUSK_ASSETS_BUILT ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${DUSK_ASSETS_DIR}"
|
||||
COMMAND ${Python3_EXECUTABLE} -m tools.asset.pack
|
||||
--input "${DUSK_ASSETS_DIR}"
|
||||
--output "${DUSK_ASSETS_ZIP}"
|
||||
${DUSK_ASSET_PACK_DUSKSCRIPTCC_ARGS}
|
||||
WORKING_DIRECTORY "${DUSK_ROOT_DIR}"
|
||||
BYPRODUCTS "${DUSK_ASSETS_ZIP}"
|
||||
DEPENDS ${DUSK_ASSET_PACK_DEPENDS}
|
||||
COMMENT "Packing assets into dusk.dsk"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user