UvosSmartHomeInterface/CMakeLists.txt

231 lines
6.6 KiB
CMake

cmake_minimum_required(VERSION 4.0)
project(smartvos VERSION 1.0 LANGUAGES CXX)
# Set C++ standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Enable all warnings
add_compile_options(-Wall)
# Find Qt packages
find_package(Qt6 COMPONENTS Core Gui Widgets Network Multimedia SerialPort Mqtt WebSockets REQUIRED)
# Find dependencies using pkg-config
find_package(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3)
pkg_check_modules(LIBNL3 REQUIRED libnl-3.0 libnl-genl-3.0)
# Enable automatic moc and uic processing
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
# Add src to include path for relative includes
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
# Enable testing framework
enable_testing()
# Define shared sources for static library (core sources used by both main and tests)
set(SHINTERFACE_CORE_SOURCES
src/sensors/mqttsensorsource.h
src/sensors/mqttsensorsource.cpp
src/items/mqttitem.h
src/items/mqttitem.cpp
src/mqttclient.h
src/mqttclient.cpp
src/microcontroller.h
src/microcontroller.cpp
src/sun.h
src/sun.cpp
src/programmode.h
src/programmode.cpp
src/service/service.h
src/service/service.cpp
src/service/tcpclient.h
src/service/tcpclient.cpp
src/service/server.h
src/service/server.cpp
src/service/tcpserver.h
src/service/tcpserver.cpp
src/service/websocketserver.h
src/service/websocketserver.cpp
src/actors/actor.h
src/actors/actor.cpp
src/actors/factoractor.h
src/actors/factoractor.cpp
src/actors/polynomalactor.h
src/actors/polynomalactor.cpp
src/actors/sensoractor.h
src/actors/sensoractor.cpp
src/actors/alarmtime.h
src/actors/alarmtime.cpp
src/actors/regulator.h
src/actors/regulator.cpp
src/actors/timeractor.h
src/actors/timeractor.cpp
src/sensors/sensor.h
src/sensors/sensor.cpp
src/sensors/sunsensor.h
src/sensors/sunsensor.cpp
src/items/item.h
src/items/item.cpp
src/items/relay.h
src/items/relay.cpp
src/items/poweritem.h
src/items/poweritem.cpp
src/items/messageitem.h
src/items/messageitem.cpp
src/items/systemitem.h
src/items/systemitem.cpp
src/items/auxitem.h
src/items/auxitem.cpp
src/items/rgbitem.h
src/items/rgbitem.cpp
src/items/itemsource.h
src/items/itemsource.cpp
src/items/itemloadersource.h
src/items/itemloadersource.cpp
src/items/fixeditemsource.h
src/items/fixeditemsource.cpp
src/items/itemstore.h
src/items/itemstore.cpp
)
# Create static library
add_library(smartvos_core STATIC ${SHINTERFACE_CORE_SOURCES})
# Link Qt and system libraries to static library
target_link_libraries(smartvos_core
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Network
Qt6::Multimedia
Qt6::SerialPort
Qt6::Mqtt
Qt6::WebSockets
${PIPEWIRE_LIBRARIES}
${LIBNL3_LIBRARIES}
)
# Add include paths to static library
target_include_directories(smartvos_core PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${PIPEWIRE_INCLUDE_DIRS}
${LIBNL3_INCLUDE_DIRS}
)
# Add subdirectory for tests
add_subdirectory(tests)
# Create executable
add_executable(smartvos
src/main.cpp
src/mainobject.h
src/mainobject.cpp
src/apgetconnected.h
src/apgetconnected.cpp
src/pipewire.h
src/pipewire.cpp
src/ui/mainwindow.h
src/ui/mainwindow.cpp
src/ui/itemwidget.h
src/ui/itemwidget.cpp
src/ui/itemscrollbox.h
src/ui/itemscrollbox.cpp
src/ui/sensorlistwidget.h
src/ui/sensorlistwidget.cpp
src/ui/itemcreationdialog.h
src/ui/itemcreationdialog.cpp
src/ui/itemsettingsdialog.h
src/ui/itemsettingsdialog.cpp
src/ui/actorsettingsdialog.h
src/ui/actorsettingsdialog.cpp
src/ui/actorwidgets/factoractorwidget.h
src/ui/actorwidgets/factoractorwidget.cpp
src/ui/actorwidgets/polynomalactorwidget.h
src/ui/actorwidgets/polynomalactorwidget.cpp
src/ui/actorwidgets/sensoractorwidget.h
src/ui/actorwidgets/sensoractorwidget.cpp
src/ui/actorwidgets/timeractorwidget.h
src/ui/actorwidgets/timeractorwidget.cpp
src/ui/actorwidgets/alarmwidget.h
src/ui/actorwidgets/alarmwidget.cpp
src/ui/actorwidgets/regulatorwdiget.h
src/ui/actorwidgets/regulatorwdiget.cpp
src/ui/itemsettingswidgets/messageitemsettingswidget.h
src/ui/itemsettingswidgets/messageitemsettingswidget.cpp
src/ui/itemsettingswidgets/relayitemsettingswidget.h
src/ui/itemsettingswidgets/relayitemsettingswidget.cpp
src/ui/itemsettingswidgets/systemitemsettingswidget.h
src/ui/itemsettingswidgets/systemitemsettingswidget.cpp
src/ui/itemsettingswidgets/mqttitemsettingswidget.h
src/ui/itemsettingswidgets/mqttitemsettingswidget.cpp
)
# Add UI files
target_sources(smartvos
PRIVATE
src/ui/mainwindow.ui
src/ui/itemwidget.ui
src/ui/relayscrollbox.ui
src/ui/itemcreationdialog.ui
src/ui/itemsettingsdialog.ui
src/ui/actorsettingsdialog.ui
src/ui/actorwidgets/factoractorwidget.ui
src/ui/actorwidgets/polynomalactorwidget.ui
src/ui/actorwidgets/sensoractorwidget.ui
src/ui/actorwidgets/timeractorwidget.ui
src/ui/actorwidgets/alarmwidget.ui
src/ui/actorwidgets/regulatorwdiget.ui
src/ui/itemsettingswidgets/messageitemsettingswidget.ui
src/ui/itemsettingswidgets/relayitemsettingswidget.ui
src/ui/itemsettingswidgets/systemitemsettingswidget.ui
src/ui/itemsettingswidgets/mqttitemsettingswidget.ui
)
# Add resource file
target_sources(smartvos
PRIVATE
resources.qrc
)
# Link libraries - link to static library plus UI-specific dependencies
target_link_libraries(smartvos
smartvos_core
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Network
Qt6::Multimedia
Qt6::SerialPort
Qt6::Mqtt
Qt6::WebSockets
${PIPEWIRE_LIBRARIES}
${LIBNL3_LIBRARIES}
)
# Add include paths
include_directories(${PIPEWIRE_INCLUDE_DIRS} ${LIBNL3_INCLUDE_DIRS})
# Installation
install(TARGETS smartvos DESTINATION bin)
install(TARGETS smartvos_core DESTINATION lib)
# Install icon
install(FILES xyz.uvos.icon.png DESTINATION share/icons/hicolor/128x128/apps)
# Install .desktop file
install(FILES xyz.uvos.smartvos.desktop DESTINATION share/applications)
# Update icon cache (optional, for icon themes)
install(CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})")