|
|
|
# cmake global
|
|
|
|
cmake_minimum_required(VERSION 2.8.9)
|
|
|
|
|
|
|
|
project(ethereum)
|
|
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
|
|
|
|
|
|
|
|
######################################################################################################
|
|
|
|
|
|
|
|
# user defined, defaults
|
|
|
|
# Normally, set(...CACHE...) creates cache variables, but does not modify them.
|
|
|
|
function(createDefaultCacheConfig)
|
|
|
|
set(HEADLESS OFF CACHE BOOL "Do not compile GUI (AlethZero)")
|
|
|
|
set(LANGUAGES OFF CACHE BOOL "Limit build to Serpent/LLL tools")
|
|
|
|
set(VMTRACE OFF CACHE BOOL "VM tracing and run-time checks (useful for cross-implementation VM debugging)")
|
|
|
|
set(PARANOIA OFF CACHE BOOL "Additional run-time checks")
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
|
|
# propagates CMake configuration options to the compiler
|
|
|
|
function(configureProject)
|
|
|
|
if (LANGUAGES)
|
|
|
|
add_definitions(-DETH_LANGUAGES)
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (PARANOIA)
|
|
|
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
|
|
|
add_definitions(-DETH_PARANOIA)
|
|
|
|
else ()
|
|
|
|
message(FATAL_ERROR "Paranoia requires debug.")
|
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (VMTRACE)
|
|
|
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
|
|
|
add_definitions(-DETH_VMTRACE)
|
|
|
|
else ()
|
|
|
|
message(FATAL_ERROR "VM tracing requires debug.")
|
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
|
|
function(createBuildInfo)
|
|
|
|
# Set build platform; to be written to BuildInfo.h
|
|
|
|
if (CMAKE_COMPILER_IS_MINGW)
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/mingw")
|
|
|
|
elseif (CMAKE_COMPILER_IS_MSYS)
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/msys")
|
|
|
|
elseif (CMAKE_COMPILER_IS_GNUCXX)
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/g++")
|
|
|
|
elseif (CMAKE_COMPILER_IS_MSVC)
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/msvc")
|
|
|
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/clang")
|
|
|
|
else ()
|
|
|
|
set(ETH_BUILD_PLATFORM "${ETH_BUILD_PLATFORM}/unknown")
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
# Generate header file containing useful build information
|
|
|
|
add_custom_target(BuildInfo.h ALL COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo.sh ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BUILD_TYPE} ${ETH_BUILD_PLATFORM})
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
set(SRC_LIST BuildInfo.h)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
######################################################################################################
|
|
|
|
|
|
|
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
cmake_policy(SET CMP0015 NEW)
|
|
|
|
|
|
|
|
|
|
|
|
createDefaultCacheConfig()
|
|
|
|
configureProject()
|
|
|
|
message("-- LANGUAGES: ${LANGUAGES}; VMTRACE: ${VMTRACE}; PARANOIA: ${PARANOIA}; HEADLESS: ${HEADLESS}")
|
|
|
|
|
|
|
|
|
|
|
|
# Default TARGET_PLATFORM to "linux".
|
|
|
|
set(TARGET_PLATFORM CACHE STRING "linux")
|
|
|
|
if ("x${TARGET_PLATFORM}" STREQUAL "x")
|
|
|
|
set(TARGET_PLATFORM "linux")
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if ("${TARGET_PLATFORM}" STREQUAL "linux")
|
|
|
|
set(CMAKE_THREAD_LIBS_INIT pthread)
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
# Set default build type to Release w/debug info
|
|
|
|
# if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
|
|
|
# set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
|
|
# endif()
|
|
|
|
|
|
|
|
|
|
|
|
include(EthCompilerSettings)
|
|
|
|
message("-- CXXFLAGS: ${CMAKE_CXX_FLAGS}")
|
|
|
|
|
|
|
|
#add_definitions("-DETH_BUILD_TYPE=${ETH_BUILD_TYPE}")
|
|
|
|
#add_definitions("-DETH_BUILD_PLATFORM=${ETH_BUILD_PLATFORM}")
|
|
|
|
|
|
|
|
|
|
|
|
include(EthDependenciesDeprecated)
|
|
|
|
|
|
|
|
createBuildInfo()
|
|
|
|
|
|
|
|
add_subdirectory(libdevcore)
|
|
|
|
add_subdirectory(libevmface)
|
|
|
|
add_subdirectory(liblll)
|
|
|
|
add_subdirectory(libserpent)
|
|
|
|
add_subdirectory(libsolidity)
|
|
|
|
if(NOT APPLE)
|
|
|
|
if(PYTHON_LS)
|
|
|
|
add_subdirectory(libpyserpent)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_subdirectory(lllc)
|
|
|
|
add_subdirectory(solc)
|
|
|
|
add_subdirectory(sc)
|
|
|
|
if (JSONRPC_LS OR (NOT HEADLESS))
|
|
|
|
add_subdirectory(libweb3jsonrpc)
|
|
|
|
endif()
|
|
|
|
if (NOT LANGUAGES)
|
|
|
|
add_subdirectory(secp256k1)
|
|
|
|
add_subdirectory(libp2p)
|
|
|
|
add_subdirectory(libdevcrypto)
|
|
|
|
add_subdirectory(libwhisper)
|
|
|
|
|
|
|
|
add_subdirectory(libethcore)
|
|
|
|
add_subdirectory(libevm)
|
|
|
|
add_subdirectory(libethereum)
|
|
|
|
# add_subdirectory(libethereumx) # TODO remove
|
|
|
|
|
|
|
|
add_subdirectory(libwebthree)
|
|
|
|
add_subdirectory(test)
|
|
|
|
add_subdirectory(eth)
|
|
|
|
if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
|
|
|
|
add_subdirectory(exp)
|
|
|
|
endif ()
|
|
|
|
if(NOT ("${TARGET_PLATFORM}" STREQUAL "w64"))
|
|
|
|
add_subdirectory(neth)
|
|
|
|
endif ()
|
|
|
|
if(QTQML)
|
|
|
|
add_definitions(-DETH_QTQML)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT HEADLESS)
|
|
|
|
if ("${TARGET_PLATFORM}" STREQUAL "w64")
|
|
|
|
cmake_policy(SET CMP0020 NEW)
|
|
|
|
endif ()
|
|
|
|
if (NOT JSONRPC_LS)
|
|
|
|
message(FATAL_ERROR "Alethzero requires jsonrpc.")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_subdirectory(libqethereum)
|
|
|
|
add_subdirectory(alethzero)
|
|
|
|
add_subdirectory(third)
|
|
|
|
if(QTQML)
|
|
|
|
#add_subdirectory(iethxi)
|
|
|
|
#add_subdirectory(walleth) // resurect once we want to submit ourselves to QML.
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
enable_testing()
|
|
|
|
add_test(NAME alltests WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test COMMAND testeth)
|
|
|
|
|
|
|
|
#unset(TARGET_PLATFORM CACHE)
|
|
|
|
|