cmake: fix non portable code

This commit is contained in:
selsta 2021-04-28 16:13:19 +02:00
parent 0a1ddc2eff
commit 7359d51d56
No known key found for this signature in database
GPG Key ID: 2EA0A99A8B07AE5E
1 changed files with 21 additions and 9 deletions

View File

@ -28,20 +28,32 @@
set(GENERATED_SOURCES "") set(GENERATED_SOURCES "")
set(GENERATOR "${CMAKE_CURRENT_BINARY_DIR}/blocks_generator.cmake")
file(GENERATE OUTPUT ${GENERATOR} CONTENT [=[
file(READ "${INPUT_DAT_FILE}" DATA HEX)
string(REGEX REPLACE "[0-9a-fA-F][0-9a-fA-F]" "0x\\0," DATA "${DATA}")
file(WRITE "${OUTPUT_C_SOURCE}" "
#include <stddef.h>
const unsigned char ${BLOB_NAME}[]={
${DATA}
};
const size_t ${BLOB_NAME}_len = sizeof(${BLOB_NAME});
"
)
]=])
foreach(BLOB_NAME checkpoints testnet_blocks stagenet_blocks) foreach(BLOB_NAME checkpoints testnet_blocks stagenet_blocks)
set(OUTPUT_C_SOURCE "generated_${BLOB_NAME}.c") set(OUTPUT_C_SOURCE "generated_${BLOB_NAME}.c")
list(APPEND GENERATED_SOURCES ${OUTPUT_C_SOURCE}) list(APPEND GENERATED_SOURCES ${OUTPUT_C_SOURCE})
set(INPUT_DAT_FILE "${BLOB_NAME}.dat") set(INPUT_DAT_FILE "${BLOB_NAME}.dat")
add_custom_command( add_custom_command(
OUTPUT ${OUTPUT_C_SOURCE} OUTPUT ${OUTPUT_C_SOURCE}
MAIN_DEPENDENCY ${INPUT_DAT_FILE} MAIN_DEPENDENCY ${INPUT_DAT_FILE}
COMMAND DEPENDS ${GENERATOR}
cd ${CMAKE_CURRENT_BINARY_DIR} && COMMAND ${CMAKE_COMMAND}
echo "'#include\t<stddef.h>'" > ${OUTPUT_C_SOURCE} && "-DINPUT_DAT_FILE=${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_DAT_FILE}"
echo "'const\tunsigned\tchar\t${BLOB_NAME}[]={'" >> ${OUTPUT_C_SOURCE} && "-DBLOB_NAME=${BLOB_NAME}"
od -v -An -tx1 ${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_DAT_FILE} | sed -e "'s/[0-9a-fA-F]\\{1,\\}/0x&,/g'" -e "'$$s/.$$//'" >> ${OUTPUT_C_SOURCE} && "-DOUTPUT_C_SOURCE=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_C_SOURCE}"
echo "'};'" >> ${OUTPUT_C_SOURCE} && "-P${GENERATOR}"
echo "'const\tsize_t\t${BLOB_NAME}_len\t=\tsizeof(${BLOB_NAME});'" >> ${OUTPUT_C_SOURCE}
) )
endforeach() endforeach()