|
| 1 | +# Copyright (c) 2023-present The Bitcoin Core developers |
| 2 | +# Distributed under the MIT software license, see the accompanying |
| 3 | +# file COPYING or https://opensource.org/license/mit/. |
| 4 | + |
| 5 | +add_subdirectory(util) |
| 6 | + |
| 7 | +add_executable(fuzz |
| 8 | + addition_overflow.cpp |
| 9 | + addrman.cpp |
| 10 | + asmap.cpp |
| 11 | + asmap_direct.cpp |
| 12 | + autofile.cpp |
| 13 | + banman.cpp |
| 14 | + base_encode_decode.cpp |
| 15 | + bech32.cpp |
| 16 | + bip324.cpp |
| 17 | + bitdeque.cpp |
| 18 | + block.cpp |
| 19 | + block_header.cpp |
| 20 | + blockfilter.cpp |
| 21 | + bloom_filter.cpp |
| 22 | + buffered_file.cpp |
| 23 | + chain.cpp |
| 24 | + checkqueue.cpp |
| 25 | + coins_view.cpp |
| 26 | + coinscache_sim.cpp |
| 27 | + connman.cpp |
| 28 | + crypto.cpp |
| 29 | + crypto_aes256.cpp |
| 30 | + crypto_aes256cbc.cpp |
| 31 | + crypto_chacha20.cpp |
| 32 | + crypto_common.cpp |
| 33 | + crypto_diff_fuzz_chacha20.cpp |
| 34 | + crypto_hkdf_hmac_sha256_l32.cpp |
| 35 | + crypto_poly1305.cpp |
| 36 | + cuckoocache.cpp |
| 37 | + decode_tx.cpp |
| 38 | + descriptor_parse.cpp |
| 39 | + deserialize.cpp |
| 40 | + eval_script.cpp |
| 41 | + fee_rate.cpp |
| 42 | + fees.cpp |
| 43 | + flatfile.cpp |
| 44 | + float.cpp |
| 45 | + golomb_rice.cpp |
| 46 | + headerssync.cpp |
| 47 | + hex.cpp |
| 48 | + http_request.cpp |
| 49 | + integer.cpp |
| 50 | + key.cpp |
| 51 | + key_io.cpp |
| 52 | + kitchen_sink.cpp |
| 53 | + load_external_block_file.cpp |
| 54 | + locale.cpp |
| 55 | + merkleblock.cpp |
| 56 | + message.cpp |
| 57 | + miniscript.cpp |
| 58 | + minisketch.cpp |
| 59 | + mini_miner.cpp |
| 60 | + muhash.cpp |
| 61 | + multiplication_overflow.cpp |
| 62 | + net.cpp |
| 63 | + net_permissions.cpp |
| 64 | + netaddress.cpp |
| 65 | + netbase_dns_lookup.cpp |
| 66 | + node_eviction.cpp |
| 67 | + p2p_transport_serialization.cpp |
| 68 | + package_eval.cpp |
| 69 | + parse_hd_keypath.cpp |
| 70 | + parse_numbers.cpp |
| 71 | + parse_script.cpp |
| 72 | + parse_univalue.cpp |
| 73 | + partially_downloaded_block.cpp |
| 74 | + policy_estimator.cpp |
| 75 | + policy_estimator_io.cpp |
| 76 | + poolresource.cpp |
| 77 | + pow.cpp |
| 78 | + prevector.cpp |
| 79 | + primitives_transaction.cpp |
| 80 | + process_message.cpp |
| 81 | + process_messages.cpp |
| 82 | + protocol.cpp |
| 83 | + psbt.cpp |
| 84 | + random.cpp |
| 85 | + rbf.cpp |
| 86 | + rolling_bloom_filter.cpp |
| 87 | + rpc.cpp |
| 88 | + script.cpp |
| 89 | + script_assets_test_minimizer.cpp |
| 90 | + script_descriptor_cache.cpp |
| 91 | + script_flags.cpp |
| 92 | + script_format.cpp |
| 93 | + script_interpreter.cpp |
| 94 | + script_ops.cpp |
| 95 | + script_sigcache.cpp |
| 96 | + script_sign.cpp |
| 97 | + scriptnum_ops.cpp |
| 98 | + secp256k1_ec_seckey_import_export_der.cpp |
| 99 | + secp256k1_ecdsa_signature_parse_der_lax.cpp |
| 100 | + signature_checker.cpp |
| 101 | + signet.cpp |
| 102 | + socks5.cpp |
| 103 | + span.cpp |
| 104 | + spanparsing.cpp |
| 105 | + string.cpp |
| 106 | + strprintf.cpp |
| 107 | + system.cpp |
| 108 | + timedata.cpp |
| 109 | + torcontrol.cpp |
| 110 | + transaction.cpp |
| 111 | + tx_in.cpp |
| 112 | + tx_out.cpp |
| 113 | + tx_pool.cpp |
| 114 | + txorphan.cpp |
| 115 | + txrequest.cpp |
| 116 | + utxo_snapshot.cpp |
| 117 | + utxo_total_supply.cpp |
| 118 | + validation_load_mempool.cpp |
| 119 | + versionbits.cpp |
| 120 | +) |
| 121 | +target_link_libraries(fuzz |
| 122 | + core |
| 123 | + test_fuzz |
| 124 | + bitcoin_cli |
| 125 | + bitcoin_common |
| 126 | + minisketch |
| 127 | + leveldb |
| 128 | + univalue |
| 129 | + secp256k1 |
| 130 | + Boost::headers |
| 131 | + libevent::libevent |
| 132 | +) |
| 133 | + |
| 134 | +if(ENABLE_WALLET) |
| 135 | + target_sources(fuzz |
| 136 | + PRIVATE |
| 137 | + ${CMAKE_SOURCE_DIR}/src/wallet/test/fuzz/coincontrol.cpp |
| 138 | + ${CMAKE_SOURCE_DIR}/src/wallet/test/fuzz/coinselection.cpp |
| 139 | + ${CMAKE_SOURCE_DIR}/src/wallet/test/fuzz/fees.cpp |
| 140 | + ${CMAKE_SOURCE_DIR}/src/wallet/test/fuzz/parse_iso8601.cpp |
| 141 | + $<$<BOOL:${USE_SQLITE}>:${CMAKE_SOURCE_DIR}/src/wallet/test/fuzz/notifications.cpp> |
| 142 | + ) |
| 143 | + target_link_libraries(fuzz bitcoin_wallet) |
| 144 | +endif() |
| 145 | + |
| 146 | +set(builtin_mul_overflow_source " |
| 147 | + bool f(long long x, long long y, long long* p) |
| 148 | + { |
| 149 | + return __builtin_mul_overflow(x, y, p); |
| 150 | + } |
| 151 | + int main() { return 0; } |
| 152 | +") |
| 153 | +include(CheckCXXSourceCompiles) |
| 154 | +check_cxx_source_compiles("${builtin_mul_overflow_source}" HAVE_BUILTIN_MUL_OVERFLOW) |
| 155 | +if(HAVE_BUILTIN_MUL_OVERFLOW) |
| 156 | + target_compile_definitions(fuzz PRIVATE HAVE_BUILTIN_MUL_OVERFLOW) |
| 157 | +else() |
| 158 | + set(CMAKE_REQUIRED_LINK_OPTIONS rtlib=compiler-rt) |
| 159 | + set(CMAKE_REQUIRED_LIBRARIES gcc_s) |
| 160 | + check_cxx_source_compiles("${builtin_mul_overflow_source}" HAVE_BUILTIN_MUL_OVERFLOW_NEEDS_LINK_TO_RT) |
| 161 | + if(HAVE_BUILTIN_MUL_OVERFLOW_NEEDS_LINK_TO_RT) |
| 162 | + target_compile_definitions(fuzz PRIVATE HAVE_BUILTIN_MUL_OVERFLOW) |
| 163 | + target_link_options(fuzz PRIVATE ${CMAKE_REQUIRED_LINK_OPTIONS}) |
| 164 | + target_link_libraries(fuzz PRIVATE ${CMAKE_REQUIRED_LIBRARIES}) |
| 165 | + endif() |
| 166 | + set(CMAKE_REQUIRED_LINK_OPTIONS) |
| 167 | + set(CMAKE_REQUIRED_LIBRARIES) |
| 168 | +endif() |
0 commit comments