if(NOT DEFINED OPEN_LIGHT_WAV OR NOT DEFINED CLOSE_LIGHT_WAV OR NOT DEFINED OUTPUT_HEADER OR NOT DEFINED OUTPUT_SOURCE) message(FATAL_ERROR "EmbedTomAudio.cmake is missing an input or output path") endif() get_filename_component(OUTPUT_DIRECTORY "${OUTPUT_HEADER}" DIRECTORY) file(MAKE_DIRECTORY "${OUTPUT_DIRECTORY}") file(WRITE "${OUTPUT_HEADER}" [=[#pragma once #include #include namespace Game { namespace EmbeddedAudio { extern const uint8_t OpenLightWav[]; extern const size_t OpenLightWavSize; extern const uint8_t CloseLightWav[]; extern const size_t CloseLightWavSize; } } ]=]) file(WRITE "${OUTPUT_SOURCE}" [=[#include "TomAudioData.h" namespace Game { namespace EmbeddedAudio { ]=]) function(append_embedded_wav SYMBOL INPUT_PATH) file(READ "${INPUT_PATH}" WAV_HEX HEX) string(TOLOWER "${WAV_HEX}" WAV_HEX) string(LENGTH "${WAV_HEX}" WAV_HEX_LENGTH) math(EXPR WAV_SIZE "${WAV_HEX_LENGTH} / 2") string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," WAV_BYTES "${WAV_HEX}") set(BYTE_TOKEN "0x[0-9a-f][0-9a-f],") set(LINE_PATTERN "(${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN}${BYTE_TOKEN})") string(REGEX REPLACE "${LINE_PATTERN}" "\\1\n\t" WAV_BYTES "${WAV_BYTES}") file(APPEND "${OUTPUT_SOURCE}" "\tconst uint8_t ${SYMBOL}[] = {\n\t${WAV_BYTES}\n\t};\n") file(APPEND "${OUTPUT_SOURCE}" "\tconst size_t ${SYMBOL}Size = ${WAV_SIZE}u;\n\n") endfunction() append_embedded_wav("OpenLightWav" "${OPEN_LIGHT_WAV}") append_embedded_wav("CloseLightWav" "${CLOSE_LIGHT_WAV}") file(APPEND "${OUTPUT_SOURCE}" [=[} } ]=])