110 lines
2.8 KiB
CMake
110 lines
2.8 KiB
CMake
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)
|