CMakeLists.txt 6.6 KB
Newer Older
1 2
cmake_minimum_required( VERSION 3.5 )

D
Daniel Larimer 已提交
3 4
# Defines EOS library target.
project( EOS )
B
Bucky Kittinger 已提交
5

6 7
enable_testing()

D
Daniel Larimer 已提交
8
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/CMakeModules")
9
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
D
Daniel Larimer 已提交
10

J
Jonathan Giszczak 已提交
11
include( GNUInstallDirs )
12 13 14
include( VersionMacros )
include( SetupTargetMacros )
include( InstallDirectoryPermissions )
D
Daniel Larimer 已提交
15

N
Nathan Hourt 已提交
16
set( BLOCKCHAIN_NAME "Eos" )
N
Nathan Hourt 已提交
17
set( CMAKE_CXX_STANDARD 14 )
18 19
set( CMAKE_CXX_EXTENSIONS ON )
set( CXX_STANDARD_REQUIRED ON)
N
Nathan Hourt 已提交
20

21 22
set(VERSION_MAJOR 3)
set(VERSION_MINOR 0)
K
Kevin Heifner 已提交
23
set(VERSION_PATCH 0)
J
jgiszczak 已提交
24

25
set( CLI_CLIENT_EXECUTABLE_NAME cleos )
26
set( GUI_CLIENT_EXECUTABLE_NAME eosio )
N
Nathan Hourt 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
set( CUSTOM_URL_SCHEME "gcs" )
set( INSTALLER_APP_ID "68ad7005-8eee-49c9-95ce-9eed97e5b347" )

# 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()


set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
43
set(BUILD_DOXYGEN FALSE CACHE BOOL "Build doxygen documentation on every make")
44
set(BUILD_MONGO_DB_PLUGIN FALSE CACHE BOOL "Build mongo database plugin")
N
Nathan Hourt 已提交
45 46 47 48 49 50 51 52
set(EOS_EGENESIS_JSON "${CMAKE_CURRENT_SOURCE_DIR}/genesis.json" )

#set (USE_PCH 1)

if (USE_PCH)
  include (cotire)
endif(USE_PCH)

B
Bucky Kittinger 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
# add defaults for openssl
if ("${OPENSSL_ROOT_DIR}" STREQUAL "")
   if (NOT "$ENV{OPENSSL_ROOT_DIR}" STREQUAL "")
      set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
      set(OPENSSL_INCLUDE_DIR ${OPENSSL_ROOT_DIR}/include)
   elseif (APPLE)
      set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
      set(OPENSSL_INCLUDE_DIR "/usr/local/opt/openssl/include")
   elseif(UNIX AND NOT APPLE)
      set(OPENSSL_ROOT_DIR "/usr/include/openssl")
      set(OPENSSL_INCLUDE_DIR "/usr/include/openssl/include")
   else()
      message(FATAL_ERROR "openssl not found and don't know where to look, please specify OPENSSL_ROOT_DIR")
   endif()
endif()

69 70 71 72 73 74 75 76 77 78 79 80 81
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()

82
SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
N
Nathan Hourt 已提交
83 84 85 86 87
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)
D
Daniel Larimer 已提交
88
FIND_PACKAGE(Boost 1.66 REQUIRED COMPONENTS
89 90 91
    thread
    date_time
    filesystem
92
    system
93 94 95 96 97 98
    program_options
    signals
    serialization
    chrono
    unit_test_framework
    context
99 100
    locale
    iostreams)
N
Nathan Hourt 已提交
101 102 103

if( WIN32 )

104
    message( STATUS "Configuring Eos on WIN32")
N
Nathan Hourt 已提交
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
    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
139
        message( STATUS "Configuring Eos on OS X" )
140
        set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-deprecated-declarations" )
N
Nathan Hourt 已提交
141 142
    else( APPLE )
        # Linux Specific Options Here
143
        message( STATUS "Configuring Eos on Linux" )
144
        set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall" )
N
Nathan Hourt 已提交
145 146 147
        if ( FULL_STATIC_BUILD )
          set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
        endif ( FULL_STATIC_BUILD )
N
Nathan Hourt 已提交
148 149 150 151 152 153

        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()
N
Nathan Hourt 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
    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 )

172
set(ENABLE_COVERAGE_TESTING FALSE CACHE BOOL "Build Eos for code coverage analysis")
N
Nathan Hourt 已提交
173 174

if(ENABLE_COVERAGE_TESTING)
C
Ciju John 已提交
175 176
  SET(CMAKE_CXX_FLAGS "--coverage ${CMAKE_CXX_FLAGS}")
  find_program( LCOV_PATH  lcov )
177
  find_program( LLVMCOV_PATH  llvm-cov )
C
Ciju John 已提交
178
  find_program( GENHTML_PATH NAMES genhtml)
N
Nathan Hourt 已提交
179 180
endif()

J
Jonathan Giszczak 已提交
181 182
add_subdirectory( externals )

183
include(wasm)
A
Andrianto Lie 已提交
184

N
Nathan Hourt 已提交
185
add_subdirectory( libraries )
186
add_subdirectory( contracts )
N
Nathan Hourt 已提交
187
add_subdirectory( plugins )
188
add_subdirectory( programs )
189
add_subdirectory( scripts )
190
add_subdirectory( tests )
191
add_subdirectory( unittests )
192
add_subdirectory( tools )
193
add_subdirectory( debian )
N
Nathan Hourt 已提交
194

J
Jonathan Giszczak 已提交
195
install_directory_permissions(DIRECTORY ${CMAKE_INSTALL_FULL_SYSCONFDIR}/eosio)
J
jgiszczak 已提交
196

197 198 199 200 201
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)

202
include(installer)
A
Andrianto Lie 已提交
203

204
include(doxygen)