# 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/messaging/distributed.cpp communication/messaging/local.cpp communication/messaging/protocol.cpp communication/reactor/protocol.cpp communication/reactor/reactor_distributed.cpp communication/reactor/reactor_local.cpp communication/rpc/rpc.cpp data_structures/concurrent/skiplist_gc.cpp database/graph_db.cpp database/graph_db_config.cpp database/graph_db_accessor.cpp database/state_delta.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 $ COMMENT Stripping symbols and sections from ${MEMGRAPH_BUILD_NAME}) endif() add_custom_target(memgraph_link_target ALL COMMAND ${CMAKE_COMMAND} -E create_symlink $ ${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)