# cmake global cmake_minimum_required(VERSION 2.8.12) # let cmake autolink dependencies on windows # it's specified globally, cause qt libraries requires that on windows and they are also found globally cmake_policy(SET CMP0020 NEW) 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(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") set(JSONRPC ON CACHE BOOL "Build with jsonprc. default on") endfunction() # propagates CMake configuration options to the compiler function(configureProject) 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_CXX_COMPILER_ID}" STREQUAL "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 () #cmake build type may be not specified when using msvc if (${CMAKE_BUILD_TYPE}) set(_cmake_build_type ${CMAKE_BUILD_TYPE}) else() set(_cmake_build_type "undefined") 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("-- VMTRACE: ${VMTRACE}; PARANOIA: ${PARANOIA}; HEADLESS: ${HEADLESS}; JSONRPC: ${JSONRPC}") # 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 () include(EthCompilerSettings) message("-- CXXFLAGS: ${CMAKE_CXX_FLAGS}") # this must be an include, as a function it would messs up with variable scope! include(EthDependencies) include(EthExecutableHelper) createBuildInfo() add_subdirectory(libdevcore) add_subdirectory(libevmcore) add_subdirectory(liblll) add_subdirectory(libserpent) add_subdirectory(libsolidity) add_subdirectory(lllc) add_subdirectory(solc) add_subdirectory(sc) if (JSONRPC) add_subdirectory(libweb3jsonrpc) endif() add_subdirectory(secp256k1) add_subdirectory(libp2p) add_subdirectory(libdevcrypto) add_subdirectory(libwhisper) add_subdirectory(libethcore) add_subdirectory(libevm) add_subdirectory(libethereum) # TODO is this 'TODO remove' still valid? # 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 () # TODO check msvc if(NOT ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")) add_subdirectory(neth) endif () if (NOT HEADLESS) add_subdirectory(libjsqrc) add_subdirectory(libqethereum) add_subdirectory(alethzero) add_subdirectory(third) add_subdirectory(mix) endif() enable_testing() add_test(NAME alltests WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test COMMAND testeth) #unset(TARGET_PLATFORM CACHE)