diff --git a/CMakeLists.txt b/CMakeLists.txt index ed1c101a0..8b2823f3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,69 +1,87 @@ -cmake_minimum_required(VERSION 3.5) # ubuntu 16 version +CMAKE_MINIMUM_REQUIRED(VERSION 3.5) # ubuntu 16 version +SET(CMAKE_CXX_STANDARD 17) -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) -option(ENABLE_TESTS "enable building of tests" OFF) -set(WITH_LIBBTC "../libbtc" CACHE STRING "path to libbtc built sources") +OPTION(ENABLE_TESTS "enable building of tests" OFF) +SET(WITH_LIBBTC "../libbtc" CACHE STRING "path to libbtc") +SET(WITH_LWS "../libwebsockets" CACHE STRING "path to libwebsockets") -if(WIN32) - set(VCPKG_DEPS protobuf libwebsockets lmdb mpir) -else() - set(VCPKG_DEPS protobuf) -endif() +IF (WIN32) + INCLUDE(Set-Toolchain-vcpkg) + SET(VCPKG_DEPS capnproto libwebsockets lmdb mpir) +ENDIF () -if (ENABLE_TESTS) - list(APPEND VCPKG_DEPS gtest) -endif () +IF (ENABLE_TESTS) + LIST(APPEND VCPKG_DEPS gtest) +ENDIF () -include(Set-Toolchain-vcpkg) +#### find libraries #### IF (WIN32 OR MSVC) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib) + SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib) ELSEIF (UNIX) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a .so) - set(CMAKE_FIND_LIBRARY_PREFIXES lib) - set(CMAKE_LIBRARY_HINTS /lib/x86_64-linux-gnu /usr/lib) + SET(CMAKE_FIND_LIBRARY_SUFFIXES .a .so) + SET(CMAKE_FIND_LIBRARY_PREFIXES lib) + SET(CMAKE_LIBRARY_HINTS /usr/lib /usr/include) ENDIF () -find_library(LMDB_LIB lmdb HINTS ${CMAKE_LIBRARY_HINTS}) +## gmp ## +FIND_PATH (GMP_INCLUDE_DIR gmp.h HINTS ${CMAKE_LIBRARY_HINTS}) + +## lmdb ## +FIND_LIBRARY (LMDB_LIB lmdb HINTS ${CMAKE_LIBRARY_HINTS}) IF (NOT LMDB_LIB) MESSAGE(FATAL_ERROR "Could not find LMDB lib") ENDIF () -if(IS_ABSOLUTE ${WITH_LIBBTC}) +## libbtc ## +IF (IS_ABSOLUTE ${WITH_LIBBTC}) # do nothing -else() - set(WITH_LIBBTC ${CMAKE_SOURCE_DIR}/${WITH_LIBBTC}) -endif() +ELSE () + SET(WITH_LIBBTC ${CMAKE_SOURCE_DIR}/${WITH_LIBBTC}) +ENDIF () -MESSAGE("WITH_LIBBTC: ${WITH_LIBBTC}") -find_library(LIBBTC_LIB libbtc btc HINTS ${WITH_LIBBTC}/.libs ${WITH_LIBBTC}/lib ${WITH_LIBBTC}/build +FIND_LIBRARY (LIBBTC_LIB libbtc btc HINTS ${WITH_LIBBTC}/.libs ${WITH_LIBBTC}/lib ${WITH_LIBBTC}/build ${WITH_LIBBTC}/build/Debug ${WITH_LIBBTC}/build/Release ) IF (NOT LIBBTC_LIB) MESSAGE(FATAL_ERROR "Could not find libbtc") ENDIF () -set(LIBBTC_INCLUDE_DIR ${WITH_LIBBTC}/include) -set(SECP256k1_INCLUDE_DIR ${WITH_LIBBTC}/src/secp256k1/include) +SET(LIBBTC_INCLUDE_DIR ${WITH_LIBBTC}) + +## lws ## +IF (IS_ABSOLUTE ${WITH_LWS}) + # do nothing +ELSE () + SET(WITH_LWS ${CMAKE_SOURCE_DIR}/${WITH_LWS}) +ENDIF () + +FIND_LIBRARY (LIBWEBSOCKETS_LIB websockets HINTS ${WITH_LWS}/lib ${WITH_LWS}/build) +IF (NOT LIBWEBSOCKETS_LIB) + MESSAGE(FATAL_ERROR "Could not find WS lib") +ENDIF () +SET(LIBWEBSOCKETS_INCLUDE_DIRS ${WITH_LWS}/include) +## capnproto ## +FIND_LIBRARY (CAPNPROTO_LIB capnp HINTS ${CMAKE_LIBRARY_HINTS}) +IF (NOT CAPNPROTO_LIB) + MESSAGE(FATAL_ERROR "Could not find capnproto lib") +ENDIF () -if (ENABLE_TESTS) - find_library(GTEST_LIB gtest HINTS ${CMAKE_LIBRARY_HINTS}) +## gtest ## +IF (ENABLE_TESTS) + FIND_LIBRARY(GTEST_LIB gtest HINTS ${CMAKE_LIBRARY_HINTS}) IF (NOT GTEST_LIB) MESSAGE(FATAL_ERROR "Could not find gtest lib") ENDIF () -endif (ENABLE_TESTS) - +ENDIF (ENABLE_TESTS) -project(BitcoinArmory C CXX) - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Release with debug info version" FORCE) -endif() +PROJECT(BitcoinArmory C CXX) -if(POLICY CMP0077) - cmake_policy(SET CMP0077 NEW) -endif() +IF (NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Release with debug info version" FORCE) +ENDIF () include(ArmorySupport) include(GCCToolchain) @@ -74,70 +92,9 @@ include(CompilerWarnings) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# use ccache if available, and not already enabled on the command line -# but not with ninja and msys ccache on msys2 -if(NOT (WIN32 AND (NOT $ENV{MSYSTEM} STREQUAL "") AND CMAKE_GENERATOR STREQUAL Ninja)) - if(NOT CMAKE_CXX_COMPILER_LAUNCHER AND NOT CMAKE_C_COMPILER_LAUNCHER) - find_program(CCACHE_FOUND ccache) - if(CCACHE_FOUND) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) - endif(CCACHE_FOUND) - endif() -endif() - -# build for host CPU if desired (default yes) -option(WITH_HOST_CPU_FEATURES "support the CPU features of the build host, gcc only" ON) - -if(WITH_HOST_CPU_FEATURES AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) - check_x86_cpu_features() - - add_compile_options(-march=native ${X86_CPU_FEATURES_COMPILER_FLAGS}) -endif() - if(MSVC) add_definitions(-DNOMINMAX -D_WINSOCKAPI_) endif() -# support brew and macports -if(APPLE) - if(EXISTS /usr/local/include AND EXISTS /usr/local/lib) - include_directories(/usr/local/include) - link_directories(/usr/local/lib) - elseif(EXISTS /opt/local/include AND EXISTS /opt/local/lib) - include_directories(/opt/local/include) - link_directories(/opt/local/lib) - endif() -endif() - -# we are bundling libwebsockets for the time being, at least until ubuntu -# updates their version - -# this is the right way to set options for sub-projects -# we allow these to be overridden by the user -if(NOT DEFINED LWS_SSL_CLIENT_USE_OS_CA_CERTS) - set(LWS_SSL_CLIENT_USE_OS_CA_CERTS OFF CACHE BOOL "disable using OS CA certs for libwebsockets" FORCE) -endif() - -if(NOT DEFINED LWS_WITH_SHARED) - set(LWS_WITH_SHARED OFF CACHE BOOL "disable building libwebsockets as shared library" FORCE) -endif() - -if(NOT DEFINED LWS_WITH_SSL) - set(LWS_WITH_SSL OFF CACHE BOOL "disable SSL support in libwebsockets" FORCE) -endif() - -if(NOT WIN32) - find_library(LIBWEBSOCKETS_LIB websockets HINTS ${CMAKE_LIBRARY_HINTS}) - IF (NOT LIBWEBSOCKETS_LIB) - MESSAGE(FATAL_ERROR "Could not find WS lib") - ENDIF () - -# add_subdirectory(libwebsockets EXCLUDE_FROM_ALL) -# set(LIBWEBSOCKETS_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libwebsockets/include ${CMAKE_BINARY_DIR}/libwebsockets/include CACHE PATH "libwebsockets include dirs" FORCE) -endif() - -FIND_PATH(GMP_INCLUDE_DIR gmp.h) - # this is the main project add_subdirectory(cppForSwig) diff --git a/cppForSwig/CMakeLists.txt b/cppForSwig/CMakeLists.txt index b03ff9b3a..5bc9fe4af 100644 --- a/cppForSwig/CMakeLists.txt +++ b/cppForSwig/CMakeLists.txt @@ -1,23 +1,23 @@ -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) -set(CMAKE_CXX_EXTENSIONS OFF) +SET(CMAKE_CXX_STANDARD 17) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) +SET(CMAKE_CXX_EXTENSIONS OFF) -add_subdirectory(chacha20poly1305) +ADD_SUBDIRECTORY(chacha20poly1305) -set(LIBARMORYCOMMON_INCLUDE_DIRECTORIES +SET(LIBARMORYCOMMON_INCLUDE_DIRECTORIES PUBLIC . PUBLIC hkdf PUBLIC lmdbpp PRIVATE bech32/ref/c++ PRIVATE chacha20poly1305 - PUBLIC libbtc/src/secp256k1/include - PUBLIC ${LIBBTC_INCLUDE_DIR} - PUBLIC ${SECP256k1_INCLUDE_DIR} + PUBLIC ${LIBBTC_INCLUDE_DIR}/src + PUBLIC ${LIBBTC_INCLUDE_DIR}/include + PUBLIC ${LIBBTC_INCLUDE_DIR}/src/secp256k1/include PUBLIC Signer PUBLIC Wallets PRIVATE Wallets/Accounts - PRIVATE ${PROJECT_BINARY_DIR} # for protobuf protoc genned .h files + PRIVATE ${PROJECT_BINARY_DIR}/cppForSwig ) IF (MSVC) @@ -26,7 +26,7 @@ IF (MSVC) ) ENDIF (MSVC) -set(LIBARMORYCOMMON_LINK_LIBRARIES +SET(LIBARMORYCOMMON_LINK_LIBRARIES chacha20poly1305 ${LIBBTC_LIB} ${LMDB_LIB} @@ -34,450 +34,314 @@ set(LIBARMORYCOMMON_LINK_LIBRARIES ) IF (NOT MSVC) - list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + LIST(APPEND LIBARMORYCOMMON_LINK_LIBRARIES pthread + cap ) ENDIF (NOT MSVC) FILE(GLOB LIBARMORYCOMMON_SOURCES *.cpp) +FILE(GLOB BLOCKDB_SOURCES BlockchainDatabase/*.cpp) FILE(GLOB WALLETS_SOURCES Wallets/*.cpp) FILE(GLOB ACCOUNTS_SOURCES Wallets/Accounts/*.cpp) +FILE(GLOB SEEDS_SOURCES Wallets/Seeds/*.cpp) FILE(GLOB SIGNER_SOURCES Signer/*.cpp) +FILE(GLOB BRIDGE_SOURCES BridgeApi/*.cpp) -list(APPEND LIBARMORYCOMMON_SOURCES +LIST(APPEND LIBARMORYCOMMON_SOURCES hkdf/hkdf.c - gtest/NodeUnitTest.cpp lmdbpp/lmdbpp.cpp ${WALLETS_SOURCES} ${ACCOUNTS_SOURCES} + ${SEEDS_SOURCES} ${SIGNER_SOURCES} + ${BLOCKDB_SOURCES} ) +IF (ENABLE_TESTS) + LIST(APPEND LIBARMORYCOMMON_SOURCES + gtest/NodeUnitTest.cpp + ) + ADD_DEFINITIONS(-DUNIT_TESTS) +ENDIF () + IF (MSVC) - list(APPEND LIBARMORYCOMMON_SOURCES + LIST(APPEND LIBARMORYCOMMON_SOURCES leveldb_windows_port/win32_posix/dirent_win32.cpp leveldb_windows_port/win32_posix/mman.cpp leveldb_windows_port/win32_posix/win32_posix.cc ) - list(REMOVE_ITEM LIBARMORYCOMMON_SOURCES + LIST(REMOVE_ITEM LIBARMORYCOMMON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/SocketService_unix.cpp ) - set(OS_SPECIFIC_LIBS ) + SET(OS_SPECIFIC_LIBS ) ELSE (MSVC) - list(REMOVE_ITEM LIBARMORYCOMMON_SOURCES + LIST(REMOVE_ITEM LIBARMORYCOMMON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/SocketService_win32.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Win_TranslatePath.cpp ) - set(OS_SPECIFIC_LIBS gmp) + SET(OS_SPECIFIC_LIBS gmp) ENDIF (MSVC) -list(REMOVE_ITEM LIBARMORYCOMMON_SOURCES +LIST(REMOVE_ITEM LIBARMORYCOMMON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/old_not_very_good_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/playground.cpp ) - -set(LIBARMORYCOMMON_COMPILE_DEFINITIONS +SET(LIBARMORYCOMMON_COMPILE_DEFINITIONS PRIVATE ) -if(ENABLE_TESTS) - add_definitions(-DUNIT_TESTS) -endif() - -if(NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg) - find_package(PkgConfig REQUIRED) -endif() - -if(TARGET websockets) # we are bundling it - set(LIBWEBSOCKETS_LIBRARIES websockets) -elseif(CMAKE_TOOLCHAIN_FILE MATCHES vcpkg) - find_package(libwebsockets CONFIG REQUIRED) - set(LIBWEBSOCKETS_LIBRARIES websockets_shared) -else() - pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets>=3.0.1) -endif() - -list(APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES +LIST(APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES PUBLIC ${LIBWEBSOCKETS_INCLUDE_DIRS} ) -list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES +LIST(APPEND LIBARMORYCOMMON_LINK_LIBRARIES ${LIBWEBSOCKETS_LIBRARIES} ) -include(CheckCXXSymbolExists) +INCLUDE(CheckCXXSymbolExists) +find_package(PkgConfig) +## lws ## check_cxx_symbol_exists(LWS_WITH_TLS lws_config.h LIBWEBSOCKETS_WITH_TLS) -if(LIBWEBSOCKETS_WITH_TLS) - if(APPLE) - set(OPENSSL_ROOT_DIR /usr/local/opt/openssl) - endif() +IF (LIBWEBSOCKETS_WITH_TLS) + IF (APPLE) + SET(OPENSSL_ROOT_DIR /usr/local/opt/openssl) + ENDIF () find_package(OpenSSL REQUIRED) - list(APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES + LIST (APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES PUBLIC ${OPENSSL_INCLUDE_DIR} ) - list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + LIST (APPEND LIBARMORYCOMMON_LINK_LIBRARIES ${OPENSSL_LIBRARIES} ) -endif() +ENDIF () check_cxx_symbol_exists(LWS_WITH_LIBUV lws_config.h LIBWEBSOCKETS_WITH_LIBUV) -if(LIBWEBSOCKETS_WITH_LIBUV) +iF (LIBWEBSOCKETS_WITH_LIBUV) pkg_check_modules(LIBUV REQUIRED libuv) - list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + LIST(APPEND LIBARMORYCOMMON_LINK_LIBRARIES ${LIBUV_LIBRARIES} ) -endif() +ENDIF () check_cxx_symbol_exists(LWS_WITH_LIBEVENT lws_config.h LIBWEBSOCKETS_WITH_LIBEVENT) -if(LIBWEBSOCKETS_WITH_LIBEVENT) +IF (LIBWEBSOCKETS_WITH_LIBEVENT) pkg_check_modules(LIBEVENT REQUIRED libevent) - list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + LIST (APPEND LIBARMORYCOMMON_LINK_LIBRARIES ${LIBEVENT_LIBRARIES} ) -endif() +ENDIF () check_cxx_symbol_exists(LWS_WITH_LIBCAP lws_config.h LIBWEBSOCKETS_WITH_LIBCAP) -if(LIBWEBSOCKETS_WITH_LIBCAP) +IF (LIBWEBSOCKETS_WITH_LIBCAP) pkg_check_modules(LIBCAP REQUIRED libcap) - list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + LIST(APPEND LIBARMORYCOMMON_LINK_LIBRARIES ${LIBCAP_LIBRARIES} ) -endif() - -if(CMAKE_TOOLCHAIN_FILE MATCHES vcpkg) - find_package(protobuf CONFIG REQUIRED) - set(PROTOBUF_LIBRARIES protobuf::libprotoc protobuf::libprotobuf) -else() - pkg_check_modules(PROTOBUF REQUIRED protobuf>=2.0.0) -endif() - -list(APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES - PRIVATE ${PROTOBUF_INCLUDE_DIRS} +ENDIF () + +## capnproto ## +IF (CMAKE_TOOLCHAIN_FILE MATCHES vcpkg) + find_package(capnp CONFIG REQUIRED) + SET(CAPNP_LIBRARIES capnp kj) +ELSE () + pkg_check_modules(CAPNPROTO REQUIRED) +ENDIF () + +LIST(APPEND LIBARMORYCOMMON_INCLUDE_DIRECTORIES + PRIVATE ${CAPNPROTO_INCLUDE_DIRS} ) -list(APPEND LIBARMORYCOMMON_LINK_LIBRARIES - ${PROTOBUF_LIBRARIES} +LIST(APPEND LIBARMORYCOMMON_LINK_LIBRARIES + ${CAPNP_LIBRARIES} ) -set(PROTOBUF_FILES - AddressBook.proto - AddressData.proto - BDVCommand.proto - CommonTypes.proto - FeeEstimate.proto - LedgerEntry.proto - NodeStatus.proto - Utxo.proto - Signer.proto +SET(CAPNPROTO_FILES + BDV.capnp + Bridge.capnp + Signer.capnp + Types.capnp ) -find_program(PROTOC_EXECUTABLE protoc) +#compile capnp schemas +FIND_PROGRAM(CAPNP_EXECUTABLE capnp) +IF (NOT CAPNP_EXECUTABLE) + MESSAGE(FATAL_ERROR "capnproto compiler 'capnp' not found") +ENDIF () -if(NOT PROTOC_EXECUTABLE) - message(FATAL_ERROR "protocol buffers compiler 'protoc' not found") -endif() +SET(CAPNP_FILES ${PROJECT_BINARY_DIR}/cppForSwig/capnp) +FILE(MAKE_DIRECTORY ${CAPNP_FILES}) -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/protobuf) - -foreach(proto ${PROTOBUF_FILES}) - string(REGEX REPLACE "\\.proto$" ".pb.cc" proto_cc ${proto}) - - add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/protobuf/${proto_cc} - COMMAND ${PROTOC_EXECUTABLE} --cpp_out=${PROJECT_BINARY_DIR}/protobuf --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/protobuf ${CMAKE_CURRENT_SOURCE_DIR}/protobuf/${proto} - DEPENDS protobuf/${proto} +FOREACH(schema ${CAPNPROTO_FILES}) + SET(CAPNP_CC "${schema}.c++") + ADD_CUSTOM_COMMAND( + OUTPUT ${CAPNP_FILES}/${CAPNP_CC} + COMMAND ${CAPNP_EXECUTABLE} compile --src-prefix=${CMAKE_CURRENT_SOURCE_DIR}/capnp -oc++:capnp ${CMAKE_CURRENT_SOURCE_DIR}/capnp/${schema} ) + LIST(APPEND LIBARMORYCOMMON_SOURCES ${CAPNP_FILES}/${CAPNP_CC}) +ENDFOREACH() - list(APPEND LIBARMORYCOMMON_SOURCES ${PROJECT_BINARY_DIR}/protobuf/${proto_cc}) -endforeach() - -add_library(ArmoryCommon +ADD_LIBRARY(ArmoryCommon STATIC ${LIBARMORYCOMMON_SOURCES} ) -target_compile_definitions(ArmoryCommon +TARGET_COMPILE_DEFINITIONS(ArmoryCommon PUBLIC __STDC_LIMIT_MACROS ${LIBARMORYCOMMON_COMPILE_DEFINITIONS} ) -target_include_directories(ArmoryCommon +TARGET_INCLUDE_DIRECTORIES(ArmoryCommon ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} ) -target_link_libraries(ArmoryCommon +TARGET_LINK_LIBRARIES(ArmoryCommon ${LIBARMORYCOMMON_LINK_LIBRARIES} ) -set(LIBARMORYCLI_SOURCES +SET(LIBARMORYCLI_SOURCES + ArmoryConfig.cpp BDM_mainthread.cpp BDM_Server.cpp BIP150_151.cpp BIP15x_Handshake.cpp BitcoinP2P.cpp - Blockchain.cpp - BlockchainScanner.cpp - BlockchainScanner_Super.cpp - BlockDataMap.cpp BlockDataViewer.cpp - BlockObj.cpp - BlockUtils.cpp BtcWallet.cpp - DatabaseBuilder.cpp HistoryPager.cpp HttpMessage.cpp JSON_codec.cpp LedgerEntry.cpp - lmdb_wrapper.cpp nodeRPC.cpp Progress.cpp - ScrAddrFilter.cpp ScrAddrObj.cpp Server.cpp - SshParser.cpp StringSockets.cpp - txio.cpp ZeroConf.cpp + gtest/NodeUnitTest.cpp ) -if(MSVC) - list(APPEND LIBARMORYCLI_SOURCES +IF (MSVC) + LIST(APPEND LIBARMORYCLI_SOURCES SocketService_win32.cpp ) -else() - list(APPEND LIBARMORYCLI_SOURCES +ELSE () + LIST(APPEND LIBARMORYCLI_SOURCES SocketService_unix.cpp ) -endif() +ENDIF () -add_library(ArmoryCLI +ADD_LIBRARY(ArmoryCLI STATIC ${LIBARMORYCLI_SOURCES} ) -set_target_properties(ArmoryCLI PROPERTIES CXX_STANDARD 14) -target_compile_features(ArmoryCLI PUBLIC cxx_std_11) - -target_include_directories(ArmoryCLI +TARGET_INCLUDE_DIRECTORIES(ArmoryCLI ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} ) -target_link_libraries(ArmoryCLI +TARGET_LINK_LIBRARIES(ArmoryCLI ArmoryCommon ) -target_compile_definitions(ArmoryCLI +TARGET_COMPILE_DEFINITIONS(ArmoryCLI PUBLIC -D__STDC_LIMIT_MACROS ) -find_program(LRELEASE_EXECUTABLE lrelease) - -add_executable(armorydb +## armorydb ## +ADD_EXECUTABLE(ArmoryDB main.cpp ) -set_target_properties(armorydb +SET_TARGET_PROPERTIES(ArmoryDB PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} ) -target_include_directories(armorydb +TARGET_INCLUDE_DIRECTORIES(ArmoryDB ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} ) -target_link_libraries(armorydb +TARGET_LINK_LIBRARIES(ArmoryDB ArmoryCLI ${OS_SPECIFIC_LIBS} + capnp + kj ) -include(GNUInstallDirs) +INCLUDE(GNUInstallDirs) -install(TARGETS armorydb DESTINATION ${CMAKE_INSTALL_BINDIR}) +INSTALL(TARGETS ArmoryDB DESTINATION ${CMAKE_INSTALL_BINDIR}) -add_executable(BIP150KeyManager - KeyManager.cpp +## cppbridge ## +ADD_EXECUTABLE(CppBridge + BridgeAPI/BridgeMain.cpp + BridgeAPI/BridgeSocket.cpp + BridgeAPI/CppBridge.cpp + BridgeAPI/PassphrasePrompt.cpp + BridgeAPI/ProtoCommandParser.cpp + BridgeAPI/WalletManager.cpp + ${LIBBTC_INCLUDE_DIR}/src/trezor-crypto/bip39.c + ${LIBBTC_INCLUDE_DIR}/src/trezor-crypto/pbkdf2.c ) -set_target_properties(BIP150KeyManager +SET_TARGET_PROPERTIES(CppBridge PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} ) -target_include_directories(BIP150KeyManager +TARGET_INCLUDE_DIRECTORIES(CppBridge ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} ) -target_link_libraries(BIP150KeyManager - ArmoryCLI +TARGET_LINK_LIBRARIES(CppBridge + ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) -install(TARGETS BIP150KeyManager DESTINATION ${CMAKE_INSTALL_BINDIR}) - -string_option(WITH_CLIENT "build python client" OFF) - -find_package(Python2 COMPONENTS Development QUIET) - -find_program(SWIG_EXECUTABLE swig) - -if(WITH_CLIENT STREQUAL AUTO) - # currently swig sometimes fails on clang - if(Python2_Development_FOUND AND SWIG_EXECUTABLE AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang)) - set(WITH_CLIENT ON) - else() - set(WITH_CLIENT OFF) - endif() -endif() - -if(WITH_CLIENT) - if(NOT Python2_Development_FOUND) - message(FATAL_ERROR "python 2 development files not found, install python-dev") - endif() - - if(NOT SWIG_EXECUTABLE) - message(FATAL_ERROR "swig not found") - endif() - - set(CPPBLOCKUTILS_SOURCES - ${PROJECT_BINARY_DIR}/CppBlockUtils_wrap.cxx - ) - - unset(SWIG_OPTS) - - if(CMAKE_COMPILER_IS_GNUCXX) - set(SWIG_OPTS -D__GNUC__) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) - set(SWIG_OPTS -D__CLANG__) - endif() - - if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8) # 64 bit - set(SWIG_OPTS ${SWIG_OPTS} -D__LP64__) - endif() - - add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/CppBlockUtils_wrap.cxx - COMMAND ${SWIG_EXECUTABLE} -c++ -python -threads ${SWIG_OPTS} -o ${PROJECT_BINARY_DIR}/CppBlockUtils_wrap.cxx ${CMAKE_CURRENT_SOURCE_DIR}/CppBlockUtils.i - DEPENDS CppBlockUtils.i - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) - - set(CPPBLOCKUTILS_LINK_LIBRARIES - ArmoryCommon - Python2::Python - ) - - add_library(CppBlockUtils - SHARED - ${CPPBLOCKUTILS_SOURCES} - ) - - set_target_properties(CppBlockUtils - PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} - ) - - # remove "lib" prefix - set_target_properties(CppBlockUtils - PROPERTIES PREFIX "" - ) - - target_include_directories(CppBlockUtils - PUBLIC Python2::Python - ) - - # copy CppBlockUtils.so to _CppBlockUtils.so as well, why I don't know - add_custom_command( - TARGET CppBlockUtils POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${PROJECT_BINARY_DIR}/CppBlockUtils${CMAKE_SHARED_LIBRARY_SUFFIX} - ${PROJECT_BINARY_DIR}/_CppBlockUtils${CMAKE_SHARED_LIBRARY_SUFFIX} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) - - target_link_libraries(CppBlockUtils - ${CPPBLOCKUTILS_LINK_LIBRARIES} - ) - - # rewrite prefix for armory script - add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/armory - COMMAND ${CMAKE_COMMAND} -Dscript_name=armory - -Dscript_file=${PROJECT_SOURCE_DIR}/dpkgfiles/armory - -Dscript_output_file=${PROJECT_BINARY_DIR}/armory - -Dscript_dir=${PROJECT_BINARY_DIR} - -Dprefix=${CMAKE_INSTALL_PREFIX} - -P ${PROJECT_SOURCE_DIR}/cmake/scripts/RewriteArmoryScriptPrefix.cmake - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) - - add_custom_target(armory_script DEPENDS ${PROJECT_BINARY_DIR}/armory) - - add_dependencies(CppBlockUtils armory_script) +INSTALL(TARGETS CppBridge DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(PROGRAMS ${PROJECT_BINARY_DIR}/armory DESTINATION ${CMAKE_INSTALL_BINDIR}) - - install(CODE "file(MAKE_DIRECTORY ${CMAKE_INSTALL_LIBDIR}/armory/armoryengine)") - - install(CODE "file(MAKE_DIRECTORY ${CMAKE_INSTALL_DATAROOTDIR}/applications)") # share/applications - - install( - TARGETS CppBlockUtils - DESTINATION ${CMAKE_INSTALL_LIBDIR}/armory - ) +## key manager ## +ADD_EXECUTABLE(BIP150KeyManager + KeyManager.cpp +) - # copy the underscore prefixed version too - install( - FILES ${PROJECT_BINARY_DIR}/_CppBlockUtils${CMAKE_SHARED_LIBRARY_SUFFIX} - DESTINATION ${CMAKE_INSTALL_LIBDIR}/armory - ) +SET_TARGET_PROPERTIES(BIP150KeyManager + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} +) - install(FILES - ../armorycolors.py - ../armorymodels.py - ../ArmoryQt.py - ../dynamicImport.py - ../guardian.py - ../jasvet.py - ../LICENSE.py - ../qrcodenative.py - ../qtdefines.py - ../qtdialogs.py - ../SDM.py - ../setup.py - ../subprocess_win.py - ../update_version.py - ../writeNSISCompilerArgs.py - ${PROJECT_BINARY_DIR}/CppBlockUtils.py - ${PROJECT_BINARY_DIR}/qrc_img_resources.py - - DESTINATION ${CMAKE_INSTALL_LIBDIR}/armory - ) +TARGET_INCLUDE_DIRECTORIES(BIP150KeyManager + ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} +) - install(DIRECTORY ../armoryengine DESTINATION ${CMAKE_INSTALL_LIBDIR}/armory) +TARGET_LINK_LIBRARIES(BIP150KeyManager + ArmoryCLI + ${OS_SPECIFIC_LIBS} +) - install(DIRECTORY ../img - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/armory - PATTERN ".DS_Store" EXCLUDE - ) -endif() +INSTALL(TARGETS BIP150KeyManager DESTINATION ${CMAKE_INSTALL_BINDIR}) -option(ENABLE_TESTS "build tests binaries" OFF) +## tests ## +OPTION(ENABLE_TESTS "build tests binaries" OFF) -if(ENABLE_TESTS) - add_subdirectory(gtest) -endif() +IF (ENABLE_TESTS) + ADD_SUBDIRECTORY(gtest) +ENDIF () diff --git a/cppForSwig/gtest/CMakeLists.txt b/cppForSwig/gtest/CMakeLists.txt index cab777c9c..71a51363b 100644 --- a/cppForSwig/gtest/CMakeLists.txt +++ b/cppForSwig/gtest/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -24,21 +24,21 @@ target_link_libraries(BIP151RekeyTest ${OS_SPECIFIC_LIBS} ) -add_executable(ContainerTests - ContainerTests.cpp - ${TEST_SOURCES} -) -set_target_properties(ContainerTests - PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} -) -target_include_directories(ContainerTests - ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} -) -target_link_libraries(ContainerTests - ${GTEST_LIB} - ArmoryCommon - ${OS_SPECIFIC_LIBS} -) +#add_executable(ContainerTests +# ContainerTests.cpp +# ${TEST_SOURCES} +#) +#set_target_properties(ContainerTests +# PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} +#) +#target_include_directories(ContainerTests +# ${LIBARMORYCOMMON_INCLUDE_DIRECTORIES} +#) +#target_link_libraries(ContainerTests +# ${GTEST_LIB} +# ArmoryCommon +# ${OS_SPECIFIC_LIBS} +#) add_executable(CppBlockUtilsTests CppBlockUtilsTests.cpp @@ -54,6 +54,8 @@ target_link_libraries(CppBlockUtilsTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) # Seems to be outdated - re-enable when fixed @@ -86,6 +88,8 @@ target_link_libraries(SignerTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) add_executable(SupernodeTests @@ -102,6 +106,8 @@ target_link_libraries(SupernodeTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) add_executable(UtilsTests @@ -118,11 +124,15 @@ target_link_libraries(UtilsTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) add_executable(WalletTests WalletTests.cpp ${TEST_SOURCES} + ${LIBBTC_INCLUDE_DIR}/src/trezor-crypto/bip39.c + ${LIBBTC_INCLUDE_DIR}/src/trezor-crypto/pbkdf2.c ) set_target_properties(WalletTests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} @@ -134,6 +144,8 @@ target_link_libraries(WalletTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj ) add_executable(ZeroConfTests @@ -150,4 +162,6 @@ target_link_libraries(ZeroConfTests ${GTEST_LIB} ArmoryCommon ${OS_SPECIFIC_LIBS} + capnp + kj )