mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-30 04:32:21 +02: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_DAEMON "Build bitcoind executable." ON)
|
||||||
option(BUILD_CLI "Build bitcoin-cli 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)
|
option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
|
||||||
|
|
||||||
set(configure_warnings)
|
set(configure_warnings)
|
||||||
@ -194,7 +196,7 @@ target_link_libraries(core_interface INTERFACE
|
|||||||
include(AddBoostIfNeeded)
|
include(AddBoostIfNeeded)
|
||||||
add_boost_if_needed()
|
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)
|
find_package(Libevent 2.1.8 MODULE REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -230,6 +232,8 @@ message("=================")
|
|||||||
message("Executables:")
|
message("Executables:")
|
||||||
message(" bitcoind ............................ ${BUILD_DAEMON}")
|
message(" bitcoind ............................ ${BUILD_DAEMON}")
|
||||||
message(" bitcoin-cli ......................... ${BUILD_CLI}")
|
message(" bitcoin-cli ......................... ${BUILD_CLI}")
|
||||||
|
message("Tests:")
|
||||||
|
message(" test_bitcoin ........................ ${BUILD_TESTS}")
|
||||||
message("")
|
message("")
|
||||||
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}")
|
||||||
include(FlagsSummary)
|
include(FlagsSummary)
|
||||||
|
@ -64,4 +64,15 @@ function(add_boost_if_needed)
|
|||||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
set(CMAKE_REQUIRED_DEFINITIONS)
|
||||||
endif()
|
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()
|
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>
|
$<TARGET_NAME_IF_EXISTS:libevent::libevent>
|
||||||
)
|
)
|
||||||
endif()
|
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…
x
Reference in New Issue
Block a user