CMakeLists.txt 6.1 KB
Newer Older
D
Daniel Larimer 已提交
1 2
# Defines EOS library target.
project( EOS )
N
Nathan Hourt 已提交
3 4
cmake_minimum_required( VERSION 2.8.12 )

5 6
enable_testing()

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

INCLUDE( VersionMacros )
INCLUDE( SetupTargetMacros )

N
Nathan Hourt 已提交
13
set( BLOCKCHAIN_NAME "Eos" )
N
Nathan Hourt 已提交
14
set( CMAKE_CXX_STANDARD 14 )
N
Nathan Hourt 已提交
15

16 17
set(VERSION_MAJOR 3)
set(VERSION_MINOR 0)
K
Kevin Heifner 已提交
18
set(VERSION_PATCH 1)
J
jgiszczak 已提交
19

N
Nathan Hourt 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
set( CLI_CLIENT_EXECUTABLE_NAME eos_client )
set( GUI_CLIENT_EXECUTABLE_NAME eos )
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()

36

N
Nathan Hourt 已提交
37 38

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

#set (USE_PCH 1)

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


50 51 52 53 54 55 56 57 58 59 60 61 62
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()

63
SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
N
Nathan Hourt 已提交
64 65 66 67 68
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)
69 70 71 72 73 74 75 76 77 78 79 80
FIND_PACKAGE(Boost 1.64 REQUIRED COMPONENTS
    thread
    date_time
    system
    filesystem
    program_options
    signals
    serialization
    chrono
    unit_test_framework
    context
    locale)
N
Nathan Hourt 已提交
81 82 83

if( WIN32 )

84
    message( STATUS "Configuring Eos on WIN32")
N
Nathan Hourt 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
    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
125
        message( STATUS "Configuring Eos on OS X" )
126 127
#set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++14 -Wall -Wno-invalid-partial-specialization -Wno-deprecated-declarations" )
        set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++14 -Wall -Wno-deprecated-declarations" )
N
Nathan Hourt 已提交
128 129
    else( APPLE )
        # Linux Specific Options Here
130
        message( STATUS "Configuring Eos on Linux" )
N
Nathan Hourt 已提交
131
        set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -Wall" )
N
Nathan Hourt 已提交
132 133 134
        if ( FULL_STATIC_BUILD )
          set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
        endif ( FULL_STATIC_BUILD )
N
Nathan Hourt 已提交
135 136 137 138 139 140

        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 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
    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 )

159
set(ENABLE_COVERAGE_TESTING FALSE CACHE BOOL "Build Eos for code coverage analysis")
N
Nathan Hourt 已提交
160 161

if(ENABLE_COVERAGE_TESTING)
C
Ciju John 已提交
162 163 164
  SET(CMAKE_CXX_FLAGS "--coverage ${CMAKE_CXX_FLAGS}")
  find_program( LCOV_PATH  lcov )
  find_program( GENHTML_PATH NAMES genhtml)
N
Nathan Hourt 已提交
165 166
endif()

167 168 169 170 171 172 173
include(wasm)
if(WASM_TOOLCHAIN)
  message(STATUS "Using WASM clang => " ${WASM_CLANG})
  message(STATUS "Using WASM llc => " ${WASM_LLC})
  message(STATUS "Using WASM llvm-link => " ${WASM_LLVM_LINK})
  add_subdirectory(contracts)
else()
J
Jonathan Giszczak 已提交
174 175 176
  message(STATUS "--------------------------------------------------------------------")
  message(STATUS "No WASM compiler could be found ... (skipping building of contracts)")
  message(STATUS "--------------------------------------------------------------------")
177 178
endif()

A
Andrianto Lie 已提交
179 180
include(installer)

N
Nathan Hourt 已提交
181
add_subdirectory( libraries )
N
Nathan Hourt 已提交
182
add_subdirectory( plugins )
183
add_subdirectory( programs )
184
add_subdirectory( scripts )
N
Nathan Hourt 已提交
185
add_subdirectory( tests )
186
add_subdirectory( tools )
N
Nathan Hourt 已提交
187

188
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/genesis.json ${CMAKE_CURRENT_BINARY_DIR}/genesis.json COPYONLY)
J
jgiszczak 已提交
189

A
Andrianto Lie 已提交
190

191
include(doxygen)