# CMake configuration for the main memgraph library and executable # add memgraph sub libraries, ordered by dependency add_subdirectory(lisp) add_subdirectory(utils) add_subdirectory(requests) add_subdirectory(io) add_subdirectory(telemetry) add_subdirectory(communication) add_subdirectory(auth) add_subdirectory(slk) add_subdirectory(storage/v2) add_subdirectory(query) ## ---------------------------------------------------------------------------- ## Common LCP files ## ---------------------------------------------------------------------------- # #define_add_lcp(add_lcp_common lcp_common_cpp_files generated_lcp_common_files) # #add_lcp_common(query/frontend/ast/ast.lcp) #add_lcp_common(query/frontend/semantic/symbol.lcp) #add_lcp_common(query/plan/operator.lcp) # #add_custom_target(generate_lcp_common DEPENDS ${generated_lcp_common_files}) # ## ---------------------------------------------------------------------------- ## END Common LCP files ## ---------------------------------------------------------------------------- # ## ---------------------------------------------------------------------------- ## Memgraph Single Node High Availability ## ---------------------------------------------------------------------------- #set(mg_single_node_ha_sources # ${lcp_common_cpp_files} # audit/log.cpp # data_structures/concurrent/skiplist_gc.cpp # database/single_node_ha/config.cpp # database/single_node_ha/graph_db.cpp # database/single_node_ha/graph_db_accessor.cpp # durability/single_node_ha/state_delta.cpp # durability/single_node_ha/paths.cpp # durability/single_node_ha/snapshooter.cpp # durability/single_node_ha/recovery.cpp # glue/auth.cpp # glue/communication.cpp # raft/coordination.cpp # raft/raft_server.cpp # raft/storage_info.cpp # query/common.cpp # query/frontend/ast/cypher_main_visitor.cpp # query/frontend/ast/pretty_print.cpp # query/frontend/parsing.cpp # query/frontend/semantic/required_privileges.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/pretty_print.cpp # query/plan/profile.cpp # query/plan/rewrite/index_lookup.cpp # query/plan/rule_based_planner.cpp # query/plan/variable_start_planner.cpp # query/procedure/mg_procedure_impl.cpp # query/procedure/module.cpp # query/typed_value.cpp # storage/common/constraints/record.cpp # storage/common/constraints/unique_constraints.cpp # storage/common/types/slk.cpp # storage/common/types/property_value_store.cpp # storage/common/locking/record_lock.cpp # storage/single_node_ha/edge_accessor.cpp # storage/single_node_ha/record_accessor.cpp # storage/single_node_ha/vertex_accessor.cpp # transactions/single_node_ha/engine.cpp # memgraph_init.cpp #) # #define_add_lcp(add_lcp_single_node_ha mg_single_node_ha_sources generated_lcp_single_node_ha_files) # #add_lcp_single_node_ha(durability/single_node_ha/state_delta.lcp) #add_lcp_single_node_ha(database/single_node_ha/serialization.lcp SLK_SERIALIZE # DEPENDS durability/single_node_ha/state_delta.lcp) #add_lcp_single_node_ha(raft/raft_rpc_messages.lcp SLK_SERIALIZE) #add_lcp_single_node_ha(raft/log_entry.lcp SLK_SERIALIZE) #add_lcp_single_node_ha(raft/snapshot_metadata.lcp SLK_SERIALIZE) #add_lcp_single_node_ha(raft/storage_info_rpc_messages.lcp SLK_SERIALIZE) # #add_custom_target(generate_lcp_single_node_ha DEPENDS generate_lcp_common ${generated_lcp_single_node_ha_files}) # #set(MG_SINGLE_NODE_HA_LIBS stdc++fs Threads::Threads fmt cppitertools # antlr_opencypher_parser_lib dl glog gflags # mg-utils mg-io mg-requests mg-communication mg-comm-rpc # mg-auth) # #if (USE_LTALLOC) # list(APPEND MG_SINGLE_NODE_HA_LIBS ltalloc) # # TODO(mferencevic): Enable this when clang is updated on apollo. # # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") #endif() # #add_library(mg-single-node-ha STATIC ${mg_single_node_ha_sources}) #target_include_directories(mg-single-node-ha PUBLIC ${CMAKE_SOURCE_DIR}/include) #target_link_libraries(mg-single-node-ha ${MG_SINGLE_NODE_HA_LIBS}) #add_dependencies(mg-single-node-ha generate_opencypher_parser) #add_dependencies(mg-single-node-ha generate_lcp_single_node_ha) #target_compile_definitions(mg-single-node-ha PUBLIC MG_SINGLE_NODE_HA) ## TODO: Make these symbols visible once we add support for custom procedure ## modules in HA. ## NOTE: `include/mg_procedure.syms` describes a pattern match for symbols which ## should be dynamically exported, so that `dlopen` can correctly link the ## symbols in custom procedure module libraries. ## target_link_libraries(mg-single-node-ha "-Wl,--dynamic-list=${CMAKE_SOURCE_DIR}/include/mg_procedure.syms") # ## ---------------------------------------------------------------------------- ## END Memgraph Single Node High Availability ## ---------------------------------------------------------------------------- # #add_custom_target(generate_lcp) #add_dependencies(generate_lcp generate_lcp_single_node_ha) string(TOLOWER ${CMAKE_BUILD_TYPE} lower_build_type) # STATIC library used to store key-value pairs add_library(kvstore_lib STATIC storage/common/kvstore/kvstore.cpp) target_link_libraries(kvstore_lib stdc++fs mg-utils rocksdb bzip2 zlib glog gflags) # STATIC library for dummy key-value storage add_library(kvstore_dummy_lib STATIC storage/common/kvstore/kvstore_dummy.cpp) target_link_libraries(kvstore_dummy_lib mg-utils) # Generate a version.hpp file set(VERSION_STRING ${memgraph_VERSION}) configure_file(version.hpp.in version.hpp @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # ---------------------------------------------------------------------------- # Memgraph Single Node v2 Executable # ---------------------------------------------------------------------------- set(mg_single_node_v2_sources audit/log.cpp glue/auth.cpp glue/communication.cpp memgraph_init.cpp memgraph.cpp ) set(MG_SINGLE_NODE_V2_LIBS stdc++fs Threads::Threads telemetry_lib mg-query mg-communication) # These are enterprise subsystems set(MG_SINGLE_NODE_V2_LIBS ${MG_SINGLE_NODE_V2_LIBS} mg-auth) if (USE_LTALLOC) list(APPEND MG_SINGLE_NODE_V2_LIBS ltalloc) # TODO(mferencevic): Enable this when clang is updated on apollo. # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") endif() # memgraph main executable add_executable(memgraph ${mg_single_node_v2_sources}) target_include_directories(memgraph PUBLIC ${CMAKE_SOURCE_DIR}/include) target_compile_definitions(memgraph PUBLIC MG_SINGLE_NODE_V2) target_link_libraries(memgraph ${MG_SINGLE_NODE_V2_LIBS}) # NOTE: `include/mg_procedure.syms` describes a pattern match for symbols which # should be dynamically exported, so that `dlopen` can correctly link the # symbols in custom procedure module libraries. target_link_libraries(memgraph "-Wl,--dynamic-list=${CMAKE_SOURCE_DIR}/include/mg_procedure.syms") set_target_properties(memgraph PROPERTIES # Set the executable output name to include version information. OUTPUT_NAME "memgraph-${memgraph_VERSION}-${COMMIT_HASH}_${CMAKE_BUILD_TYPE}" # Output the executable in main binary dir. RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) # Create symlink to the built executable. add_custom_command(TARGET memgraph POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $ ${CMAKE_BINARY_DIR}/memgraph BYPRODUCTS ${CMAKE_BINARY_DIR}/memgraph COMMENT "Creating symlink to memgraph executable") # Strip the executable in release build. if (lower_build_type STREQUAL "release") add_custom_command(TARGET memgraph POST_BUILD COMMAND strip -s $ COMMENT "Stripping symbols and sections from memgraph") endif() # Generate the configuration file. add_custom_command(TARGET memgraph POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/config/generate.py ${CMAKE_BINARY_DIR}/memgraph ${CMAKE_BINARY_DIR}/config/memgraph.conf DEPENDS ${CMAKE_SOURCE_DIR}/config/generate.py ${CMAKE_SOURCE_DIR}/config/flags.yaml BYPRODUCTS ${CMAKE_BINARY_DIR}/config/memgraph.conf COMMENT "Generating memgraph configuration file") # ---------------------------------------------------------------------------- # END Memgraph Single Node v2 Executable # ---------------------------------------------------------------------------- # Everything here is under "memgraph" install component. set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "memgraph") # TODO: Default directory permissions to 755 # NOTE: This is added in CMake 3.11, so enable it then #set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS # OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ WORLD_READ) # Install and rename executable to just 'memgraph' Since we have to rename, # we cannot use the recommended `install(TARGETS ...)`. install(PROGRAMS $ DESTINATION lib/memgraph RENAME memgraph) # Install the include file for writing custom procedures. install(FILES ${CMAKE_SOURCE_DIR}/include/mg_procedure.h DESTINATION include/memgraph) # Install the config file (must use absolute path). install(FILES ${CMAKE_BINARY_DIR}/config/memgraph.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) install(FILES ${CMAKE_SOURCE_DIR}/release/logrotate_audit.conf DESTINATION /etc/logrotate.d RENAME memgraph_audit) # 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) # Install examples set(examples ${CMAKE_SOURCE_DIR}/release/examples) install( CODE "execute_process(COMMAND ${examples}/build_examples ${CMAKE_BINARY_DIR}/memgraph ${CMAKE_BINARY_DIR}/tools/src/mg_client WORKING_DIRECTORY ${examples})") install(DIRECTORY ${examples}/build/ DESTINATION share/memgraph/examples) ## memgraph single node high availability executable #add_executable(memgraph_ha memgraph_ha.cpp) #target_link_libraries(memgraph_ha mg-single-node-ha kvstore_lib telemetry_lib) #set_target_properties(memgraph_ha PROPERTIES # # Set the executable output name to include version information. # OUTPUT_NAME "memgraph_ha-${memgraph_VERSION}-${COMMIT_HASH}_${CMAKE_BUILD_TYPE}" # # Output the executable in main binary dir. # RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) ## Create symlink to the built executable. #add_custom_command(TARGET memgraph_ha POST_BUILD # COMMAND ${CMAKE_COMMAND} -E create_symlink $ ${CMAKE_BINARY_DIR}/memgraph_ha # BYPRODUCTS ${CMAKE_BINARY_DIR}/memgraph_ha # COMMENT "Creating symlink to memgraph single node high availability executable")