2020-08-25 18:02:45 +00:00
# Defines Peerplays library target.
project ( Peerplays )
2015-06-08 15:50:35 +00:00
cmake_minimum_required ( VERSION 2.8.12 )
2020-10-16 14:38:21 +00:00
set ( BLOCKCHAIN_NAME "Peerplays" )
2015-06-08 15:50:35 +00:00
set ( CLI_CLIENT_EXECUTABLE_NAME graphene_client )
2020-10-16 14:38:21 +00:00
set ( GUI_CLIENT_EXECUTABLE_NAME Peerplays )
2015-06-08 15:50:35 +00:00
set ( CUSTOM_URL_SCHEME "gcs" )
set ( INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347" )
Ref !3/#376: Graphene Updates
This adds the most important updates to Graphene from BitShares. Most notably,
https://github.com/bitshares/bitshares-core/issues/1506
Second most notably, it updates Peerplays' FC to be in sync with BitShares FC.
This is a squash commit of several subcommits. The subcommit messages are
reproduced below:
Replace fc::uint128 with boost::multiprecision::uint128_t
replace smart_ref with shared_ptr
Fixes/Remove Unused
Remove NTP time
Remove old macro
This macro is now in FC, so no need to define it here anymore
Replaced fc::array with std::array
Separate exception declaration and implementation
Adapted to fc promise changes
Fixes
Add back in some of Peter's fixes that got lost in the cherry pick
_hash endianness fixes
Remove all uses of fc/smart_ref
It's gone, can't use it anymore
Replace improper static_variant operator overloads with comparators
Fixes
Remove boost::signals from build system; it's header-only so it's not
listed in cmake anymore.
Also remove some unused hashing code
Impl. pack/unpack functions for extension class
Ref #1506: Isolate chain/protocol to its own library
Ref #1506: Add object_downcast_t
Allows the more concise expression `object_downcast_t<xyz>` instead of
the old `typename object_downcast<xyz>::type`
Ref #1506: Move ID types from db to protocol
The ID types, object_id and object_id_type, were defined in the db
library, and the protocol library depends on db to get these types.
Technically, the ID types are defined by the protocol and used by the
database, and not vice versa. Therefore these types should be in the
protocol library, and db should depend on protocol to get them.
This commit makes it so.
Ref #1506: Isolate chain/protocol to its own library
Remove commented-out index code
Wrap overlength line
Remove unused key types
Probably fix Docker build
Fix build after rebase
Ref #1506/#1737: Some requested changes
Ref #1506/#1737: Macro-fy ID type definitions
Define macros to fully de-boilerplate ID type definitions.
Externalities:
- Rename transaction_object -> transaction_history_object
- Rename impl_asset_dynamic_data_type ->
impl_asset_dynamic_data_object_type
- Rename impl_asset_bitasset_data_type ->
impl_asset_bitasset_data_object_type
The first is to avoid a naming collision on transaction_id_type, and the
other two are to maintain consistency with the naming of the other
types.
Ref #1506/#1737: Fix clean_name()
Ref #1506/#1737: Oops
Fix .gitignore
Externalized serialization in protocol library
Fix compile sets
Delete a couple of ghost files that were in the tree but not part
of the project (I accidentally added them to CMakeLists while
merging, but they're broken and not part of the Peerplays code), and
add several files that got dropped from the build during merge.
General fixes
Fix warnings, build issues, unused code, etc.
Fix #1772 by decprecating cli_wallet -H
More fixes
Fix errors and warnings and generally coax it to build
Fix test
I'm pretty sure this didn't break from what I did... But I can't build
the original code, so I can't tell. Anyways, this one now passes...
Others still fail...
Small fix
Fix crash in auth checks
Final fixes
Last round of fixes following the rebase to Beatrice
Rename project in CMakeLists.txt
The CMakeLists.txt declared this project as BitShares and not Peerplays,
which makes it confusing in IDEs. Rename it to be clear which project is
open.
Resolve #374
Replace all object refs in macros with IDs, and fix affected tests to look
up objects by ID rather than using invalidated refs.
A full audit of all tests should be performed to eliminate any further
usage of invalidated object references.
Resolve #373: Add object notifiers
Various fixes
Fixes to various issues, primarily reflections, that cropped up
during merge conflict resolution
Fix startup bug in Bookie plugin
Bookie plugin was preventing the node from starting up because it
registered its secondary indexes to create objects in its own primary
indexes to track objects being created in other primary indexes, and did
so during its `initialize()` step, which is to say, before the database
was loaded from disk at startup. This caused the secondary indexes to
create tracker objects when the observed indexes were loading objects
from disk. This then caused a failure when these tracker indexes were
later loaded from disk, and the first object IDs collided.
This is fixed by refraining from defining secondary indexes until the
`startup()` stage rather than the `initialize()` stage. Primary indexes
are registered in `initialize()`, secondary indexes are registered in
`startup()`.
This also involved adding a new method, "add_secondary_index()", to
`object_database`, as before there was no way to do this because you
couldn't get a non-const index from a non-const database.
I have no idea how this was working before I got here...
Fix egenesis install
Fixes after updates
Rebase on updated develop branch and fix conflicts
2020-10-09 02:05:59 +00:00
set ( CMAKE_CXX_STANDARD 14 )
2015-06-08 15:50:35 +00:00
2020-10-26 22:02:22 +00:00
set ( GRAPHENE_BUILD_DYNAMIC_LIBRARIES OFF CACHE BOOL
" W h e t h e r t o b u i l d d y n a m i c l i b r a r i e s i n s t e a d o f s t a t i c . A p p l i e s o n l y t o c h a i n , d b , p r o t o c o l , n e t , a n d u t i l i t i e s " )
2021-01-29 18:56:42 +00:00
if ( GRAPHENE_BUILD_DYNAMIC_LIBRARIES )
set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
2022-01-12 22:55:01 +00:00
set ( CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" )
2021-01-29 18:56:42 +00:00
endif ( )
2021-03-02 17:14:13 +00:00
set ( FC_BUILD_DYNAMIC_LIBRARIES ${ GRAPHENE_BUILD_DYNAMIC_LIBRARIES } CACHE BOOL "Whether FC should build as a dynamic library rather than static" )
2020-10-26 22:02:22 +00:00
2015-06-08 15:50:35 +00:00
# http://stackoverflow.com/a/18369825
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8 )
message ( FATAL_ERROR "GCC version must be at least 4.8!" )
endif ( )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3 )
message ( FATAL_ERROR "Clang version must be at least 3.3!" )
endif ( )
endif ( )
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
2020-12-18 13:21:24 +00:00
# function to help with cUrl
macro ( FIND_CURL )
if ( NOT WIN32 AND NOT APPLE AND CURL_STATICLIB )
find_package ( OpenSSL REQUIRED )
set ( OLD_SUFFIXES ${ CMAKE_FIND_LIBRARY_SUFFIXES } )
set ( CMAKE_FIND_LIBRARY_SUFFIXES .a )
find_package ( CURL REQUIRED )
list ( APPEND CURL_LIBRARIES ${ OPENSSL_LIBRARIES } ${ BOOST_THREAD_LIBRARY } ${ CMAKE_DL_LIBS } )
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ OLD_SUFFIXES } )
else ( NOT WIN32 AND NOT APPLE AND CURL_STATICLIB )
find_package ( CURL REQUIRED )
endif ( NOT WIN32 AND NOT APPLE AND CURL_STATICLIB )
if ( WIN32 )
if ( MSVC )
list ( APPEND CURL_LIBRARIES Wldap32 )
endif ( MSVC )
if ( MINGW )
# MinGW requires a specific order of included libraries ( CURL before ZLib )
find_package ( ZLIB REQUIRED )
list ( APPEND CURL_LIBRARIES ${ ZLIB_LIBRARY } pthread )
endif ( MINGW )
list ( APPEND CURL_LIBRARIES ${ PLATFORM_SPECIFIC_LIBS } )
endif ( WIN32 )
endmacro ( )
2015-06-08 15:50:35 +00:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS "ON" )
2021-12-02 02:06:38 +00:00
if ( BUILD_PEERPLAYS_TESTNET )
set ( GRAPHENE_EGENESIS_JSON "${CMAKE_CURRENT_SOURCE_DIR}/genesis-testnet.json" CACHE PATH "location of the genesis.json to embed in the executable" )
2021-12-02 16:20:03 +00:00
#add_compile_definitions(BUILD_PEERPLAYS_TESTNET=1)
add_definitions ( -DBUILD_PEERPLAYS_TESTNET=1 )
2021-12-02 02:06:38 +00:00
message ( "\n====================\nBuilding for Testnet\n====================\n" )
else ( BUILD_PEERPLAYS_TESTNET )
set ( GRAPHENE_EGENESIS_JSON "${CMAKE_CURRENT_SOURCE_DIR}/genesis-mainnet.json" CACHE PATH "location of the genesis.json to embed in the executable" )
message ( "\n====================\nBuilding for Mainnet\n====================\n" )
endif ( BUILD_PEERPLAYS_TESTNET )
2015-06-08 15:50:35 +00:00
#set (ENABLE_INSTALLER 1)
#set (USE_PCH 1)
if ( USE_PCH )
include ( cotire )
endif ( USE_PCH )
2017-06-03 00:07:14 +00:00
IF ( NOT WIN32 )
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/CMakeModules" )
ENDIF ( NOT WIN32 )
2015-06-08 15:50:35 +00:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/GitVersionGen" )
include ( GetGitRevisionDescription )
get_git_head_revision ( GIT_REFSPEC GIT_SHA2 )
SET ( BOOST_COMPONENTS )
LIST ( APPEND BOOST_COMPONENTS thread
2017-06-03 00:07:14 +00:00
i o s t r e a m s
2015-06-08 15:50:35 +00:00
d a t e _ t i m e
s y s t e m
f i l e s y s t e m
p r o g r a m _ o p t i o n s
s e r i a l i z a t i o n
c h r o n o
u n i t _ t e s t _ f r a m e w o r k
c o n t e x t
l o c a l e )
2021-03-02 18:53:57 +00:00
IF ( ${ GRAPHENE_BUILD_DYNAMIC_LIBRARIES } )
SET ( Boost_USE_STATIC_LIBS OFF CACHE STRING "ON or OFF" )
ELSE ( )
SET ( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
ENDIF ( )
2015-06-08 15:50:35 +00:00
IF ( WIN32 )
SET ( BOOST_ROOT $ENV{ BOOST_ROOT } )
set ( Boost_USE_MULTITHREADED ON )
set ( BOOST_ALL_DYN_LINK OFF ) # force dynamic linking for all libraries
ENDIF ( WIN32 )
2019-05-21 01:32:17 +00:00
FIND_PACKAGE ( Boost 1.67 REQUIRED COMPONENTS ${ BOOST_COMPONENTS } )
2015-06-08 15:50:35 +00:00
# For Boost 1.53 on windows, coroutine was not in BOOST_LIBRARYDIR and do not need it to build, but if boost versin >= 1.54, find coroutine otherwise will cause link errors
IF ( NOT "${Boost_VERSION}" MATCHES "1.53(.*)" )
SET ( BOOST_LIBRARIES_TEMP ${ Boost_LIBRARIES } )
FIND_PACKAGE ( Boost 1.54 REQUIRED COMPONENTS coroutine )
LIST ( APPEND BOOST_COMPONENTS coroutine )
SET ( Boost_LIBRARIES ${ BOOST_LIBRARIES_TEMP } ${ Boost_LIBRARIES } )
ENDIF ( )
if ( WIN32 )
2015-06-17 16:33:38 +00:00
2020-10-16 14:38:21 +00:00
message ( STATUS "Configuring Peerplays on WIN32" )
2015-06-08 15:50:35 +00:00
set ( DB_VERSION 60 )
set ( BDB_STATIC_LIBS 1 )
set ( ZLIB_LIBRARIES "" )
SET ( DEFAULT_EXECUTABLE_INSTALL_DIR bin/ )
set ( CRYPTO_LIB )
#looks like this flag can have different default on some machines.
SET ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO" )
SET ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO" )
# Probably cmake has a bug and vcxproj generated for executable in Debug conf. has disabled debug info
set ( CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG" )
# On windows tcl should be installed to the directory pointed by setenv.bat script
SET ( TCL_INCLUDE_PATH $ENV{ TCL_ROOT } /include )
MESSAGE ( STATUS "tcl INCLUDE PATH: ${TCL_INCLUDE_PATH}" )
FIND_PACKAGE ( TCL )
MESSAGE ( STATUS "tcl_library: ${TCL_LIBRARY}" )
SET ( TCL_LIBS "optimized;${TCL_LIBRARY};debug;" )
get_filename_component ( TCL_LIB_PATH "${TCL_LIBRARY}" PATH )
get_filename_component ( TCL_LIB_NAME "${TCL_LIBRARY}" NAME_WE )
get_filename_component ( TCL_LIB_EXT "${TCL_LIBRARY}" EXT )
SET ( TCL_LIBS "${TCL_LIBS}${TCL_LIB_PATH}/${TCL_LIB_NAME}g${TCL_LIB_EXT}" )
SET ( TCL_LIBRARY ${ TCL_LIBS } )
else ( WIN32 ) # Apple AND Linux
if ( APPLE )
# Apple Specific Options Here
2020-10-16 14:38:21 +00:00
message ( STATUS "Configuring Peerplays on OS X" )
2020-08-19 00:37:41 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -stdlib=libc++ -Wall" )
2015-06-08 15:50:35 +00:00
else ( APPLE )
# Linux Specific Options Here
2020-10-16 14:38:21 +00:00
message ( STATUS "Configuring Peerplays on Linux" )
2020-08-19 00:37:41 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall" )
2015-06-08 15:50:35 +00:00
set ( rt_library rt )
2019-08-14 12:05:30 +00:00
#set( pthread_library pthread)
set ( CMAKE_LINKER_FLAGS "-pthread" CACHE STRING "Linker Flags" FORCE )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE )
set ( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE )
2015-06-08 15:50:35 +00:00
if ( NOT DEFINED crypto_library )
# I'm not sure why this is here, I guess someone has openssl and can't detect it with find_package()?
# if you have a normal install, you can define crypto_library to the empty string to avoid a build error
set ( crypto_library crypto )
endif ( )
if ( FULL_STATIC_BUILD )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc" )
endif ( FULL_STATIC_BUILD )
endif ( APPLE )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
2020-12-18 13:23:37 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
2017-04-26 16:59:20 +00:00
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
2017-04-26 17:22:54 +00:00
if ( CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.0.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0.0 )
2017-04-26 16:59:20 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization" )
endif ( )
2015-06-08 15:50:35 +00:00
endif ( )
if ( "${CMAKE_GENERATOR}" STREQUAL "Ninja" )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics" )
endif ( )
endif ( )
# based on http://www.delorie.com/gnu/docs/gdb/gdb_70.html
# uncomment this line to tell GDB about macros (slows compile times)
# set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-2 -g3" )
endif ( WIN32 )
2020-10-16 14:38:21 +00:00
set ( ENABLE_COVERAGE_TESTING FALSE CACHE BOOL "Build Peerplays for code coverage analysis" )
2015-09-21 13:30:51 +00:00
2015-06-08 15:50:35 +00:00
if ( ENABLE_COVERAGE_TESTING )
SET ( CMAKE_CXX_FLAGS "--coverage ${CMAKE_CXX_FLAGS}" )
endif ( )
add_subdirectory ( libraries )
2016-02-26 18:38:11 +00:00
2020-10-26 22:02:22 +00:00
set ( BUILD_PEERPLAYS_PROGRAMS TRUE CACHE BOOL "Build peerplays executables (witness node, cli wallet, etc)" )
2015-06-08 15:50:35 +00:00
add_subdirectory ( programs )
2016-02-26 18:38:11 +00:00
2020-10-16 14:38:21 +00:00
set ( BUILD_PEERPLAYS_TESTS TRUE CACHE BOOL "Build peerplays unit tests" )
if ( BUILD_PEERPLAYS_TESTS )
2016-02-26 18:38:11 +00:00
add_subdirectory ( tests )
2020-10-16 14:38:21 +00:00
endif ( BUILD_PEERPLAYS_TESTS )
2015-06-08 15:50:35 +00:00
if ( ENABLE_INSTALLER )
set ( VERSION_MAJOR 0 )
set ( VERSION_MINOR 1 )
set ( VERSION_PATCH 0 )
include ( InstallRequiredSystemLibraries )
set ( CPACK_OUTPUT_FILE_PREFIX ${ CMAKE_BINARY_DIR } /packages )
set ( CMAKE_INSTALL_PREFIX ${ CMAKE_BINARY_DIR } /install )
SET ( CPACK_PACKAGE_DIRECTORY "${CMAKE_INSTALL_PREFIX}" )
set ( CPACK_PACKAGE_NAME "graphene" )
2015-09-21 13:30:51 +00:00
set ( CPACK_PACKAGE_VENDOR "Cryptonomex, Inc." )
2015-06-08 15:50:35 +00:00
set ( CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}" )
set ( CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}" )
set ( CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}" )
set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" )
2020-10-16 14:38:21 +00:00
set ( CPACK_PACKAGE_DESCRIPTION "A client for the Peerplays network" )
set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "A client for the Peerplays network" )
2015-06-08 15:50:35 +00:00
set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" )
2020-10-16 14:38:21 +00:00
set ( CPACK_PACKAGE_INSTALL_DIRECTORY "Peerplays ${CPACK_PACKAGE_VERSION}" )
2015-06-08 15:50:35 +00:00
if ( WIN32 )
SET ( CPACK_GENERATOR "ZIP;NSIS" )
2020-10-16 14:38:21 +00:00
set ( CPACK_PACKAGE_NAME "Peerplays" ) # override above
2015-06-08 15:50:35 +00:00
set ( CPACK_NSIS_EXECUTABLES_DIRECTORY . )
2020-10-16 14:38:21 +00:00
set ( CPACK_NSIS_PACKAGE_NAME "Peerplays v${CPACK_PACKAGE_VERSION}" )
2015-06-08 15:50:35 +00:00
set ( CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}" )
2020-10-16 14:38:21 +00:00
set ( CPACK_NSIS_DEFINES " !define MUI_STARTMENUPAGE_DEFAULTFOLDER \\\" Peerplays\\\ "" )
2015-06-08 15:50:35 +00:00
# it seems like windows zip files usually don't have a single directory inside them, unix tgz frequently do
SET ( CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0 )
endif ( WIN32 )
if ( APPLE )
set ( CPACK_GENERATOR "DragNDrop" )
endif ( )
if ( LINUX )
# Linux gets a .tgz
SET ( CPACK_GENERATOR "TGZ" )
SET ( CPACK_INCLUDE_TOPLEVEL_DIRECTORY 1 )
endif ( LINUX )
2015-09-21 13:30:51 +00:00
include ( CPack )
2015-06-08 15:50:35 +00:00
endif ( ENABLE_INSTALLER )
2020-10-16 14:38:21 +00:00
2021-12-02 02:06:38 +00:00
unset ( GRAPHENE_EGENESIS_JSON )
unset ( GRAPHENE_EGENESIS_JSON CACHE )
unset ( BUILD_PEERPLAYS_TESTNET )
unset ( BUILD_PEERPLAYS_TESTNET CACHE )