44 lines
1.3 KiB
CMake
44 lines
1.3 KiB
CMake
# 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 <NAME>[] = "...";
|
|
# static const size_t <NAME>_SIZE = sizeof(<NAME>) - 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()
|