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()