Change the name of the project to smartvos and use a static libary for the core

This commit is contained in:
Carl Philipp Klemm 2026-04-13 14:20:11 +02:00
parent d69bfb58b9
commit 6c6fc11439
2 changed files with 142 additions and 236 deletions

View file

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 4.0) cmake_minimum_required(VERSION 4.0)
project(SHinterface VERSION 1.0 LANGUAGES CXX) project(smartvos VERSION 1.0 LANGUAGES CXX)
# Set C++ standard # Set C++ standard
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
@ -27,33 +27,20 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
# Enable testing framework # Enable testing framework
enable_testing() enable_testing()
# Add subdirectory for tests # Define shared sources for static library (core sources used by both main and tests)
add_subdirectory(tests) set(SHINTERFACE_CORE_SOURCES
src/sensors/mqttsensorsource.h
# Create executable src/sensors/mqttsensorsource.cpp
add_executable(SHinterface src/items/mqttitem.h
src/sensors/mqttsensorsource.h src/sensors/mqttsensorsource.cpp src/items/mqttitem.cpp
src/items/mqttitem.h src/items/mqttitem.cpp src/mqttclient.h
src/mqttclient.h src/mqttclient.cpp src/mqttclient.cpp
)
# Add sources to executable
target_sources(SHinterface
PRIVATE
src/main.cpp
src/mainobject.h
src/mainobject.cpp
src/apgetconnected.h
src/apgetconnected.cpp
src/microcontroller.h src/microcontroller.h
src/microcontroller.cpp src/microcontroller.cpp
src/sun.h src/sun.h
src/sun.cpp src/sun.cpp
src/programmode.h src/programmode.h
src/programmode.cpp src/programmode.cpp
src/pipewire.h
src/pipewire.cpp
src/service/service.h src/service/service.h
src/service/service.cpp src/service/service.cpp
@ -108,6 +95,44 @@ target_sources(SHinterface
src/items/fixeditemsource.cpp src/items/fixeditemsource.cpp
src/items/itemstore.h src/items/itemstore.h
src/items/itemstore.cpp 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.h
src/ui/mainwindow.cpp src/ui/mainwindow.cpp
@ -148,7 +173,7 @@ target_sources(SHinterface
) )
# Add UI files # Add UI files
target_sources(SHinterface target_sources(smartvos
PRIVATE PRIVATE
src/ui/mainwindow.ui src/ui/mainwindow.ui
src/ui/itemwidget.ui src/ui/itemwidget.ui
@ -169,13 +194,14 @@ target_sources(SHinterface
) )
# Add resource file # Add resource file
target_sources(SHinterface target_sources(smartvos
PRIVATE PRIVATE
resources.qrc resources.qrc
) )
# Link libraries # Link libraries - link to static library plus UI-specific dependencies
target_link_libraries(SHinterface target_link_libraries(smartvos
smartvos_core
Qt6::Core Qt6::Core
Qt6::Gui Qt6::Gui
Qt6::Widgets Qt6::Widgets
@ -190,3 +216,16 @@ target_link_libraries(SHinterface
# Add include paths # Add include paths
include_directories(${PIPEWIRE_INCLUDE_DIRS} ${LIBNL3_INCLUDE_DIRS}) include_directories(${PIPEWIRE_INCLUDE_DIRS} ${LIBNL3_INCLUDE_DIRS})
# Installation
install(TARGETS smartvos DESTINATION bin)
install(TARGETS smartvos_core DESTINATION lib)
# Install icon
install(FILES UVOSicon.bmp DESTINATION share/icons/hicolor/48x48/apps RENAME smartvos.png)
# Install .desktop file
install(FILES 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})")

View file

@ -6,152 +6,18 @@ enable_testing()
# Find Qt packages for tests # Find Qt packages for tests
find_package(Qt6 COMPONENTS Core Gui Widgets Multimedia Test REQUIRED) find_package(Qt6 COMPONENTS Core Gui Widgets Multimedia Test REQUIRED)
# Define common sources needed by all tests - include only what's actually needed for basic testing # Add test executables - link to static library instead of compiling sources
set(COMMON_TEST_SOURCES add_executable(test_item unit/items/test_item.cpp)
../src/items/item.h add_executable(test_sensor unit/sensors/test_sensor.cpp)
../src/items/item.cpp add_executable(test_actor unit/actors/test_actor.cpp)
../src/sensors/sensor.h add_executable(test_itemstore unit/items/test_itemstore.cpp)
../src/sensors/sensor.cpp add_executable(test_itemloadersource unit/items/test_itemloadersource.cpp)
../src/programmode.h add_executable(test_tcp unit/service/test_tcp.cpp)
../src/programmode.cpp
../src/microcontroller.h
../src/microcontroller.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/timeractor.h
../src/actors/timeractor.cpp
../src/items/relay.h
../src/items/relay.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/poweritem.h
../src/items/poweritem.cpp
../src/items/rgbitem.h
../src/items/rgbitem.cpp
../src/actors/alarmtime.h
../src/actors/alarmtime.cpp
../src/actors/regulator.h
../src/actors/regulator.cpp
../src/items/itemsource.h
../src/items/itemsource.cpp
../src/items/itemstore.h
../src/items/itemstore.cpp
../src/items/itemloadersource.h
../src/items/itemloadersource.cpp
../src/items/mqttitem.h
../src/items/mqttitem.cpp
../src/mqttclient.cpp
)
# Add test executables - compile all needed sources into each test # Link all tests to static library
add_executable(test_item unit/items/test_item.cpp ${COMMON_TEST_SOURCES}) foreach(test test_item test_sensor test_actor test_itemstore test_itemloadersource test_tcp)
add_executable(test_sensor unit/sensors/test_sensor.cpp ${COMMON_TEST_SOURCES}) target_link_libraries(${test}
add_executable(test_actor unit/actors/test_actor.cpp ${COMMON_TEST_SOURCES}) smartvos_core
add_executable(test_itemstore unit/items/test_itemstore.cpp ${COMMON_TEST_SOURCES})
add_executable(test_itemloadersource unit/items/test_itemloadersource.cpp ${COMMON_TEST_SOURCES})
add_executable(test_tcp unit/service/test_tcp.cpp ${COMMON_TEST_SOURCES}
../src/service/service.h
../src/service/service.cpp
../src/service/server.h
../src/service/server.cpp
../src/service/tcpserver.h
../src/service/tcpserver.cpp
../src/service/tcpclient.h
../src/service/tcpclient.cpp
)
# Link libraries for test_item
target_link_libraries(test_item
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Multimedia
Qt6::Mqtt
Qt6::Test
)
# Include paths for source files
target_include_directories(test_item PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
)
# Link libraries for test_sensor
target_link_libraries(test_sensor
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Multimedia
Qt6::Mqtt
Qt6::Test
)
# Include paths for source files
target_include_directories(test_sensor PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
)
# Link libraries for test_actor
target_link_libraries(test_actor
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Multimedia
Qt6::Mqtt
Qt6::Test
)
# Include paths for source files
target_include_directories(test_actor PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
)
# Link libraries for test_itemstore
target_link_libraries(test_itemstore
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Multimedia
Qt6::Mqtt
Qt6::Test
)
# Include paths for source files
target_include_directories(test_itemstore PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
)
# Link libraries for test_itemloadersource
target_link_libraries(test_itemloadersource
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Multimedia
Qt6::Mqtt
Qt6::Test
)
# Include paths for source files
target_include_directories(test_itemloadersource PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
)
# Link libraries for test_tcp
target_link_libraries(test_tcp
Qt6::Core Qt6::Core
Qt6::Gui Qt6::Gui
Qt6::Widgets Qt6::Widgets
@ -160,13 +26,14 @@ target_link_libraries(test_tcp
Qt6::WebSockets Qt6::WebSockets
Qt6::Mqtt Qt6::Mqtt
Qt6::Test Qt6::Test
) )
# Include paths for source files # Include paths - the static library already has the correct include paths
target_include_directories(test_tcp PRIVATE target_include_directories(${test} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src ${CMAKE_CURRENT_SOURCE_DIR}/../src
${Qt6Gui_PRIVATE_INCLUDE_DIRS} ${Qt6Gui_PRIVATE_INCLUDE_DIRS}
) )
endforeach()
# Add tests to CTest # Add tests to CTest
add_test(NAME test_item COMMAND test_item) add_test(NAME test_item COMMAND test_item)