Techt3o's picture
4f12b484f180574c6eb9e28ac739e76d44c165853db056d7b668b65be58331d0
739258a verified
raw
history blame
1.72 kB
# Creates C resources file from specified files
# Based on http://stackoverflow.com/a/27206982
function(embed_binary_files_now output binary_files)
# Create empty output file
file(WRITE ${output} "")
# Iterate through input files
foreach(bin ${binary_files})
# Get short filename
string(REGEX MATCH "([^/]+)$" filename ${bin})
# Replace filename spaces & extension separator for C compatibility
string(REGEX REPLACE "\\.| " "_" filename ${filename})
# Read hex data from file
file(READ ${bin} filedata HEX)
# Convert hex data for C compatibility
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata})
# Append data to output file
file(APPEND ${output} "extern const unsigned char ${filename}[] = {${filedata}};\nextern const unsigned ${filename}_size = sizeof(${filename});\n")
endforeach()
endfunction()
# Sets up rule for embedding files when they are newer than the output file (or it doesn't exist yet)
function(embed_binary_files_rule output binary_files)
add_custom_command(
OUTPUT ${output}
DEPENDS ${binary_files}
COMMAND
${CMAKE_COMMAND} -DINPUT_BINARY_FILES=${binary_files}
-DOUTPUT_SRC_FILE=${output}
-P ${PROJECT_SOURCE_DIR}/cmake/EmbedBinaryFiles.cmake
COMMENT "Embedding ${binary_files} into ${output}"
)
endfunction()
if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)
# Running in script mode as part of build-time procedure to actually to the embedding
embed_binary_files_now(${OUTPUT_SRC_FILE} ${INPUT_BINARY_FILES} )
endif()