# Copyright (c) 2026 Dominic Masters # # This software is released under the MIT License. # https://opensource.org/licenses/MIT # dusk_embed_js(TARGET JS_FILE [NAME identifier]) # # Converts a JS file into a C string header in DUSK_GENERATED_HEADERS_DIR. # The generated header defines: # static const char [] = "..."; # static const size_t _SIZE = sizeof() - 1; # # NAME defaults to the uppercase stem + "_JS" (e.g. scene.js -> SCENE_JS). function(dusk_embed_js TARGET JS_FILE) cmake_parse_arguments(ARG "" "NAME" "" ${ARGN}) get_filename_component(JS_ABS "${JS_FILE}" ABSOLUTE) get_filename_component(JS_STEM "${JS_FILE}" NAME_WE) set(OUTPUT_HEADER "${DUSK_GENERATED_HEADERS_DIR}/${JS_STEM}_js.h") set(NAME_ARG "") if(ARG_NAME) set(NAME_ARG "--name" "${ARG_NAME}") endif() add_custom_command( OUTPUT "${OUTPUT_HEADER}" COMMAND ${Python3_EXECUTABLE} -m tools.js2c --input "${JS_ABS}" --output "${OUTPUT_HEADER}" ${NAME_ARG} WORKING_DIRECTORY "${DUSK_ROOT_DIR}" DEPENDS "${JS_ABS}" COMMENT "js2c: ${JS_STEM}.js -> ${JS_STEM}_js.h" VERBATIM ) file(RELATIVE_PATH JS_REL "${DUSK_ROOT_DIR}" "${JS_ABS}") string(MAKE_C_IDENTIFIER "dusk_js2c_${JS_REL}" JS_TARGET) add_custom_target(${JS_TARGET} DEPENDS "${OUTPUT_HEADER}") add_dependencies(${TARGET} ${JS_TARGET}) endfunction()