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.
222 lines
8.3 KiB
CMake
222 lines
8.3 KiB
CMake
# Defines Peerplays library target.
|
|
project( Peerplays )
|
|
cmake_minimum_required( VERSION 2.8.12 )
|
|
|
|
set( BLOCKCHAIN_NAME "BitShares" )
|
|
|
|
set( CLI_CLIENT_EXECUTABLE_NAME graphene_client )
|
|
set( GUI_CLIENT_EXECUTABLE_NAME BitShares )
|
|
set( CUSTOM_URL_SCHEME "gcs" )
|
|
set( INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347" )
|
|
set( CMAKE_CXX_VERSION 14 )
|
|
|
|
# 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" )
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
|
|
set(GRAPHENE_EGENESIS_JSON "${CMAKE_CURRENT_SOURCE_DIR}/genesis.json" CACHE PATH "location of the genesis.json to embed in the executable" )
|
|
|
|
#set (ENABLE_INSTALLER 1)
|
|
#set (USE_PCH 1)
|
|
|
|
if (USE_PCH)
|
|
include (cotire)
|
|
endif(USE_PCH)
|
|
|
|
IF( NOT WIN32 )
|
|
list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/CMakeModules" )
|
|
ENDIF( NOT WIN32 )
|
|
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
|
|
iostreams
|
|
date_time
|
|
system
|
|
filesystem
|
|
program_options
|
|
serialization
|
|
chrono
|
|
unit_test_framework
|
|
context
|
|
locale)
|
|
SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
|
|
|
|
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)
|
|
|
|
FIND_PACKAGE(Boost 1.67 REQUIRED COMPONENTS ${BOOST_COMPONENTS})
|
|
# 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 )
|
|
|
|
message( STATUS "Configuring BitShares on WIN32")
|
|
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
|
|
|
|
find_library(READLINE_LIBRARIES NAMES readline)
|
|
find_path(READLINE_INCLUDE_DIR readline/readline.h)
|
|
#if(NOT READLINE_INCLUDE_DIR OR NOT READLINE_LIBRARIES)
|
|
# MESSAGE(FATAL_ERROR "Could not find lib readline.")
|
|
#endif()
|
|
|
|
if( APPLE )
|
|
# Apple Specific Options Here
|
|
message( STATUS "Configuring BitShares on OS X" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -stdlib=libc++ -Wall" )
|
|
else( APPLE )
|
|
# Linux Specific Options Here
|
|
message( STATUS "Configuring BitShares on Linux" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall" )
|
|
set( rt_library rt )
|
|
#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)
|
|
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" )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp -Wno-parentheses -Wno-terminate -Wno-invalid-offsetof" )
|
|
elseif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
|
if( CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.0.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0.0 )
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization" )
|
|
endif()
|
|
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 )
|
|
|
|
set(ENABLE_COVERAGE_TESTING FALSE CACHE BOOL "Build BitShares for code coverage analysis")
|
|
|
|
if(ENABLE_COVERAGE_TESTING)
|
|
SET(CMAKE_CXX_FLAGS "--coverage ${CMAKE_CXX_FLAGS}")
|
|
endif()
|
|
|
|
add_subdirectory( libraries )
|
|
|
|
|
|
set(BUILD_BITSHARES_PROGRAMS TRUE CACHE BOOL "Build bitshares executables (witness node, cli wallet, etc)")
|
|
add_subdirectory( programs )
|
|
|
|
set(BUILD_BITSHARES_TESTS TRUE CACHE BOOL "Build bitshares unit tests")
|
|
if( BUILD_BITSHARES_TESTS )
|
|
add_subdirectory( tests )
|
|
endif( BUILD_BITSHARES_TESTS )
|
|
|
|
|
|
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")
|
|
set(CPACK_PACKAGE_VENDOR "Cryptonomex, Inc.")
|
|
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}")
|
|
set(CPACK_PACKAGE_DESCRIPTION "A client for the BitShares network")
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A client for the BitShares network")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md")
|
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "BitShares ${CPACK_PACKAGE_VERSION}")
|
|
|
|
if(WIN32)
|
|
SET(CPACK_GENERATOR "ZIP;NSIS")
|
|
set(CPACK_PACKAGE_NAME "BitShares") # override above
|
|
set(CPACK_NSIS_EXECUTABLES_DIRECTORY .)
|
|
set(CPACK_NSIS_PACKAGE_NAME "BitShares v${CPACK_PACKAGE_VERSION}")
|
|
set(CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}")
|
|
set(CPACK_NSIS_DEFINES " !define MUI_STARTMENUPAGE_DEFAULTFOLDER \\\"BitShares\\\"")
|
|
# 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)
|
|
|
|
include(CPack)
|
|
endif(ENABLE_INSTALLER)
|