cmake_minimum_required(VERSION 3.10) set(PROJECT_NAME "FServer") project(${PROJECT_NAME}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=address") # Add Address Sanitizer flags if available find_library(ASAN_LIBRARY asan) if (ASAN_LIBRARY) message(STATUS "Address Sanitizer found: ${ASAN_LIBRARY}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") else() message(WARNING "Address Sanitizer not found. Proceeding without ASAN.") endif() find_package (glog REQUIRED) # Include the nlohmann/json library find_package(nlohmann_json REQUIRED) include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${CMAKE_SOURCE_DIR}/plugins) # Add external libraries add_subdirectory(external/tser) include_directories(${CMAKE_SOURCE_DIR}/external/tser/include) # Set the output directories for executables and libraries set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plugins) # Main server executable add_executable(${PROJECT_NAME} src/main.cpp src/Server.cpp src/IPC.cpp src/Config.cpp ) # Link libraries target_link_libraries(${PROJECT_NAME} nlohmann_json::nlohmann_json glog::glog) # Add the plugins subdirectories add_subdirectory(${CMAKE_SOURCE_DIR}/src/plugins/SamplePlugin) add_subdirectory(${CMAKE_SOURCE_DIR}/src/plugins/TcpServerPlugin) add_subdirectory(${CMAKE_SOURCE_DIR}/src/plugins/DatabasePlugin)