cmake_minimum_required(VERSION 3.22) project(Kompanion LANGUAGES CXX) set(PROJECT_VERSION "0.0.1") set(QT_MIN_VERSION "6.0.0") set(KF6_MIN_VERSION "6.0.0") set(KDE_COMPILERSETTINGS_LEVEL "5.82") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMMarkAsTest) include(ECMMarkNonGuiExecutable) include(FeatureSummary) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckSymbolExists) include(ECMOptionalAddSubdirectory) include(KDEClangFormat) include(ECMDeprecationSettings) include(KDEGitCommitHooks) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Network Sql ) find_package(Qt6McpServer CONFIG REQUIRED) find_package(Qt6McpCommon CONFIG REQUIRED) option(KOMPANION_USE_GUI "Build optional GUI components using Qt6Gui" ON) if (KOMPANION_USE_GUI) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui) endif() find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Config ) find_package(Qt6Test ${QT_MIN_VERSION} CONFIG QUIET) set_package_properties(Qt6Test PROPERTIES PURPOSE "Required for tests" TYPE OPTIONAL ) add_feature_info("Qt6Test" Qt6Test_FOUND "Required for building tests") set(KOMPANION_DB_INIT_INSTALL_DIR "${KDE_INSTALL_FULL_DATADIR}/kompanion/db/init") install(DIRECTORY db/init/ DESTINATION ${KDE_INSTALL_DATADIR}/kompanion/db/init FILES_MATCHING PATTERN "*.sql") add_subdirectory(src/dal) add_subdirectory(src/KompanionAI) add_executable(kom_mcp src/main.cpp src/mcp/KompanionQtServer.cpp ) target_include_directories(kom_mcp PRIVATE src) qt_add_resources(kom_mcp kompanion_mcp_resources PREFIX "/kompanion" BASE "src/mcp" FILES src/mcp/ToolSchemas.json ) target_link_libraries(kom_mcp PRIVATE kom_dal kom_ai KF6::ConfigCore Qt6::Core Qt6::Network Qt6::McpServer Qt6::McpCommon ) target_compile_options(kom_mcp PRIVATE -fexceptions) target_compile_definitions(kom_mcp PRIVATE PROJECT_SOURCE_DIR="${CMAKE_SOURCE_DIR}" KOMPANION_DB_INIT_INSTALL_DIR="${KOMPANION_DB_INIT_INSTALL_DIR}" ) install(TARGETS kom_mcp RUNTIME DESTINATION bin) install(FILES src/mcp/ToolSchemas.json DESTINATION ${KDE_INSTALL_DATADIR}/kompanion/mcp) option(BUILD_TESTS "Build tests" ON) add_executable(kompanion src/cli/KompanionApp.cpp ) target_include_directories(kompanion PRIVATE src) target_link_libraries(kompanion PRIVATE Qt6::Core Qt6::Sql KF6::ConfigCore kom_dal kom_ai ) install(TARGETS kompanion RUNTIME ${KF_INSTALL_TARGETS_DEFAULT_ARGS}) if (BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)