mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-19 05:45:05 +01:00
cmake: Build test_bitcoin
executable
This commit is contained in:
parent
b27bf9700d
commit
959370bd76
@ -68,6 +68,8 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/module)
|
||||
option(BUILD_DAEMON "Build bitcoind executable." ON)
|
||||
option(BUILD_CLI "Build bitcoin-cli executable." ON)
|
||||
|
||||
option(BUILD_TESTS "Build test_bitcoin executable." ON)
|
||||
|
||||
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
|
||||
|
||||
set(configure_warnings)
|
||||
@ -194,7 +196,7 @@ target_link_libraries(core_interface INTERFACE
|
||||
include(AddBoostIfNeeded)
|
||||
add_boost_if_needed()
|
||||
|
||||
if(BUILD_DAEMON OR BUILD_CLI)
|
||||
if(BUILD_DAEMON OR BUILD_CLI OR BUILD_TESTS)
|
||||
find_package(Libevent 2.1.8 MODULE REQUIRED)
|
||||
endif()
|
||||
|
||||
@ -230,6 +232,8 @@ message("=================")
|
||||
message("Executables:")
|
||||
message(" bitcoind ............................ ${BUILD_DAEMON}")
|
||||
message(" bitcoin-cli ......................... ${BUILD_CLI}")
|
||||
message("Tests:")
|
||||
message(" test_bitcoin ........................ ${BUILD_TESTS}")
|
||||
message("")
|
||||
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
||||
include(FlagsSummary)
|
||||
|
@ -64,4 +64,15 @@ function(add_boost_if_needed)
|
||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
||||
endif()
|
||||
|
||||
if(BUILD_TESTS)
|
||||
# Some package managers, such as vcpkg, vendor Boost.Test separately
|
||||
# from the rest of the headers, so we have to check for it individually.
|
||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DBOOST_TEST_NO_MAIN)
|
||||
include(CheckIncludeFileCXX)
|
||||
check_include_file_cxx(boost/test/included/unit_test.hpp HAVE_BOOST_INCLUDED_UNIT_TEST_H)
|
||||
if(NOT HAVE_BOOST_INCLUDED_UNIT_TEST_H)
|
||||
message(FATAL_ERROR "Building test_bitcoin executable requested but boost/test/included/unit_test.hpp header not available.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
21
cmake/module/GenerateHeaders.cmake
Normal file
21
cmake/module/GenerateHeaders.cmake
Normal file
@ -0,0 +1,21 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
function(generate_header_from_json json_source_relpath)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${json_source_relpath}.h
|
||||
COMMAND ${CMAKE_COMMAND} -DJSON_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${json_source_relpath} -DHEADER_PATH=${CMAKE_CURRENT_BINARY_DIR}/${json_source_relpath}.h -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${json_source_relpath} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake
|
||||
VERBATIM
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(generate_header_from_raw raw_source_relpath)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${raw_source_relpath}.h
|
||||
COMMAND ${CMAKE_COMMAND} -DRAW_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${raw_source_relpath} -DHEADER_PATH=${CMAKE_CURRENT_BINARY_DIR}/${raw_source_relpath}.h -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${raw_source_relpath} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake
|
||||
VERBATIM
|
||||
)
|
||||
endfunction()
|
24
cmake/script/GenerateHeaderFromJson.cmake
Normal file
24
cmake/script/GenerateHeaderFromJson.cmake
Normal file
@ -0,0 +1,24 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
file(READ ${JSON_SOURCE_PATH} hex_content HEX)
|
||||
string(REGEX MATCHALL "([A-Za-z0-9][A-Za-z0-9])" bytes "${hex_content}")
|
||||
|
||||
file(WRITE ${HEADER_PATH} "#include <string>\n")
|
||||
file(APPEND ${HEADER_PATH} "namespace json_tests{\n")
|
||||
get_filename_component(json_source_basename ${JSON_SOURCE_PATH} NAME_WE)
|
||||
file(APPEND ${HEADER_PATH} "static const std::string ${json_source_basename}{\n")
|
||||
|
||||
set(i 0)
|
||||
foreach(byte ${bytes})
|
||||
math(EXPR i "${i} + 1")
|
||||
math(EXPR remainder "${i} % 8")
|
||||
if(remainder EQUAL 0)
|
||||
file(APPEND ${HEADER_PATH} "0x${byte},\n")
|
||||
else()
|
||||
file(APPEND ${HEADER_PATH} "0x${byte}, ")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
file(APPEND ${HEADER_PATH} "\n};};")
|
22
cmake/script/GenerateHeaderFromRaw.cmake
Normal file
22
cmake/script/GenerateHeaderFromRaw.cmake
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
file(READ ${RAW_SOURCE_PATH} hex_content HEX)
|
||||
string(REGEX MATCHALL "([A-Za-z0-9][A-Za-z0-9])" bytes "${hex_content}")
|
||||
|
||||
get_filename_component(raw_source_basename ${RAW_SOURCE_PATH} NAME_WE)
|
||||
file(WRITE ${HEADER_PATH} "static unsigned const char ${raw_source_basename}_raw[] = {\n")
|
||||
|
||||
set(i 0)
|
||||
foreach(byte ${bytes})
|
||||
math(EXPR i "${i} + 1")
|
||||
math(EXPR remainder "${i} % 8")
|
||||
if(remainder EQUAL 0)
|
||||
file(APPEND ${HEADER_PATH} "0x${byte},\n")
|
||||
else()
|
||||
file(APPEND ${HEADER_PATH} "0x${byte}, ")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
file(APPEND ${HEADER_PATH} "\n};")
|
@ -286,3 +286,9 @@ if(BUILD_CLI)
|
||||
$<TARGET_NAME_IF_EXISTS:libevent::libevent>
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
add_subdirectory(test/util)
|
||||
if(BUILD_TESTS)
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
155
src/test/CMakeLists.txt
Normal file
155
src/test/CMakeLists.txt
Normal file
@ -0,0 +1,155 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
include(GenerateHeaders)
|
||||
generate_header_from_json(data/base58_encode_decode.json)
|
||||
generate_header_from_json(data/bip341_wallet_vectors.json)
|
||||
generate_header_from_json(data/blockfilters.json)
|
||||
generate_header_from_json(data/key_io_invalid.json)
|
||||
generate_header_from_json(data/key_io_valid.json)
|
||||
generate_header_from_json(data/script_tests.json)
|
||||
generate_header_from_json(data/sighash.json)
|
||||
generate_header_from_json(data/tx_invalid.json)
|
||||
generate_header_from_json(data/tx_valid.json)
|
||||
generate_header_from_raw(data/asmap.raw)
|
||||
|
||||
# Do not use generator expressions in test sources because the
|
||||
# SOURCES property is processed to gather test suite macros.
|
||||
add_executable(test_bitcoin
|
||||
main.cpp
|
||||
$<TARGET_OBJECTS:bitcoin_consensus>
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/asmap.raw.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/base58_encode_decode.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/bip341_wallet_vectors.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/blockfilters.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/key_io_invalid.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/key_io_valid.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/script_tests.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/sighash.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/tx_invalid.json.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/data/tx_valid.json.h
|
||||
addrman_tests.cpp
|
||||
allocator_tests.cpp
|
||||
amount_tests.cpp
|
||||
argsman_tests.cpp
|
||||
arith_uint256_tests.cpp
|
||||
banman_tests.cpp
|
||||
base32_tests.cpp
|
||||
base58_tests.cpp
|
||||
base64_tests.cpp
|
||||
bech32_tests.cpp
|
||||
bip32_tests.cpp
|
||||
bip324_tests.cpp
|
||||
blockchain_tests.cpp
|
||||
blockencodings_tests.cpp
|
||||
blockfilter_index_tests.cpp
|
||||
blockfilter_tests.cpp
|
||||
blockmanager_tests.cpp
|
||||
bloom_tests.cpp
|
||||
bswap_tests.cpp
|
||||
checkqueue_tests.cpp
|
||||
cluster_linearize_tests.cpp
|
||||
coins_tests.cpp
|
||||
coinscachepair_tests.cpp
|
||||
coinstatsindex_tests.cpp
|
||||
common_url_tests.cpp
|
||||
compilerbug_tests.cpp
|
||||
compress_tests.cpp
|
||||
crypto_tests.cpp
|
||||
cuckoocache_tests.cpp
|
||||
dbwrapper_tests.cpp
|
||||
denialofservice_tests.cpp
|
||||
descriptor_tests.cpp
|
||||
disconnected_transactions.cpp
|
||||
feefrac_tests.cpp
|
||||
flatfile_tests.cpp
|
||||
fs_tests.cpp
|
||||
getarg_tests.cpp
|
||||
hash_tests.cpp
|
||||
headers_sync_chainwork_tests.cpp
|
||||
httpserver_tests.cpp
|
||||
i2p_tests.cpp
|
||||
interfaces_tests.cpp
|
||||
key_io_tests.cpp
|
||||
key_tests.cpp
|
||||
logging_tests.cpp
|
||||
mempool_tests.cpp
|
||||
merkle_tests.cpp
|
||||
merkleblock_tests.cpp
|
||||
miner_tests.cpp
|
||||
miniminer_tests.cpp
|
||||
miniscript_tests.cpp
|
||||
minisketch_tests.cpp
|
||||
multisig_tests.cpp
|
||||
net_peer_connection_tests.cpp
|
||||
net_peer_eviction_tests.cpp
|
||||
net_tests.cpp
|
||||
netbase_tests.cpp
|
||||
node_warnings_tests.cpp
|
||||
orphanage_tests.cpp
|
||||
peerman_tests.cpp
|
||||
pmt_tests.cpp
|
||||
policy_fee_tests.cpp
|
||||
policyestimator_tests.cpp
|
||||
pool_tests.cpp
|
||||
pow_tests.cpp
|
||||
prevector_tests.cpp
|
||||
raii_event_tests.cpp
|
||||
random_tests.cpp
|
||||
rbf_tests.cpp
|
||||
rest_tests.cpp
|
||||
result_tests.cpp
|
||||
reverselock_tests.cpp
|
||||
rpc_tests.cpp
|
||||
sanity_tests.cpp
|
||||
scheduler_tests.cpp
|
||||
script_p2sh_tests.cpp
|
||||
script_parse_tests.cpp
|
||||
script_segwit_tests.cpp
|
||||
script_standard_tests.cpp
|
||||
script_tests.cpp
|
||||
scriptnum_tests.cpp
|
||||
serfloat_tests.cpp
|
||||
serialize_tests.cpp
|
||||
settings_tests.cpp
|
||||
sighash_tests.cpp
|
||||
sigopcount_tests.cpp
|
||||
skiplist_tests.cpp
|
||||
sock_tests.cpp
|
||||
span_tests.cpp
|
||||
streams_tests.cpp
|
||||
sync_tests.cpp
|
||||
system_tests.cpp
|
||||
timeoffsets_tests.cpp
|
||||
torcontrol_tests.cpp
|
||||
transaction_tests.cpp
|
||||
translation_tests.cpp
|
||||
txindex_tests.cpp
|
||||
txpackage_tests.cpp
|
||||
txreconciliation_tests.cpp
|
||||
txrequest_tests.cpp
|
||||
txvalidation_tests.cpp
|
||||
txvalidationcache_tests.cpp
|
||||
uint256_tests.cpp
|
||||
util_tests.cpp
|
||||
util_threadnames_tests.cpp
|
||||
validation_block_tests.cpp
|
||||
validation_chainstate_tests.cpp
|
||||
validation_chainstatemanager_tests.cpp
|
||||
validation_flush_tests.cpp
|
||||
validation_tests.cpp
|
||||
validationinterface_tests.cpp
|
||||
versionbits_tests.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(test_bitcoin
|
||||
core_interface
|
||||
test_util
|
||||
bitcoin_cli
|
||||
bitcoin_node
|
||||
minisketch
|
||||
secp256k1
|
||||
Boost::headers
|
||||
$<TARGET_NAME_IF_EXISTS:libevent::libevent>
|
||||
)
|
28
src/test/util/CMakeLists.txt
Normal file
28
src/test/util/CMakeLists.txt
Normal file
@ -0,0 +1,28 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
add_library(test_util STATIC EXCLUDE_FROM_ALL
|
||||
blockfilter.cpp
|
||||
coins.cpp
|
||||
index.cpp
|
||||
json.cpp
|
||||
logging.cpp
|
||||
mining.cpp
|
||||
net.cpp
|
||||
random.cpp
|
||||
script.cpp
|
||||
setup_common.cpp
|
||||
str.cpp
|
||||
transaction_utils.cpp
|
||||
txmempool.cpp
|
||||
validation.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(test_util
|
||||
PRIVATE
|
||||
core_interface
|
||||
Boost::headers
|
||||
PUBLIC
|
||||
univalue
|
||||
)
|
Loading…
Reference in New Issue
Block a user