a17261038c
Summary: Split main CMakeLists into src/CMakeLists The main CMakeLists duty is to make all the required libraries and variables visible to all of the other sub-CMakeLists. After doing that, it should include those sub-CMakeLists according to configuration options. This should make global configurations easier to reuse without polluting the global space with locally related configurations. It is a necessary step for including other projects like 'tools' in the release installation. Building tools is automatically disabled, but can be enabled by setting the TOOLS option to ON when running cmake. This should allow on demand building as well as combined installation of Memgraph and its tools. Reviewers: mferencevic, buda Reviewed By: mferencevic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1018
115 lines
4.4 KiB
CMake
115 lines
4.4 KiB
CMake
# CMake configuration for the main memgraph library and executable
|
|
|
|
# all memgraph src files
|
|
set(memgraph_src_files
|
|
communication/bolt/v1/decoder/decoded_value.cpp
|
|
communication/bolt/v1/session.cpp
|
|
communication/reactor/protocol.cpp
|
|
communication/raft/raft.cpp
|
|
communication/reactor/reactor_local.cpp
|
|
communication/reactor/reactor_distributed.cpp
|
|
data_structures/concurrent/skiplist_gc.cpp
|
|
database/graph_db.cpp
|
|
database/graph_db_config.cpp
|
|
database/graph_db_accessor.cpp
|
|
durability/paths.cpp
|
|
durability/recovery.cpp
|
|
durability/snapshooter.cpp
|
|
durability/wal.cpp
|
|
io/network/addrinfo.cpp
|
|
io/network/network_endpoint.cpp
|
|
io/network/socket.cpp
|
|
query/common.cpp
|
|
query/console.cpp
|
|
query/frontend/ast/ast.cpp
|
|
query/frontend/ast/cypher_main_visitor.cpp
|
|
query/frontend/semantic/symbol_generator.cpp
|
|
query/frontend/stripped.cpp
|
|
query/interpret/awesome_memgraph_functions.cpp
|
|
query/interpreter.cpp
|
|
query/plan/operator.cpp
|
|
query/plan/preprocess.cpp
|
|
query/plan/rule_based_planner.cpp
|
|
query/plan/variable_start_planner.cpp
|
|
query/typed_value.cpp
|
|
storage/edge_accessor.cpp
|
|
storage/locking/record_lock.cpp
|
|
storage/property_value.cpp
|
|
storage/record_accessor.cpp
|
|
storage/vertex_accessor.cpp
|
|
threading/thread.cpp
|
|
transactions/engine_master.cpp
|
|
transactions/engine_worker.cpp
|
|
utils/watchdog.cpp
|
|
)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# memgraph_lib depend on these libraries
|
|
set(MEMGRAPH_ALL_LIBS stdc++fs Threads::Threads fmt cppitertools cereal
|
|
antlr_opencypher_parser_lib dl glog gflags)
|
|
|
|
if (USE_LTALLOC)
|
|
list(APPEND MEMGRAPH_ALL_LIBS ltalloc)
|
|
# TODO(mferencevic): Enable this when clang is updated on apollo.
|
|
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
|
endif()
|
|
|
|
if (READLINE_FOUND)
|
|
list(APPEND MEMGRAPH_ALL_LIBS readline)
|
|
endif()
|
|
|
|
# STATIC library used by memgraph executables
|
|
add_library(memgraph_lib STATIC ${memgraph_src_files})
|
|
target_link_libraries(memgraph_lib ${MEMGRAPH_ALL_LIBS})
|
|
add_dependencies(memgraph_lib generate_opencypher_parser)
|
|
|
|
# Generate a version.hpp file
|
|
set(VERSION_STRING ${memgraph_VERSION})
|
|
configure_file(version.hpp.in version.hpp @ONLY)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set(MEMGRAPH_BUILD_NAME "memgraph-${memgraph_VERSION}-${COMMIT_HASH}_${CMAKE_BUILD_TYPE}")
|
|
|
|
# memgraph main executable
|
|
add_executable(${MEMGRAPH_BUILD_NAME} memgraph_bolt.cpp)
|
|
target_link_libraries(${MEMGRAPH_BUILD_NAME} memgraph_lib)
|
|
# Output the executable in main binary dir.
|
|
set_target_properties(${MEMGRAPH_BUILD_NAME} PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
|
# Strip the executable in release build.
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} lower_build_type)
|
|
if (lower_build_type STREQUAL "release")
|
|
add_custom_command(TARGET ${MEMGRAPH_BUILD_NAME} POST_BUILD
|
|
COMMAND strip -s $<TARGET_FILE:${MEMGRAPH_BUILD_NAME}>
|
|
COMMENT Stripping symbols and sections from
|
|
${MEMGRAPH_BUILD_NAME})
|
|
endif()
|
|
|
|
add_custom_target(memgraph_link_target ALL
|
|
COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:${MEMGRAPH_BUILD_NAME}> ${CMAKE_BINARY_DIR}/memgraph
|
|
DEPENDS ${MEMGRAPH_BUILD_NAME})
|
|
|
|
# Everything here is under "memgraph" install component.
|
|
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "memgraph")
|
|
|
|
# Install and rename executable to just 'memgraph' Since we have to rename,
|
|
# we cannot use the recommended `install(TARGETS ...)`.
|
|
install(PROGRAMS ${CMAKE_BINARY_DIR}/${MEMGRAPH_BUILD_NAME}
|
|
DESTINATION bin RENAME memgraph)
|
|
# Install the config file (must use absolute path).
|
|
install(FILES ${CMAKE_SOURCE_DIR}/config/community.conf
|
|
DESTINATION /etc/memgraph RENAME memgraph.conf)
|
|
# Install logrotate configuration (must use absolute path).
|
|
install(FILES ${CMAKE_SOURCE_DIR}/release/logrotate.conf
|
|
DESTINATION /etc/logrotate.d RENAME memgraph)
|
|
# Create empty directories for default location of lib and log.
|
|
install(CODE "file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/log/memgraph
|
|
\$ENV{DESTDIR}/var/lib/memgraph)")
|
|
# Install the license file.
|
|
install(FILES ${CMAKE_SOURCE_DIR}/release/LICENSE.md
|
|
DESTINATION share/doc/memgraph RENAME copyright)
|
|
# Install systemd service (must use absolute path).
|
|
install(FILES ${CMAKE_SOURCE_DIR}/release/memgraph.service
|
|
DESTINATION /lib/systemd/system)
|
|
|