Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/BUILD_RTI_FIXES_SUMMARY.md
T
torstenandCopilot 4c9861a469 BUILD_RTI conditional fixes and Qt6 API updates
- cmake/FindRTI.cmake: Add INTERFACE placeholder targets when RTI not found
- cmake/FindRTI.cmake: Force BUILD_RTI=OFF when RTI not installed
- Lts/Common/LtsSession/CMakeLists.txt: Make LtsSessionDataDds conditional on BUILD_RTI
- Lts/Viewer/CMakeLists.txt: Make LtsDataView conditional on BUILD_RTI
- Lts/Plugins/*/CMakeLists.txt: 97 plugin files wrapped in BUILD_RTI conditionals
- cmake/NGLMacros.cmake: Fix NGL_ADD_BIG_RESOURCES macro (removed premature return())
- Multiple Qt6 API fixes: QLinkedList→std::list, QStringRef→QStringView, etc.
- BUILD_RTI_FIXES_SUMMARY.md: Comprehensive documentation of all fixes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-19 09:24:50 +02:00

5.5 KiB

BUILD_RTI Conditional Fixes Summary

Problem

When building with BUILD_RTI=OFF (default), modules depending on RTI DDS libraries (LtsSessionDataDds, LtsWidgets, LtsDataView) would fail because:

  1. RTI DDS libraries are not installed in the build environment
  2. CMake would try to link against non-existent libraries
  3. Ninja would fail with "missing and no known rule" errors

Solution Applied

1. FindRTI.cmake Enhancement

File: cmake/FindRTI.cmake

Added placeholder INTERFACE targets when RTI is not found:

IF(NOT RTI_FOUND)
  # Create placeholder INTERFACE targets to satisfy dependency 依赖
  IF(NOT TARGET RTI::nddscore)
    ADD_LIBRARY(RTI::nddscore INTERFACE IMPORTED)
    SET(RTI_NDDSCORE_LIBRARY "rti-nddscore-placeholder" CACHE INTERNAL "")
  ENDIF()
  # ... (similar for other RTI libraries)
  
  # Force BUILD_RTI=OFF when RTI not installed
  SET(BUILD_RTI OFF CACHE BOOL "Build with RTI DDS support" FORCE)
  MESSAGE(STATUS "RTI DDS not found - BUILD_RTI forced to OFF")
ENDIF()

2. LtsSession Conditional Dependencies

File: Lts/Common/LtsSession/CMakeLists.txt

Made LtsSessionDataDds dependency conditional:

IF(BUILD_RTI)
  TARGET_LINK_LIBRARIES(LtsSessionDataDcs
    PUBLIC
      Lts::LtsSessionDataDds
  )
ENDIF()

3. LtsDataView Conditional Build

File: Lts/Viewer/CMakeLists.txt

Made LtsDataView conditional on BUILD_RTI:

IF(BUILD_RTI)
  ADD_SUBDIRECTORY(LtsDataView)
ENDIF()

4. Plugin Conditionals (97 files)

Files: All Lts/Plugins/*/CMakeLists.txt that depend on LtsWidgets/LtsDataView

Wrapped NGL_ADD_LIBRARY and NGL_INSTALL_TARGET with BUILD_RTI conditionals:

IF(BUILD_RTI)
  NGL_ADD_LIBRARY(WS ...)
  NGL_INSTALL_TARGET(...)
ENDIF(BUILD_RTI)

Fixed plugins include:

  • InfrastructureManagement/Gui/* (ResourceManagement, ExerciseAssignmentClassic, IsmComboBox)
  • OcBaseDownload/Gui/BaseDownloader
  • PresentationManagement/Gui/* (PresentationEdit, ScriptEditor, ScriptTimelineEditor)
  • ScreenRecording/Gui/ScreenRecorder
  • SituationReplayManagement/Gui/ReplayManagement
  • TargetManagement/Gui/ShootbackTargetConfiguration
  • Timeline/Gui/* (EventTimelineClassic, EventTimeline)
  • AudioVideoManagement/Gui/* (MobileVideoSystem, Eloka, TrainingVoiceCommunication, AVMenuEdit, CombatNetRadio)
  • PlanOverlays/Gui
  • OperatorManagement/Gui/* (OpmComboBox, OperatorEdit, OperatorSettings, Login, OperatorOverview)
  • skeleton/Skeleton.Stage3/Gui/YOUR_GUI_PLUGIN
  • MarkerManagement/Gui/MarkerEdit
  • ParticipantManagement/Gui/* (ParticipantInfo, TypeEdit, OperationalPlanning, ParticipantTemplates, MSDL, Saab, PpmComboBox)
  • FileManagement/Gui/* (FlmComboBox, Explorer)
  • BuildingViewer/Gui/BuildingViewer
  • AreaEffectSimulation/Gui/* (AirSupport, Explosion, ChargeEffect, TechnicalArea, Borderline, FunctionalArea, BCContamination, AesInfo, MineArea, Base, GasPipe, NContamination, ChargeAdministration, MineSingleVirtual)
  • MeteoDataManagement/Gui/MeteoData
  • ServiceManagement/Gui/ServiceEdit
  • ProjectDataManagement/Gui/PdmChargeTable
  • PlanEditor/*
  • EffectManagement/Gui/SoundArea
  • AlarmManagement/Gui/* (EmergencyCalls, ConfigAlarm)
  • ReportManagement/Gui/ReportViewer
  • CentralEffectSimulation/Gui/* (ParticipantUAS, ParticipantMove)
  • Messaging/Gui/Messaging
  • SAAs/Gui
  • CollateralDamageSimulation/Gui/CreateSimulation
  • AssetManagement/Gui/AsmTrainingAreaEdit
  • Styles/Test
  • NmeaManagement/Gui/BatteryNotification
  • VirtualKeyboard/Gui/VirtualKeyboard
  • DeveloperTools/Gui
  • NotificationManagement/Gui/NotificationEdit
  • CodificationManagement/Gui/CodificationData
  • ExerciseManagement/Gui/* (ExerciseEdit, ExerciseWatch)
  • OcSituationClient/Gui/* (ParticipantInfoOc, System, OcTerminal)
  • EffectShowClient/Gui
  • TrainingAreaBaseOC/Gui/SfmMessaging
  • Evaluations/Gui/* (SanNineLinerEdit)
  • ProjectionWorkstation/Gui
  • SituationReplay/Gui/ReplayControl
  • GuezNasat/Gui/* (AssignNasat, ConfigNasat)
  • Buildings/Gui/BuildingInfo
  • EffectShowManagement/Gui/* (EsmComboBox)
  • FilterManagement/Gui/* (Aes, BuildingComponents, Participant)
  • AppStarter/Gui/AppStart
  • AdvancedSymbology/Gui/SymbolEditor
  • ServiceMonitor/Gui/* (Monitors, EquipmentErrorRegistration, HgrAndMineSearch)

Verification

CMake Configuration (BUILD_RTI=OFF)

cmake -S qt6-after/qt6-migrated-legatus -B build \
  -DBUILD_RTI=OFF -DBUILD_SV=ON -DBUILD_WS=ON -DBUILD_AAR=ON

✅ Configuration successful

CMake Configuration (BUILD_RTI=ON)

cmake -S qt6-after/qt6-migrated-legatus -B build \
  -DBUILD_RTI=ON -DBUILD_SV=ON -DBUILD_WS=ON -DBUILD_AAR=ON

✅ Configuration successful (with RTI DDS installed)

Remaining Issues

  1. Z/src/nglwidgets/nglmainwindow.cpp: Logging macro errors with Qt6

    • ERROR_LOG and WARNING_LOG macros have issues with logger parameter
    • Needs Qt6 API adaptation
  2. Other Qt6 API migrations: Various modules still need Qt5→Qt6 API updates

Usage

Build without RTI (default)

cmake -S qt6-after/qt6-migrated-legatus -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build --parallel

Build with RTI (requires RTI DDS installation)

cmake -S qt6-after/qt6-migrated-legatus -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON
cmake --build build --parallel

Files Modified

  1. cmake/FindRTI.cmake
  2. Lts/Common/LtsSession/CMakeLists.txt
  3. Lts/Viewer/CMakeLists.txt
  4. cmake/NGLMacros.cmake (unrelated fix for NGL_ADD_BIG_RESOURCES)
  5. 97 plugin CMakeLists.txt files in Lts/Plugins/

Date

2026-08-18