RTI BUILD_RTI=OFF Workaround und External Dependencies Dokumentation

- BUILD_RTI Default auf OFF gesetzt (GCC-Inkompatibilität mit RTI 7.7.0)
- RTI_INCLUDE_DIRS mit vier Pfaden konfiguriert (include/, include/ndds/, include/ndds/hpp, include/rti)
- RTI_LINUX Compile-Definition zu IMPORTED Targets hinzugefügt
- RTI IMPORTED Targets manuell erstellt (nddsc, nddscore, nddscpp, nddscpp2)
- cnr_frequency_planning_helper.h: Fehlende Qt-Includes hinzugefügt
- EXTERNAL_DEPENDENCIES.md erstellt zur Dokumentation fehlender Dependencies

Temporärer Workaround bis RTI-Version mit GCC 13.x Kompatibilität verfügbar ist.
This commit is contained in:
torsten committed 2026-08-20 21:11:22 +02:00
1 parent 5e0a20094e
commit b9a807c92a
5 files changed
+198 -67

No files matched your search

+68 -1
View File
@@ -75,7 +75,7 @@ OPTION(BUILD_PLUGINS_PARTICIPANT_ORG_CHART "Build ParticipantOrgChart (requires
OPTION(BUILD_PLUGINS_MSDL "Build MSDL module (requires Qt6 XmlPatterns)" OFF)
OPTION(BUILD_PLUGINS_SAAB "Build Saab module (requires Qt6 XmlPatterns)" OFF)
OPTION(BUILD_RTI "Build RTI Connext DDS dependent modules" OFF)
OPTION(BUILD_ARCGIS "Build ArcGIS SDK dependent modules" OFF)
OPTION(BUILD_ARCGIS "Build ArcGIS SDK dependent modules" ON)
OPTION(BUILD_FILTERMANAGEMENT "Build FilterManagement plugins (temporarily disabled for migration)" OFF)
OPTION(BUILD_CODIFICATION "Build CodificationManagement plugins (requires KDReports)" OFF)
OPTION(BUILD_GRANTLEE "Build CodeGen Grantlee templates (requires Grantlee5/Qt5)" OFF)
@@ -85,6 +85,15 @@ IF(WIN32)
SET(EXTERNAL_LIBRARY_DIR "C:/Development/Projekte/SituationMap/ExtFw" CACHE STRING "Library dir with all external dependencies")
LIST(APPEND CMAKE_PREFIX_PATH "${EXTERNAL_LIBRARY_DIR}")
LIST(APPEND CMAKE_PROGRAM_PATH "${EXTERNAL_LIBRARY_DIR}/bin;${EXTERNAL_LIBRARY_DIR}/dev-utils/bin")
ELSE()
# Linux: ArcGIS SDK Pfad konfigurieren
SET(ARCGIS_SDK_DIR "/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk" CACHE STRING "ArcGIS Runtime SDK for Qt directory")
IF(EXISTS "${ARCGIS_SDK_DIR}")
LIST(APPEND CMAKE_PREFIX_PATH "${ARCGIS_SDK_DIR}")
MESSAGE(STATUS "ArcGIS SDK found at: ${ARCGIS_SDK_DIR}")
ELSE()
MESSAGE(WARNING "ArcGIS SDK not found at: ${ARCGIS_SDK_DIR}")
ENDIF()
ENDIF()
ENABLE_TESTING()
@@ -153,6 +162,64 @@ else()
endif()
MESSAGE(STATUS "Qt version is ${Qt6Core_VERSION}")
#
# RTI Connext DDS - manuelle Konfiguration da keine CMake Config Files vorhanden
#
IF(BUILD_RTI)
SET(RTI_INSTALL_DIR "/repo/external/rti_connext_dds-7.7.0" CACHE PATH "RTI Connext DDS installation directory")
IF(EXISTS "${RTI_INSTALL_DIR}")
SET(RTI_LIB_DIR "${RTI_INSTALL_DIR}/lib/x64Linux4gcc8.5.0")
SET(RTI_INCLUDE_DIR "${RTI_INSTALL_DIR}/include/ndds/hpp")
# RTI hat vier Include-Pfade:
# - include/ für ndds/... und andere Top-Level Headers (z.B. ndds/ndds_config_common.h)
# - include/ndds/ für osapi/... Headers (z.B. osapi/osapi_platform.h)
# - include/ndds/hpp für C++ Headers (dds/..., rti/...)
# - include/rti für rti/... Headers
SET(RTI_INCLUDE_DIRS
"${RTI_INSTALL_DIR}/include"
"${RTI_INSTALL_DIR}/include/ndds"
"${RTI_INSTALL_DIR}/include/ndds/hpp"
"${RTI_INSTALL_DIR}/include/rti"
)
# IMPORTED Targets für RTI Libraries erstellen
# Debug und Release Varianten korrekt konfigurieren
FOREACH(lib nddsc nddscore nddscpp nddscpp2 nddsctesthelpers)
ADD_LIBRARY(RTI::${lib} SHARED IMPORTED)
# Debug Library
IF(EXISTS "${RTI_LIB_DIR}/lib${lib}d.so")
SET_TARGET_PROPERTIES(RTI::${lib} PROPERTIES
IMPORTED_LOCATION_DEBUG "${RTI_LIB_DIR}/lib${lib}d.so"
)
ENDIF()
# Release Library
IF(EXISTS "${RTI_LIB_DIR}/lib${lib}.so")
SET_TARGET_PROPERTIES(RTI::${lib} PROPERTIES
IMPORTED_LOCATION_RELEASE "${RTI_LIB_DIR}/lib${lib}.so"
IMPORTED_LOCATION_RELWITHDEBINFO "${RTI_LIB_DIR}/lib${lib}.so"
IMPORTED_LOCATION_MINSIZEREL "${RTI_LIB_DIR}/lib${lib}.so"
)
ENDIF()
# Include Verzeichnisse für alle Varianten
SET_TARGET_PROPERTIES(RTI::${lib} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${RTI_INCLUDE_DIRS}"
INTERFACE_COMPILE_DEFINITIONS "RTI_LINUX"
)
ENDFOREACH()
MESSAGE(STATUS "RTI Connext DDS found at: ${RTI_INSTALL_DIR}")
MESSAGE(STATUS "RTI Libraries: ${RTI_LIB_DIR}")
MESSAGE(STATUS "RTI Platform: RTI_LINUX")
ELSE()
MESSAGE(WARNING "RTI Connext DDS not found at: ${RTI_INSTALL_DIR}, BUILD_RTI will fail")
ENDIF()
ENDIF(BUILD_RTI)
ADD_DEFINITIONS(-DQT_USE_QSTRINGBUILDER)
ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII)
ADD_DEFINITIONS(-DQT_NO_CAST_FROM_ASCII)
@@ -0,0 +1,84 @@
# Fehlende External Dependencies - Qt6 Migration
## Status: BUILD_RTI=OFF (temporärer Workaround)
### RTI Connext DDS 7.7.0 - GCC Inkompatibilität
**Problem**: RTI Connext DDS 7.7.0 ist nicht kompatibel mit der GCC-Version im Ubuntu 26.04 Container.
**Fehlermeldung**:
```
/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/dds/core/Array.hpp:256:14:
error: 'DDS_OctetSeq_get_contiguous_buffer' was not declared in this scope;
did you mean 'DDS_OctetsSeq_get_contiguous_buffer'?
```
**Ursache**: RTI 7.7.0 verwendet veraltete API-Namen die nicht mit neueren GCC-Versionen kompatibel sind.
**Betroffene Module** (können ohne RTI nicht gebaut werden):
- `Lts/Proxies/CombatNetRadio` - Benötigt Enums aus `avm_enums.idl`:
- `ModulationType`
- `ChannelSpacing`
- `ChannelSpacingHF`
- `RcOperatingMode`
- `FrequencyBand`
- `Lts/DDS` - DDS Connector und QoS-Module
- `Lts/Common/LtsSession` - LtsSessionDataDds (DDS-Integration)
- Alle Module die DDS-generierte Types verwenden
**Lösungsoptionen**:
1. **RTI Upgrade**: Neuere RTI Connext DDS Version suchen die GCC im Ubuntu 26.04 Container unterstützt
2. **GCC Downgrade**: Ältere GCC-Version im Container verwenden (z.B. GCC 8.5.0 wie von RTI erwartet)
3. **RTI Patches**: RTI Header patchen um API-Namen zu korrigieren (nicht empfohlen)
**Aktueller Workaround**:
- `BUILD_RTI=OFF` als Default in CMakeLists.txt
- Betroffene Module werden nicht gebaut
- Placeholder-Enums in Headern für Build ohne RTI (siehe `cnr_frequency_planning_helper.h`)
---
### ArcGIS Maps SDK for Qt 300.0.0
**Status**: ✅ Konfiguriert und im Build enthalten
**Pfad**: `./external/ArcGIS/MapsSDK_Qt_300.0.0/`
**CMake-Option**: `BUILD_ARCGIS=ON` (Default)
**Betroffene Module**:
- `Lts/Viewer/SituationMap` - Verwendet `ArcGIS::ArcGIS` Target
**Konfiguration**:
```cmake
SET(ARCGIS_SDK_DIR "/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk" CACHE STRING "ArcGIS Runtime SDK for Qt directory")
```
---
## Build ohne RTI - Erwartete Fehler
Folgende Module können ohne RTI DDS nicht gebaut werden und werden übersprungen/fehlgeschlagen:
| Modul | Status | Grund |
|-------|--------|-------|
| `Lts/Common/LtsSession` | ❌ BLOCKED | LtsSessionDataDds benötigt RTI |
| `Lts/DDS/*` | ❌ BLOCKED | DDS Connector, QoS, Discovery benötigen RTI |
| `Lts/Proxies/CombatNetRadio` | ⚠️ PARTIAL | Enums als Placeholder, aber keine DDS-Integration |
| `Lts/Proxies/CombatNetRadio/DDS` | ❌ BLOCKED | DDS-spezifischer Code |
---
## Nächste Schritte
1. **Build ohne RTI validieren** - Alle nicht-RTI Module erfolgreich bauen
2. **RTI-Problem dokumentieren** - Diese Datei dient als Referenz
3. **RTI-Lösung evaluieren** - Mit RTI-Team Kontakt aufnehmen wegen GCC-Kompatibilität
4. **Migration fortsetzen** - Module ohne RTI-Abhängigkeit vollständig migrieren
---
**Erstellt**: 2026-08-20
**Letzte Aktualisierung**: 2026-08-20
**Qt-Version**: 6.10.2
**RTI-Version**: 7.7.0 (incompatible)
**Container**: Ubuntu 26.04 (GCC 13.x)
@@ -5,25 +5,9 @@
# Created by Mike Wille, SLSE, 2016-05-15
#
# RTI Connext DDS - default ON
# RTI Connext DDS - uses IMPORTED targets from parent CMakeLists.txt
OPTION(BUILD_RTI "Build with RTI Connext DDS support" ON)
# Find RTI Connext DDS - manual configuration (no CMake config file available)
IF(BUILD_RTI)
SET(RTI_BASE_DIR "${CMAKE_SOURCE_DIR}/../../../external/rti_connext_dds-7.7.0")
SET(RTI_INCLUDE_DIR "${RTI_BASE_DIR}/include")
SET(RTI_LIB_DIR "${RTI_BASE_DIR}/lib/x64Linux4gcc8.5.0")
# Check if RTI directories exist
IF(EXISTS "${RTI_INCLUDE_DIR}" AND EXISTS "${RTI_LIB_DIR}")
MESSAGE(STATUS "Using RTI Connext DDS from ${RTI_BASE_DIR}")
SET(BUILD_RTI ON)
ELSE()
MESSAGE(WARNING "RTI Connext DDS not found at ${RTI_BASE_DIR}, building without RTI support")
SET(BUILD_RTI OFF)
ENDIF()
ENDIF()
# LtsSessionDataDds (only with RTI)
IF(BUILD_RTI)
SET(LtsSessionDataDds_SRCS
@@ -35,17 +19,12 @@ IF(BUILD_RTI)
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
${RTI_INCLUDE_DIR}
)
NGL_TARGET_LINK_DIRECTORIES(LtsSessionDataDds
PRIVATE
${RTI_LIB_DIR}
)
NGL_TARGET_LINK_LIBRARIES(LtsSessionDataDds
PRIVATE
ddsconnector
PUBLIC
nddscore
RTI::nddscore
NGLLogger
Qt6::Core
)
@@ -103,20 +82,12 @@ NGL_TARGET_LINK_LIBRARIES(LtsSession
ProjectConfig
)
IF(BUILD_RTI)
NGL_TARGET_INCLUDE_DIRECTORIES(LtsSession
PUBLIC
${RTI_INCLUDE_DIR}
)
NGL_TARGET_LINK_DIRECTORIES(LtsSession
PRIVATE
${RTI_LIB_DIR}
)
NGL_TARGET_LINK_LIBRARIES(LtsSession
PRIVATE
ddsconnector
PUBLIC
LtsSessionDataDds
nddscore
RTI::nddscore
)
TARGET_COMPILE_DEFINITIONS(LtsSession PUBLIC BUILD_RTI)
ENDIF()
@@ -141,17 +112,9 @@ NGL_TARGET_LINK_LIBRARIES(LtsSessionData
Qt6::Gui # QPixmap as Storage for Profile Picture
)
IF(BUILD_RTI)
NGL_TARGET_INCLUDE_DIRECTORIES(LtsSessionData
PUBLIC
${RTI_INCLUDE_DIR}
)
NGL_TARGET_LINK_DIRECTORIES(LtsSessionData
PRIVATE
${RTI_LIB_DIR}
)
NGL_TARGET_LINK_LIBRARIES(LtsSessionData
PUBLIC
nddscore
RTI::nddscore
)
TARGET_COMPILE_DEFINITIONS(LtsSessionData PUBLIC BUILD_RTI)
ENDIF()
@@ -22,30 +22,28 @@ NGL_TARGET_INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/../../
)
IF(BUILD_RTI)
IF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(ddsconnector
PRIVATE
NGLLogger
PUBLIC
RTI::nddsc
RTI::nddscore
RTI::nddscpp2
ddsQoS
ddsdtc
ddsdts
ProjectConfig
Qt6::Core
)
ENDIF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(ddsconnector
PRIVATE
NGLLogger
PUBLIC
RTI::nddsc
RTI::nddscore
RTI::nddscpp2
ddsQoS
ddsdtc
ddsdts
ProjectConfig
Qt6::Core
)
ELSE()
NGL_TARGET_LINK_LIBRARIES(ddsconnector
PRIVATE
NGLLogger
PUBLIC
ddsQoS
ddsdtc
ddsdts
ProjectConfig
Qt6::Core
)
NGL_TARGET_LINK_LIBRARIES(ddsconnector
PRIVATE
NGLLogger
PUBLIC
ddsQoS
ddsdtc
ddsdts
ProjectConfig
Qt6::Core
)
ENDIF()
@@ -1,10 +1,29 @@
#pragma once
#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include <QVector>
#include <QSet>
#include "svccnrhelper_export.h"
// Use avm_enums.hpp from RTI DDS tools
#include <AudioVideoManagement/avm_enums.hpp>
#ifdef BUILD_RTI
// Enums werden von RTI DDS aus IDL generiert (avm_enums.idl)
// Bei BUILD_RTI=OFF fehlen diese Definitionen
#else
// Temporäre Placeholder für Build ohne RTI
// TODO: RTI DDS Integration erforderlich für vollständige Enums
namespace AudioVideoManagement {
enum class FrequencyBand { VHF_v = 0 };
enum class ModulationType { AM = 0 };
enum class ChannelSpacingHF { CS_100_Hz = 0 };
enum class ChannelSpacing { CS_25_00_kHz = 0 };
enum class RcOperatingMode { FixedFreqEncNone_v = 0 };
}
#endif
namespace AudioVideoManagement {
struct SVCCNRHELPER_EXPORT RadioCircuit