2023-08-16 13:00:11 +02:00
cmake_minimum_required ( VERSION 3.5 )
2021-09-03 11:12:22 +02:00
project ( p2pool_tests )
2024-02-10 23:38:22 +01:00
include ( cmake/standard.cmake )
2022-02-16 10:43:04 +01:00
option ( STATIC_LIBS "Use locally built libuv and libzmq static libs" OFF )
2024-02-12 14:48:45 +01:00
option ( WITH_LTO "Use link-time compiler optimization (if linking fails for you, run cmake with -DWITH_LTO=OFF)" ON )
2025-06-20 18:23:26 +02:00
option ( WITH_COVERAGE "Generate code coverage data" OFF )
2025-10-18 12:21:16 +02:00
option ( WITH_INDEXED_HASHES "Save memory used for storing transaction hashes and public keys (a bit slower block verification, use it only if you compile for a very low memory system)" ON )
option ( DEV_DEBUG "[Developer only] Compile a debug build" ON )
2025-06-20 23:30:10 +02:00
if ( DEV_DEBUG )
add_definitions ( -DDEV_DEBUG )
endif ( )
2022-02-16 10:43:04 +01:00
2022-05-09 17:57:31 +02:00
set ( CMAKE_MODULE_PATH ${ CMAKE_MODULE_PATH } "${CMAKE_SOURCE_DIR}/cmake" )
2021-09-05 11:50:56 +02:00
2023-01-26 20:19:57 +01:00
if ( ${ CMAKE_VERSION } VERSION_GREATER "3.5.2" )
2021-09-06 00:39:19 +02:00
set_property ( DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } PROPERTY VS_STARTUP_PROJECT p2pool_tests )
endif ( )
2023-04-22 20:27:26 +02:00
set ( BUILD_GMOCK OFF CACHE BOOL "Builds the googlemock subproject" FORCE )
set ( INSTALL_GTEST OFF CACHE BOOL "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" FORCE )
2021-09-03 11:12:22 +02:00
add_subdirectory ( googletest )
set ( LIBS gtest )
2025-02-18 20:04:11 +01:00
if ( CMAKE_CXX_COMPILER_ID MATCHES MSVC )
2025-02-19 11:48:31 +01:00
include ( cmake/msvc_libs.cmake )
2025-02-18 20:04:11 +01:00
endif ( )
2025-05-29 09:16:03 +02:00
if ( STATIC_LIBS AND WIN32 AND ( CMAKE_CXX_COMPILER_ID MATCHES Clang ) )
set ( LIBS ${ LIBS } "${CMAKE_SOURCE_DIR}/../build/external/src/RandomX/librandomx.a" )
else ( )
add_subdirectory ( ../external/src/RandomX RandomX )
set ( LIBS ${ LIBS } randomx )
endif ( )
2022-03-15 16:56:37 +01:00
add_definitions ( -DWITH_RANDOMX )
2025-05-08 19:25:48 +02:00
add_definitions ( -DWITH_MERGE_MINING_DONATION )
2023-01-08 00:34:38 +01:00
add_definitions ( -DP2POOL_UNIT_TESTS )
2023-03-01 09:20:09 +01:00
add_definitions ( -DP2POOL_SIDECHAIN_EXTRA_1=1 )
2023-01-08 00:34:38 +01:00
2022-05-09 17:57:31 +02:00
include ( cmake/flags.cmake )
2021-09-03 11:12:22 +02:00
set ( HEADERS
)
set ( SOURCES
2022-11-24 21:38:15 +01:00
s r c / b l o c k _ t e m p l a t e _ t e s t s . c p p
2021-09-04 22:32:39 +02:00
s r c / c r y p t o _ t e s t s . c p p
2021-09-04 21:22:28 +02:00
s r c / d i f f i c u l t y _ t y p e _ t e s t s . c p p
2021-09-05 22:28:57 +02:00
s r c / h a s h _ t e s t s . c p p
2021-09-04 21:22:28 +02:00
s r c / k e c c a k _ t e s t s . c p p
2023-10-21 19:00:30 +02:00
s r c / m e r k l e _ t e s t s . c p p
2023-09-16 19:38:16 +02:00
s r c / l o g _ t e s t s . c p p
2021-09-04 21:22:28 +02:00
s r c / m a i n . c p p
2021-09-06 15:49:39 +02:00
s r c / p o o l _ b l o c k _ t e s t s . c p p
2023-10-24 12:23:06 +02:00
s r c / s h a 2 5 6 _ t e s t s . c p p
2022-05-09 11:25:52 +02:00
s r c / u t i l _ t e s t s . c p p
2021-09-04 00:05:37 +02:00
s r c / w a l l e t _ t e s t s . c p p
2023-10-24 12:23:06 +02:00
. . / e x t e r n a l / s r c / c r y p t o / s h a 2 5 6 . c
2021-09-04 00:05:37 +02:00
. . / e x t e r n a l / s r c / c r y p t o n o t e / c r y p t o - o p s - d a t a . c
. . / e x t e r n a l / s r c / c r y p t o n o t e / c r y p t o - o p s . c
2025-10-23 11:40:59 +02:00
. . / e x t e r n a l / s r c / c r y p t o n o t e / f c m p _ p p _ c r y p t o . c p p
2022-12-19 09:58:43 +01:00
. . / e x t e r n a l / s r c / h a r d f o r k s / h a r d f o r k s . c p p
2021-09-06 15:49:39 +02:00
. . / s r c / b l o c k _ c a c h e . c p p
. . / s r c / b l o c k _ t e m p l a t e . c p p
2021-09-04 00:05:37 +02:00
. . / s r c / c r y p t o . c p p
. . / s r c / k e c c a k . c p p
2021-09-03 11:12:22 +02:00
. . / s r c / l o g . c p p
2021-10-22 18:18:38 +02:00
. . / s r c / m e m o r y _ l e a k _ d e b u g . c p p
2021-09-06 15:49:39 +02:00
. . / s r c / m e m p o o l . c p p
2023-10-21 19:00:30 +02:00
. . / s r c / m e r k l e . c p p
2021-09-06 15:49:39 +02:00
. . / s r c / p 2 p _ s e r v e r . c p p
. . / s r c / p 2 p o o l . c p p
. . / s r c / p 2 p o o l _ a p i . c p p
. . / s r c / p a r a m s . c p p
. . / s r c / p o o l _ b l o c k . c p p
. . / s r c / p o w _ h a s h . c p p
. . / s r c / s i d e _ c h a i n . c p p
. . / s r c / s t r a t u m _ s e r v e r . c p p
2023-04-19 11:36:12 +02:00
. . / s r c / t c p _ s e r v e r . c p p
2021-09-03 11:12:22 +02:00
. . / s r c / u t i l . c p p
2021-09-04 00:05:37 +02:00
. . / s r c / w a l l e t . c p p
2021-09-03 11:12:22 +02:00
)
2025-10-18 12:21:16 +02:00
if ( WITH_INDEXED_HASHES )
add_compile_definitions ( WITH_INDEXED_HASHES )
set ( SOURCES ${ SOURCES } ../src/indexed_hash.cpp )
endif ( )
2024-05-30 23:11:14 +02:00
if ( AMD64 )
set ( SOURCES ${ SOURCES } ../src/keccak_bmi.cpp )
if ( CMAKE_C_COMPILER_ID MATCHES GNU OR CMAKE_C_COMPILER_ID MATCHES Clang )
set_source_files_properties ( ../src/keccak_bmi.cpp PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -mbmi" )
endif ( )
endif ( )
2022-11-14 20:59:11 +01:00
if ( ( CMAKE_CXX_COMPILER_ID MATCHES MSVC ) OR STATIC_BINARY OR STATIC_LIBS )
set ( UV_INCLUDE_DIR ../external/src/libuv/include )
set ( ZMQ_INCLUDE_DIR ../external/src/libzmq/include )
else ( )
find_path ( UV_INCLUDE_DIR NAMES uv.h PATH_SUFFIXES "include" )
find_path ( ZMQ_INCLUDE_DIR NAMES zmq.h PATH_SUFFIXES "include" )
endif ( )
2021-09-03 11:12:22 +02:00
include_directories ( ../src )
include_directories ( ../external/src )
2023-10-24 12:23:06 +02:00
include_directories ( ../external/src/crypto )
2021-09-03 11:12:22 +02:00
include_directories ( ../external/src/cryptonote )
2022-11-14 20:59:11 +01:00
include_directories ( ${ UV_INCLUDE_DIR } )
2021-09-03 11:12:22 +02:00
include_directories ( ../external/src/cppzmq )
2022-11-14 20:59:11 +01:00
include_directories ( ${ ZMQ_INCLUDE_DIR } )
2024-02-06 17:20:58 +01:00
include_directories ( ../external/src/protobuf-c )
2021-09-06 15:49:39 +02:00
include_directories ( ../external/src/RandomX/src )
include_directories ( ../external/src/rapidjson/include )
2021-10-22 18:18:38 +02:00
include_directories ( ../external/src/robin-hood-hashing/src/include )
2021-09-03 11:12:22 +02:00
include_directories ( src )
include_directories ( googletest/googletest/include )
if ( WIN32 )
2023-05-26 18:32:29 +02:00
set ( LIBS ${ LIBS } ws2_32 iphlpapi userenv psapi dnsapi dbghelp )
2023-08-15 13:31:28 +02:00
if ( ( CMAKE_CXX_COMPILER_ID MATCHES GNU ) OR ( CMAKE_CXX_COMPILER_ID MATCHES Clang ) )
2022-09-25 20:41:10 +02:00
set ( LIBS ${ LIBS } bcrypt )
endif ( )
2021-09-03 11:12:22 +02:00
elseif ( NOT APPLE )
2023-01-26 15:45:41 +01:00
set ( LIBS ${ LIBS } pthread )
2021-09-03 11:12:22 +02:00
endif ( )
2022-02-16 10:43:04 +01:00
if ( STATIC_LIBS )
set ( ZMQ_LIBRARY "${CMAKE_SOURCE_DIR}/../external/src/libzmq/build/lib/libzmq.a" )
set ( ZMQ_LIBRARY_DEBUG "${CMAKE_SOURCE_DIR}/../external/src/libzmq/build/lib/libzmq.a" )
2023-05-26 18:32:29 +02:00
set ( UV_LIBRARY_DEBUG "${CMAKE_SOURCE_DIR}/../external/src/libuv/build/libuv.a" )
set ( UV_LIBRARY "${CMAKE_SOURCE_DIR}/../external/src/libuv/build/libuv.a" )
2022-02-16 10:43:04 +01:00
else ( )
if ( CMAKE_CXX_COMPILER_ID MATCHES MSVC )
elseif ( CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang )
find_library ( ZMQ_LIBRARY_DEBUG NAMES zmq libzmq.a )
find_library ( ZMQ_LIBRARY NAMES zmq libzmq.a )
find_library ( UV_LIBRARY_DEBUG NAMES uv libuv.a )
find_library ( UV_LIBRARY NAMES uv libuv.a )
find_library ( SODIUM_LIBRARY sodium )
endif ( )
if ( SODIUM_LIBRARY )
set ( LIBS ${ LIBS } ${ SODIUM_LIBRARY } )
endif ( )
2021-09-03 11:12:22 +02:00
endif ( )
find_library ( PGM_LIBRARY pgm )
find_library ( NORM_LIBRARY norm )
if ( PGM_LIBRARY )
set ( LIBS ${ LIBS } ${ PGM_LIBRARY } )
endif ( )
if ( NORM_LIBRARY )
set ( LIBS ${ LIBS } ${ NORM_LIBRARY } )
endif ( )
2022-06-04 13:16:05 +02:00
if ( APPLE )
find_library ( FOUNDATION_LIB Foundation )
find_library ( CORE_FOUNDATION_LIB CoreFoundation )
find_library ( SYSTEM_CONFIGURATION_LIB SystemConfiguration )
set ( LIBS ${ LIBS } ${ FOUNDATION_LIB } ${ CORE_FOUNDATION_LIB } ${ SYSTEM_CONFIGURATION_LIB } )
endif ( )
2025-10-12 17:07:46 +02:00
add_compile_definitions ( ZMQ_STATIC P2POOL_LOG_DISABLE P2POOL_ABORT_ON_LOG_ERROR )
2021-09-03 11:12:22 +02:00
2022-05-09 11:25:52 +02:00
include ( CheckCXXSourceCompiles )
check_cxx_source_compiles ( "int main(){ return __builtin_clzll(1);}" HAVE_BUILTIN_CLZLL )
check_cxx_source_compiles ( "#include <intrin.h>\n#pragma intrinsic(_BitScanReverse64)\nint main(){unsigned long r;_BitScanReverse64(&r,1);return r;}" HAVE_BITSCANREVERSE64 )
if ( HAVE_BUILTIN_CLZLL )
add_definitions ( /DHAVE_BUILTIN_CLZLL )
endif ( )
if ( HAVE_BITSCANREVERSE64 )
add_definitions ( /DHAVE_BITSCANREVERSE64 )
endif ( )
2023-06-12 15:29:23 +02:00
add_definitions ( "-DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag" )
2021-09-03 11:12:22 +02:00
add_executable ( ${ CMAKE_PROJECT_NAME } ${ HEADERS } ${ SOURCES } )
2025-07-26 12:17:04 +02:00
target_link_libraries ( ${ CMAKE_PROJECT_NAME } debug ${ ZMQ_LIBRARY_DEBUG } debug ${ UV_LIBRARY_DEBUG } optimized ${ ZMQ_LIBRARY } optimized ${ UV_LIBRARY } ${ LIBS } )
2021-09-04 22:32:39 +02:00
add_custom_command ( TARGET ${ CMAKE_PROJECT_NAME } POST_BUILD COMMAND ${ CMAKE_COMMAND } -E copy_if_different "${CMAKE_SOURCE_DIR}/src/crypto_tests.txt" $< TARGET_FILE_DIR:${CMAKE_PROJECT_NAME} > )
2023-03-19 11:38:43 +01:00
add_custom_command ( TARGET ${ CMAKE_PROJECT_NAME } POST_BUILD COMMAND ${ CMAKE_COMMAND } -E copy_if_different "${CMAKE_SOURCE_DIR}/src/block.dat" $< TARGET_FILE_DIR:${CMAKE_PROJECT_NAME} > )
2025-07-15 18:08:20 +02:00
add_custom_command ( TARGET ${ CMAKE_PROJECT_NAME } POST_BUILD COMMAND ${ CMAKE_COMMAND } -E copy_if_different "${CMAKE_SOURCE_DIR}/src/sidechain_dump.dat.xz" $< TARGET_FILE_DIR:${CMAKE_PROJECT_NAME} > )
2025-11-14 18:53:42 +00:00
#add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/src/sidechain_dump_mini.dat.xz" $<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>)
#add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/src/sidechain_dump_nano.dat.xz" $<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>)