cmake_minimum_required( VERSION 3.5 ) include(${CMAKE_CURRENT_SOURCE_DIR}/externals/ethereum/evmc/cmake/cable/bootstrap.cmake) include(CableBuildInfo) include(CableBuildType) include(CableToolchains) include(GNUInstallDirs) #cable_configure_toolchain(DEFAULT cxx11) set(ETH_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals/ethereum/cmake" CACHE PATH "The path to the cmake directory") list(APPEND CMAKE_MODULE_PATH ${ETH_CMAKE_DIR}) # Defines EOS library target. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/CMakeModules") set(CPP_ETHEREUM_DIR "${CMAKE_SOURCE_DIR}/externals/ethereum" CACHE PATH "Path to the root directory for cpp-ethereum") if(CMAKE_CONFIGURATION_TYPES) set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE) endif() # Map current configuration to configurations of imported targets. #set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Release) #set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release) set(HUNTER_CONFIGURATION_TYPES Release) set(HUNTER_JOBS_NUMBER 4) set(HUNTER_CACHE_SERVERS "https://github.com/ethereum/hunter-cache") set(HUNTER_PASSWORDS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Hunter/passwords.cmake) # In CI builds upload the binaries if the GITHUB_USER_PASSWORD was decrypted # (only for branches and internal PRs). if("$ENV{CI}" AND NOT "$ENV{GITHUB_USER_PASSWORD}" STREQUAL "") set(run_upload YES) else() set(run_upload NO) endif() option(HUNTER_RUN_UPLOAD "Upload binaries to the cache server" ${run_upload}) include(HunterGate) HunterGate( URL "https://github.com/learnforpractice/hunter/archive/v0.20.27.4.tar.gz" SHA1 "882c17534196984878955f7d963b02ad7a41c0c4" LOCAL ) # Defines EOS library target. project( EOSIO ) enable_testing() if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) message(WARNING "CMAKE_INSTALL_PREFIX is set to default path of ${CMAKE_INSTALL_PREFIX}, resetting to ${CMAKE_INSTALL_PREFIX}/eosio") set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/eosio") elseif ("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") message(WARNING "CMAKE_INSTALL_PREFIX is explicitly set to /usr/local. This is not recommended.") endif() if (UNIX) if (APPLE) if (LLVM_DIR STREQUAL "" OR NOT LLVM_DIR) set(LLVM_DIR "/usr/local/Cellar/llvm@4/4.0.1/lib/cmake/llvm") endif() endif() endif() include( GNUInstallDirs ) include( VersionMacros ) include( SetupTargetMacros ) include( InstallDirectoryPermissions ) include( MASSigning ) set( BLOCKCHAIN_NAME "EOSIO" ) set( CMAKE_CXX_STANDARD 14 ) set( CMAKE_CXX_EXTENSIONS ON ) set( CXX_STANDARD_REQUIRED ON) set(VERSION_MAJOR 1) set(VERSION_MINOR 4) set(VERSION_PATCH 3) set( CLI_CLIENT_EXECUTABLE_NAME cleos ) set( NODE_EXECUTABLE_NAME nodeos ) set( KEY_STORE_EXECUTABLE_NAME keosd ) set( GUI_CLIENT_EXECUTABLE_NAME eosio ) set( CUSTOM_URL_SCHEME "gcs" ) set( INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347" ) #set( BUILD_ETHEREUM TRUE) # http://stackoverflow.com/a/18369825 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0) message(FATAL_ERROR "GCC version must be at least 6.0!") endif() elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) message(FATAL_ERROR "Clang version must be at least 4.0!") endif() endif() set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") set(BUILD_DOXYGEN FALSE CACHE BOOL "Build doxygen documentation on every make") #set(BUILD_MONGO_DB_PLUGIN FALSE CACHE BOOL "Build mongo database plugin") #set (USE_PCH 1) if (USE_PCH) include (cotire) endif(USE_PCH) hunter_add_package(OpenSSL) find_package(OpenSSL REQUIRED) #find_package(Secp256k1 REQUIRED) if(UNIX) if(APPLE) # set(whole_archive_flag "-force_load") set(no_whole_archive_flag "") else() set(whole_archive_flag "--whole-archive") set(no_whole_archive_flag "--no-whole-archive") endif() else() set(whole_archive_flag "--whole-archive") set(no_whole_archive_flag "--no-whole-archive") endif() hunter_add_package(BZip2) find_package( BZip2 ) include(ProjectLibFF) SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" ) set(Boost_USE_MULTITHREADED ON CACHE STRING "ON or OFF" ) if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set(DEBUG_FLAG ON CACHE STRING "d") endif() IF( WIN32 ) SET(BOOST_ROOT $ENV{BOOST_ROOT}) set(BOOST_ALL_DYN_LINK OFF) # force dynamic linking for all libraries ENDIF(WIN32) hunter_add_package(Boost COMPONENTS thread date_time filesystem system program_options signals serialization chrono test context locale iostreams fiber log) find_package(Boost CONFIG REQUIRED thread date_time filesystem system program_options signals serialization chrono unit_test_framework context locale iostreams fiber log) if( WIN32 ) message( STATUS "Configuring EOSIO 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 if( APPLE ) # Apple Specific Options Here message( STATUS "Configuring EOSIO on OS X" ) set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-deprecated-declarations" ) else( APPLE ) # Linux Specific Options Here message( STATUS "Configuring EOSIO on Linux" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC" ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC" ) if ( FULL_STATIC_BUILD ) set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc") endif ( FULL_STATIC_BUILD ) if( "${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() endif( APPLE ) if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp" ) 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 ) if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG" ) endif() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") set(ENABLE_COVERAGE_TESTING FALSE CACHE BOOL "Build EOSIO for code coverage analysis") if(ENABLE_COVERAGE_TESTING) SET(CMAKE_CXX_FLAGS "--coverage ${CMAKE_CXX_FLAGS}") find_program( LCOV_PATH lcov ) find_program( LLVMCOV_PATH llvm-cov ) find_program( GENHTML_PATH NAMES genhtml) endif() include(utils) add_subdirectory( externals ) set( CORE_SYMBOL_NAME "EOS" ) string(TOUPPER ${CORE_SYMBOL_NAME} CORE_SYMBOL_NAME) string(LENGTH ${CORE_SYMBOL_NAME} CORE_SYMBOL_NAME_LENGTH) if (CORE_SYMBOL_NAME_LENGTH GREATER 7) message(FATAL_ERROR "CORE_SYMBOL_NAME length must be between 1 and 7 characters") endif() message( STATUS "Using '${CORE_SYMBOL_NAME}' as CORE symbol name" ) if ("${EOSIO_ROOT_KEY}" STREQUAL "") set(EOSIO_ROOT_KEY "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV") endif() message( STATUS "Using '${EOSIO_ROOT_KEY}' as public key for 'eosio' account" ) include(wasm) add_subdirectory( libraries ) add_subdirectory( contracts ) add_subdirectory( plugins ) add_subdirectory( programs ) add_subdirectory( scripts ) add_subdirectory( unittests ) add_subdirectory( tests ) add_subdirectory( tools ) add_subdirectory( debian ) install_directory_permissions(DIRECTORY ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio) install(FILES testnet.template DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio/launcher) install_directory_permissions(DIRECTORY ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio) install_directory_permissions(DIRECTORY ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio/launcher) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/testnet.template ${CMAKE_CURRENT_BINARY_DIR}/etc/eosio/launcher/testnet.template COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/eosio.version.in ${CMAKE_CURRENT_BINARY_DIR}/eosio.version.hpp) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eosio.version.hpp DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}) set(EOS_ROOT_DIR ${CMAKE_BINARY_DIR}) configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/eosio-config.cmake.in ${CMAKE_BINARY_DIR}/lib/cmake/eosio/eosio-config.cmake @ONLY) configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/EosioTesterBuild.cmake.in ${CMAKE_BINARY_DIR}/lib/cmake/eosio/EosioTester.cmake @ONLY) set(EOS_ROOT_DIR ${CMAKE_INSTALL_PREFIX}) configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/eosio-config.cmake.in ${CMAKE_BINARY_DIR}/modules/eosio-config.cmake @ONLY) install(FILES ${CMAKE_BINARY_DIR}/modules/eosio-config.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/eosio) configure_file(${CMAKE_SOURCE_DIR}/CMakeModules/EosioTester.cmake.in ${CMAKE_BINARY_DIR}/modules/EosioTester.cmake @ONLY) install(FILES ${CMAKE_BINARY_DIR}/modules/EosioTester.cmake DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/eosio) configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/wabt/LICENSE ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.wabt COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/softfloat/COPYING.txt ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.softfloat COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/wasm-jit/LICENSE ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.wavm COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/fc/secp256k1/upstream/COPYING ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.secp256k1 COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/libraries/fc/src/network/LICENSE.go ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.go COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/externals/binaryen/LICENSE ${CMAKE_BINARY_DIR}/licenses/eosio/LICENSE.binaryen COPYONLY) install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/) install(FILES libraries/wabt/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ RENAME LICENSE.wabt) install(FILES libraries/softfloat/COPYING.txt DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ RENAME LICENSE.softfloat) install(FILES libraries/wasm-jit/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ RENAME LICENSE.wavm) install(FILES libraries/fc/secp256k1/upstream/COPYING DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ RENAME LICENSE.secp256k1) install(FILES externals/binaryen/LICENSE DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ RENAME LICENSE.binaryen) install(FILES libraries/fc/src/network/LICENSE.go DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/licenses/eosio/ ) include(package) include(doxygen)