get_filename_component(EVMJIT_INCLUDE_DIR ../include ABSOLUTE) set(SOURCES ${EVMJIT_INCLUDE_DIR}/evm.h JIT.cpp JIT.h 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 Ext.cpp Ext.h GasMeter.cpp GasMeter.h Instruction.cpp Instruction.h Memory.cpp Memory.h Optimizer.cpp Optimizer.h RuntimeManager.cpp RuntimeManager.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 -fvisibility=hidden") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,ALL") # Do not export symbols from dependies, mostly LLVM libs 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) # "Object" library to allow building both static and shared libraries. add_library(evmjit-objs OBJECT ${SOURCES} gen/BuildInfo.gen.h) # PIC is required by shared libraries. We want it in the static library as well, # because it is going to be used to create e.g. Python modules (shared libraries). set_target_properties(evmjit-objs PROPERTIES POSITION_INDEPENDENT_CODE On) target_compile_definitions(evmjit-objs PRIVATE evmjit_EXPORTS) target_compile_definitions(evmjit-objs PRIVATE ${LLVM_DEFINITIONS}) target_include_directories(evmjit-objs SYSTEM PRIVATE ${LLVM_INCLUDE_DIRS}) target_include_directories(evmjit-objs PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gen) target_include_directories(evmjit-objs PUBLIC ${EVMJIT_INCLUDE_DIR}) # Static library. add_library(evmjit-static STATIC $) target_link_libraries(evmjit-static PRIVATE ${LLVM_LIBS}) # Shared library. add_library(evmjit SHARED $) set_target_properties(evmjit PROPERTIES VERSION ${EVMJIT_VERSION} SOVERSION ${EVMJIT_SOVERSION} FOLDER "libs") target_link_libraries(evmjit PRIVATE ${LLVM_LIBS}) include(GNUInstallDirs) install(TARGETS evmjit RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(DIRECTORY ${EVMJIT_INCLUDE_DIR}/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) #No need for an evmjit-standalone library since LLVM_LIBS includes all #the depedencies of LLVM, so "evmjit-standalone" can be be replaced by #"evmjit-static". Deleted section configuring evmjit-standalone -- a static library #containing evmjit and all its static dependencies.