cmake_minimum_required(VERSION 3.20) project(SCARChat VERSION 1.0.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD 99) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Enable AddressSanitizer for debugging option(ENABLE_ASAN "Enable AddressSanitizer" OFF) if(ENABLE_ASAN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -g") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -g") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") message(STATUS "AddressSanitizer enabled") endif() # Options option(BUILD_SERVER "Build the SCAR Chat server" ON) option(BUILD_CLIENT "Build the SCAR Chat client" ON) option(BUILD_TESTS "Build unit tests" OFF) # Find required packages find_package(Boost REQUIRED COMPONENTS system thread) find_package(OpenSSL REQUIRED) find_package(SQLite3 REQUIRED) if(BUILD_CLIENT) find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network Sql) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) endif() # Third-party libraries add_subdirectory(third_party) # Common/shared code add_subdirectory(shared) # Server if(BUILD_SERVER) add_subdirectory(server) endif() # Client if(BUILD_CLIENT) add_subdirectory(client) endif() # Database manager utility add_subdirectory(dbmanager) # Tests if(BUILD_TESTS) enable_testing() add_subdirectory(tests) endif()