File size: 1,724 Bytes
739258a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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()