set(TARGET_NAME evmjit) set(SOURCES Arith256.cpp Arith256.h Array.cpp Array.h BasicBlock.cpp BasicBlock.h Cache.cpp Cache.h Common.h Compiler.cpp Compiler.h CompilerHelper.cpp CompilerHelper.h Endianness.cpp Endianness.h ExecStats.cpp ExecStats.h ExecutionEngine.cpp ExecutionEngine.h Ext.cpp Ext.h GasMeter.cpp GasMeter.h Instruction.cpp Instruction.h interface.cpp interface.h Memory.cpp Memory.h Optimizer.cpp Optimizer.h Runtime.cpp Runtime.h RuntimeData.h RuntimeManager.cpp RuntimeManager.h Stack.cpp Stack.h Type.cpp Type.h Utils.cpp Utils.h ) source_group("" FILES ${SOURCES}) if(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") endif() set(EVMJIT_VERSION "0.0.0") set(EVMJIT_VERSION_MAJOR 0) set(EVMJIT_VERSION_MINOR 0) set(EVMJIT_VERSION_PATCH 0) set(EVMJIT_VERSION_FULL "v0.0.0-nogit") find_package(Git) if(GIT_FOUND) execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} describe --dirty --always --match v* OUTPUT_VARIABLE EVMJIT_VERSION_FULL OUTPUT_STRIP_TRAILING_WHITESPACE) endif() if(${EVMJIT_VERSION_FULL} MATCHES "^v[0-9]+\\.[0-9]+") string(SUBSTRING ${EVMJIT_VERSION_FULL} 1 -1 EVMJIT_VERSION_FULL) # skip "v" string(REPLACE "-" ";" VERSION_COMPONENTS ${EVMJIT_VERSION_FULL}) list(LENGTH VERSION_COMPONENTS NUM_VERSION_COMPONENTS) list(GET VERSION_COMPONENTS 0 EVMJIT_VERSION) string(REPLACE "." ";" VERSION_NUMBERS ${EVMJIT_VERSION}) list(LENGTH VERSION_NUMBERS NUM_VERSION_NUMBERS) list(GET VERSION_NUMBERS 0 EVMJIT_VERSION_MAJOR) list(GET VERSION_NUMBERS 1 EVMJIT_VERSION_MINOR) if(${NUM_VERSION_NUMBERS} GREATER 2) list(GET VERSION_NUMBERS 2 EVMJIT_VERSION_PATCH) # patch number is optional endif() if(${NUM_VERSION_COMPONENTS} GREATER 1) list(GET VERSION_COMPONENTS 1 VERSION_PRERELEASE_CANDIDATE) string(REGEX MATCH "^[a-zA-Z]+.*" EVMJIT_VERSION_PRERELEASE ${VERSION_PRERELEASE_CANDIDATE}) # prerelease starts with letter endif() endif() if(${EVMJIT_VERSION_MAJOR} EQUAL 0) set(EVMJIT_SOVERSION "0.${EVMJIT_VERSION_MINOR}") else() set(EVMJIT_SOVERSION ${EVMJIT_VERSION_MAJOR}) endif() string(COMPARE EQUAL "${LLVM_ENABLE_ASSERTIONS}" "ON" LLVM_DEBUG) configure_file(BuildInfo.h.in ${CMAKE_CURRENT_BINARY_DIR}/gen/BuildInfo.gen.h) message(STATUS "EVM JIT version: ${EVMJIT_VERSION_MAJOR}.${EVMJIT_VERSION_MINOR}.${EVMJIT_VERSION_PATCH} ${EVMJIT_VERSION_PRERELEASE} (${EVMJIT_VERSION_FULL})") add_library(${TARGET_NAME} SHARED ${SOURCES} gen/BuildInfo.gen.h) set_target_properties(${TARGET_NAME} PROPERTIES VERSION ${EVMJIT_VERSION} SOVERSION ${EVMJIT_SOVERSION} FOLDER "libs") include_directories(${LLVM_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}/gen) target_link_libraries(${TARGET_NAME} PRIVATE ${LLVM_LIBS}) install(TARGETS ${TARGET_NAME} LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin)