diff --git a/src/bench/CMakeLists.txt b/src/bench/CMakeLists.txt --- a/src/bench/CMakeLists.txt +++ b/src/bench/CMakeLists.txt @@ -2,6 +2,38 @@ project(bitcoin-bench) +set(BENCH_DATA_RAW_FILES + data/block413567.raw +) + +# Process raw files. +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/data") + +find_program(PYTHON python) +foreach(_raw_file ${BENCH_DATA_RAW_FILES}) + string(APPEND + _generated_header_output + "${CMAKE_CURRENT_BINARY_DIR}/${_raw_file}" ".h" + ) + + list(APPEND BENCH_DATA_GENERATED_HEADERS ${_generated_header_output}) + get_filename_component(_test_name ${_raw_file} NAME_WE) + + add_custom_command( + OUTPUT "${_generated_header_output}" + COMMAND "${PYTHON}" + ARGS + "data/convert-raw-to-header.py" + "${_test_name}" + "${_raw_file}" > "${_generated_header_output}" + COMMENT "Transforming raw file ${_raw_file} into header" + MAIN_DEPEDENCY "${_raw_file}" + DEPENDS "data/convert-raw-to-header.py" + VERBATIM + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + ) +endforeach() + add_executable(bitcoin-bench EXCLUDE_FROM_ALL base58.cpp @@ -9,7 +41,7 @@ bench_bitcoin.cpp cashaddr.cpp ccoins_caching.cpp -# checkblock.cpp TODO Fix including bench/data/*.raw files + checkblock.cpp checkqueue.cpp crypto_aes.cpp crypto_hash.cpp @@ -20,6 +52,9 @@ merkle_root.cpp prevector.cpp rollingbloom.cpp + + # Add the generated headers to trigger the conversion command + ${BENCH_DATA_GENERATED_HEADERS} ) target_link_libraries(bitcoin-bench common bitcoinconsensus server) diff --git a/src/bench/data/convert-raw-to-header.py b/src/bench/data/convert-raw-to-header.py new file mode 100755 --- /dev/null +++ b/src/bench/data/convert-raw-to-header.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# Copyright (c) 2019 The Bitcoin developers + +import sys + + +def main(test_name, input_file): + with open(input_file, "rb") as f: + contents = f.read() + + print("static unsigned const char {}[] = {{".format(test_name)) + print(", ".join(map(lambda x: "0x{:02x}".format(ord(x)), contents))) + print("};") + + +if __name__ == "__main__": + if len(sys.argv) != 3: + print("We need additional pylons!") + sys.exit(1) + + main(sys.argv[1], sys.argv[2])