|
|
@ -6,31 +6,31 @@ include(CMakeParseArguments) |
|
|
|
# VARIABLE - The name of the CMake variable holding the string. |
|
|
|
# AT_COLUMN - The column position at which string will be wrapped. |
|
|
|
function(WRAP_STRING) |
|
|
|
set(oneValueArgs VARIABLE AT_COLUMN) |
|
|
|
cmake_parse_arguments(WRAP_STRING "${options}" "${oneValueArgs}" "" ${ARGN}) |
|
|
|
set(oneValueArgs VARIABLE AT_COLUMN) |
|
|
|
cmake_parse_arguments(WRAP_STRING "${options}" "${oneValueArgs}" "" ${ARGN}) |
|
|
|
|
|
|
|
string(LENGTH ${${WRAP_STRING_VARIABLE}} stringLength) |
|
|
|
math(EXPR offset "0") |
|
|
|
string(LENGTH ${${WRAP_STRING_VARIABLE}} stringLength) |
|
|
|
math(EXPR offset "0") |
|
|
|
|
|
|
|
while(stringLength GREATER 0) |
|
|
|
while(stringLength GREATER 0) |
|
|
|
|
|
|
|
if(stringLength GREATER ${WRAP_STRING_AT_COLUMN}) |
|
|
|
math(EXPR length "${WRAP_STRING_AT_COLUMN}") |
|
|
|
else() |
|
|
|
math(EXPR length "${stringLength}") |
|
|
|
endif() |
|
|
|
if(stringLength GREATER ${WRAP_STRING_AT_COLUMN}) |
|
|
|
math(EXPR length "${WRAP_STRING_AT_COLUMN}") |
|
|
|
else() |
|
|
|
math(EXPR length "${stringLength}") |
|
|
|
endif() |
|
|
|
|
|
|
|
string(SUBSTRING ${${WRAP_STRING_VARIABLE}} ${offset} ${length} line) |
|
|
|
set(lines "${lines}\n${line}") |
|
|
|
string(SUBSTRING ${${WRAP_STRING_VARIABLE}} ${offset} ${length} line) |
|
|
|
set(lines "${lines}\n${line}") |
|
|
|
|
|
|
|
math(EXPR stringLength "${stringLength} - ${length}") |
|
|
|
math(EXPR offset "${offset} + ${length}") |
|
|
|
endwhile() |
|
|
|
math(EXPR stringLength "${stringLength} - ${length}") |
|
|
|
math(EXPR offset "${offset} + ${length}") |
|
|
|
endwhile() |
|
|
|
|
|
|
|
set(${WRAP_STRING_VARIABLE} "${lines}" PARENT_SCOPE) |
|
|
|
set(${WRAP_STRING_VARIABLE} "${lines}" PARENT_SCOPE) |
|
|
|
endfunction() |
|
|
|
|
|
|
|
# Function to embed contents of a file as byte array in C/C++ header file(.h). The header file |
|
|
|
# Script to embed contents of a file as byte array in C/C++ header file(.h). The header file |
|
|
|
# will contain a byte array and integer variable holding the size of the array. |
|
|
|
# Parameters |
|
|
|
# SOURCE_FILE - The path of source file whose contents will be embedded in the header file. |
|
|
@ -42,45 +42,41 @@ endfunction() |
|
|
|
# useful if the source file is a text file and we want to use the file contents |
|
|
|
# as string. But the size variable holds size of the byte array without this |
|
|
|
# null byte. |
|
|
|
# Usage: |
|
|
|
# bin2h(SOURCE_FILE "Logo.png" HEADER_FILE "Logo.h" VARIABLE_NAME "LOGO_PNG") |
|
|
|
function(BIN2H) |
|
|
|
set(options APPEND NULL_TERMINATE) |
|
|
|
set(oneValueArgs SOURCE_FILE VARIABLE_NAME HEADER_FILE) |
|
|
|
cmake_parse_arguments(BIN2H "${options}" "${oneValueArgs}" "" ${ARGN}) |
|
|
|
set(options APPEND NULL_TERMINATE) |
|
|
|
set(oneValueArgs SOURCE_FILE VARIABLE_NAME HEADER_FILE) |
|
|
|
# cmake_parse_arguments(BIN2H "${options}" "${oneValueArgs}" "" ${ARGN}) |
|
|
|
|
|
|
|
# reads source file contents as hex string |
|
|
|
file(READ ${BIN2H_SOURCE_FILE} hexString HEX) |
|
|
|
string(LENGTH ${hexString} hexStringLength) |
|
|
|
# reads source file contents as hex string |
|
|
|
file(READ ${BIN2H_SOURCE_FILE} hexString HEX) |
|
|
|
string(LENGTH ${hexString} hexStringLength) |
|
|
|
|
|
|
|
# appends null byte if asked |
|
|
|
if(BIN2H_NULL_TERMINATE) |
|
|
|
set(hexString "${hexString}00") |
|
|
|
endif() |
|
|
|
# appends null byte if asked |
|
|
|
if(BIN2H_NULL_TERMINATE) |
|
|
|
set(hexString "${hexString}00") |
|
|
|
endif() |
|
|
|
|
|
|
|
# wraps the hex string into multiple lines at column 32(i.e. 16 bytes per line) |
|
|
|
wrap_string(VARIABLE hexString AT_COLUMN 32) |
|
|
|
math(EXPR arraySize "${hexStringLength} / 2") |
|
|
|
# wraps the hex string into multiple lines at column 32(i.e. 16 bytes per line) |
|
|
|
wrap_string(VARIABLE hexString AT_COLUMN 32) |
|
|
|
math(EXPR arraySize "${hexStringLength} / 2") |
|
|
|
|
|
|
|
# adds '0x' prefix and comma suffix before and after every byte respectively |
|
|
|
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " arrayValues ${hexString}) |
|
|
|
# removes trailing comma |
|
|
|
string(REGEX REPLACE ", $" "" arrayValues ${arrayValues}) |
|
|
|
# adds '0x' prefix and comma suffix before and after every byte respectively |
|
|
|
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " arrayValues ${hexString}) |
|
|
|
# removes trailing comma |
|
|
|
string(REGEX REPLACE ", $" "" arrayValues ${arrayValues}) |
|
|
|
|
|
|
|
# converts the variable name into proper C identifier |
|
|
|
IF (${CMAKE_VERSION} GREATER 2.8.10) # fix for legacy cmake |
|
|
|
string(MAKE_C_IDENTIFIER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME) |
|
|
|
ENDIF() |
|
|
|
string(TOUPPER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME) |
|
|
|
# converts the variable name into proper C identifier |
|
|
|
IF (${CMAKE_VERSION} GREATER 2.8.10) # fix for legacy cmake |
|
|
|
string(MAKE_C_IDENTIFIER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME) |
|
|
|
ENDIF() |
|
|
|
string(TOUPPER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME) |
|
|
|
|
|
|
|
# declares byte array and the length variables |
|
|
|
set(arrayDefinition "const unsigned char ${BIN2H_VARIABLE_NAME}[] = { ${arrayValues} };") |
|
|
|
set(arraySizeDefinition "const size_t ${BIN2H_VARIABLE_NAME}_SIZE = ${arraySize};") |
|
|
|
# declares byte array and the length variables |
|
|
|
set(arrayDefinition "const unsigned char ${BIN2H_VARIABLE_NAME}[] = { ${arrayValues} };") |
|
|
|
set(arraySizeDefinition "const size_t ${BIN2H_VARIABLE_NAME}_SIZE = ${arraySize};") |
|
|
|
|
|
|
|
set(declarations "${arrayDefinition}\n\n${arraySizeDefinition}\n\n") |
|
|
|
if(BIN2H_APPEND) |
|
|
|
file(APPEND ${BIN2H_HEADER_FILE} "${declarations}") |
|
|
|
else() |
|
|
|
file(WRITE ${BIN2H_HEADER_FILE} "${declarations}") |
|
|
|
endif() |
|
|
|
endfunction() |
|
|
|
set(declarations "${arrayDefinition}\n\n${arraySizeDefinition}\n\n") |
|
|
|
if(BIN2H_APPEND) |
|
|
|
file(APPEND ${BIN2H_HEADER_FILE} "${declarations}") |
|
|
|
else() |
|
|
|
file(WRITE ${BIN2H_HEADER_FILE} "${declarations}") |
|
|
|
endif() |
|
|
|