github.com/igggame/nebulas-go@v2.1.0+incompatible/nbre/CMakeLists.txt (about) 1 cmake_minimum_required(VERSION 3.12) 2 project(nebulas-blockchain-runtime-environment) 3 add_definitions(-std=c++14) 4 5 if(Release) 6 message(STATUS "This is a Release version") 7 add_definitions(-O2) 8 add_definitions(-DNBRE_PATH=${PROJECT_SOURCE_DIR}) 9 add_definitions(-DNDEBUG) 10 else(Release) 11 add_definitions(-O2) 12 add_definitions(-g) 13 add_definitions(-DNBRE_PATH=${PROJECT_SOURCE_DIR}) 14 endif(Release) 15 16 find_program( 17 CLANG_TIDY_EXE 18 NAMES "clang-tidy" 19 DOC "Path to clang-tidy executable" 20 ) 21 22 if(NOT CLANG_TIDY_EXE) 23 message(STATUS "clang-tidy not found.") 24 else() 25 if(Release) 26 else() 27 message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") 28 set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-checks=*,-clang-analyzer-alpha.*") 29 endif() 30 endif() 31 32 find_package(LLVM REQUIRED CONFIG) 33 include_directories(${LLVM_INCLUDE_DIRS}) 34 add_definitions(${LLVM_DEFINITIONS}) 35 36 include_directories(${PROJECT_SOURCE_DIR}) 37 include_directories(${PROJECT_SOURCE_DIR}/lib/include) 38 link_directories(${PROJECT_SOURCE_DIR}/lib/lib) 39 message(STATUS 'lib dir ' ${PROJECT_SOURCE_DIR}/lib/lib) 40 41 set(CMAKE_SKIP_RPATH true) 42 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin/) 43 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib/lib/) 44 set(LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib/lib/) 45 46 function(enable_clang_tidy target_name) 47 set_target_properties( 48 ${target_name} PROPERTIES 49 CXX_STANDARD 14 50 CXX_STANDARD_REQUIRED ON 51 COMPILE_FLAGS "${WARNING_FLAGS}" 52 ) 53 if(CLANG_TIDY_EXE) 54 set_target_properties( 55 ${target_name} PROPERTIES 56 CXX_CLANG_TIDY "${DO_CLANG_TIDY}" 57 ) 58 endif() 59 endfunction(enable_clang_tidy) 60 61 if(CMAKE_BUILD_TYPE STREQUAL "coverage" OR CODE_COVERAGE) 62 message("Building with llvm Code Coverage Tools") 63 # set Flags 64 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping") 65 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") 66 endif() 67 68 enable_testing() 69 70 71 llvm_map_components_to_libnames(llvm_libs 72 core 73 executionengine 74 interpreter 75 mc mcjit 76 support 77 nativecodegen 78 irreader 79 orcjit 80 ) 81 82 set(jit_libs nbre_jit ${llvm_libs}) 83 84 set(fs_libs nbre_fs nbre_fs_proto bz2 z zstd snappy lz4) 85 86 if(UNIX AND NOT APPLE) 87 set(common_libs ${common_libs} 88 ${PROJECT_SOURCE_DIR}/lib/lib/libgflags.so 89 ${PROJECT_SOURCE_DIR}/lib/lib/libcryptopp.so) 90 set(protobuf_lib ${PROJECT_SOURCE_DIR}/lib/lib/libprotobuf.so) 91 set(cpp_lib ${PROJECT_SOURCE_DIR}/lib/lib/libc++.so) 92 set(Boost_LIBRARIES 93 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_filesystem.so 94 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_system.so 95 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_date_time.so 96 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_graph.so 97 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_thread.so 98 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_program_options.so) 99 set(extra_libs 100 ${PROJECT_SOURCE_DIR}/lib/lib/libglog.so 101 ${PROJECT_SOURCE_DIR}/lib/lib/librocksdb.so.5 102 rt 103 bz2 z zstd snappy lz4 104 ) 105 elseif(UNIX) 106 set(common_libs ${common_libs} 107 ${PROJECT_SOURCE_DIR}/lib/lib/libgflags.dylib 108 ${PROJECT_SOURCE_DIR}/lib/lib/libcryptopp.dylib) 109 set(protobuf_lib ${PROJECT_SOURCE_DIR}/lib/lib/libprotobuf.dylib) 110 set(cpp_lib ${PROJECT_SOURCE_DIR}/lib/lib/libc++.dylib) 111 set(Boost_LIBRARIES 112 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_filesystem.dylib 113 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_system.dylib 114 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_date_time.dylib 115 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_graph.dylib 116 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_thread.dylib 117 ${PROJECT_SOURCE_DIR}/lib/lib/libboost_program_options.dylib) 118 set(extra_libs 119 ${PROJECT_SOURCE_DIR}/lib/lib/libgflags.dylib 120 ${PROJECT_SOURCE_DIR}/lib/lib/libglog.dylib 121 ${PROJECT_SOURCE_DIR}/lib/lib/libbz2.1.dylib 122 rocksdb z zstd snappy lz4) #TODO add rocksdb here 123 endif() 124 set(common_libs nbre_common pthread 125 ${common_libs} 126 ${protobuf_lib} ${cpp_lib} ${Boost_LIBRARIES} 127 ) 128 129 130 message(STATUS "nbre src " ${nbre_src}) 131 file(GLOB nbre_jit_src jit/*.cpp) 132 file(GLOB_RECURSE nbre_rt_src runtime/*.cpp) 133 file(GLOB_RECURSE nbre_common_src common/*.cpp) 134 file(GLOB_RECURSE nbre_fs_src fs/*.cpp) 135 file(GLOB_RECURSE nbre_fs_proto_src fs/proto/*.pb.cc) 136 file(GLOB_RECURSE nbre_core_src core/*.cpp) 137 file(GLOB_RECURSE nbre_util_src util/*.cpp) 138 file(GLOB_RECURSE nbre_crypto_src crypto/*.cpp) 139 140 list(FILTER nbre_core_src EXCLUDE REGEX "core/driver.cpp") 141 list(FILTER nbre_core_src EXCLUDE REGEX "core/neb_ipc*") 142 list(FILTER nbre_common_src EXCLUDE REGEX "common/ipc*") 143 144 add_library(nbre_rt SHARED 145 ${nbre_jit_src} 146 ${nbre_rt_src} 147 ${nbre_common_src} 148 ${nbre_fs_src} 149 ${nbre_fs_proto_src} 150 ${nbre_core_src} 151 ${nbre_util_src} 152 ${nbre_crypto_src} 153 ) 154 if(UNIX AND NOT APPLE) 155 target_link_libraries(nbre_rt ${PROJECT_SOURCE_DIR}/lib/lib/libgflags.so ${llvm_libs} ${protobuf_lib} ${cpp_lib} ${Boost_LIBRARIES} ${extra_libs} ff_functionflow ff_net softfloat c++ cryptopp tcmalloc) 156 elseif(UNIX) 157 target_link_libraries(nbre_rt ${PROJECT_SOURCE_DIR}/lib/lib/libgflags.dylib ${llvm_libs} ${protobuf_lib} ${cpp_lib} ${Boost_LIBRARIES} ${extra_libs} ff_functionflow ff_net softfloat c++ cryptopp tcmalloc) 158 endif() 159 160 if(Release) 161 else() 162 add_subdirectory(test) 163 endif() 164 if(UNIX AND NOT APPLE) 165 add_subdirectory(benchmark) 166 endif() 167 168 169 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_common common/*.h common/*.hpp) 170 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_core core/*.h core/*.hpp) 171 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_rt rt/*.h rt/*.hpp) 172 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_fs fs/*.h fs/*.hpp) 173 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_util util/*.h util/*.hpp) 174 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_crypto crypto/*.h crypto/*.hpp) 175 file(GLOB_RECURSE DEPLOY_FILES_AND_DIRS_runtime runtime/*.h runtime/*.hpp) 176 177 set(DEPLOY_FILES_AND_DIRS ${DEPLOY_FILES_AND_DIRS_common} 178 ${DEPLOY_FILES_AND_DIRS_core} 179 ${DEPLOY_FILES_AND_DIRS_rt} 180 ${DEPLOY_FILES_AND_DIRS_fs} 181 ${DEPLOY_FILES_AND_DIRS_util} 182 ${DEPLOY_FILES_AND_DIRS_crypto} 183 ${DEPLOY_FILES_AND_DIRS_runtime}) 184 185 MACRO(INSTALL_HEADERS_WITH_DIRECTORY HEADER_LIST) 186 187 FOREACH(HEADER ${${HEADER_LIST}}) 188 #STRING(REGEX MATCH "(.\\\*)\\\[/\\\]" DIR ${HEADER}) 189 STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" RPATH ${HEADER}) 190 STRING(REGEX MATCH "(.*)/" DIR ${RPATH}) 191 INSTALL(FILES ${HEADER} DESTINATION ${PROJECT_SOURCE_DIR}/lib/include/${DIR}) 192 ENDFOREACH(HEADER) 193 194 ENDMACRO(INSTALL_HEADERS_WITH_DIRECTORY) 195 196 INSTALL_HEADERS_WITH_DIRECTORY(DEPLOY_FILES_AND_DIRS) 197 198 if(EXISTS "${PROJECT_SOURCE_DIR}/cmd/CMakeLists.txt") 199 add_subdirectory(cmd) 200 endif()