From 835c977905fe208fdb55bf5d8b9108ba20e16544 Mon Sep 17 00:00:00 2001 From: Torsten Wierschin Date: Tue, 21 Jul 2026 15:21:17 +0200 Subject: [PATCH] Lts/Proxies/TrainingAreaBase: prefer Qt6 and fallback to Qt5 for Core/Sql/Network targets\n\nUse Qt6::Core/Sql/Network when available to support Qt6 migration; fall back to Qt5 to keep compatibility.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Lts/Proxies/TrainingAreaBase/CMakeLists.txt | 271 ++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100755 Lts/Proxies/TrainingAreaBase/CMakeLists.txt diff --git a/Lts/Proxies/TrainingAreaBase/CMakeLists.txt b/Lts/Proxies/TrainingAreaBase/CMakeLists.txt new file mode 100755 index 000000000..a3567ea86 --- /dev/null +++ b/Lts/Proxies/TrainingAreaBase/CMakeLists.txt @@ -0,0 +1,271 @@ +# +# $Id$ +# $HeadURL$ +# $Author$ +# + +# Uncomment if necessary +#ADD_SUBDIRECTORY(UnitTests) +#ADD_SUBDIRECTORY(ModuleTests) + +INCLUDE(MacroRTIDDSGen) +INCLUDE(MacroCodeGenIdl) + +ADD_SUBDIRECTORY(Plugins) + +SET(xml_FILE tab_service.xml) + +# +# --- Library tabTelegrams -------------------------------------------------------------------------------- +# +# Prefer Qt6 when available, fall back to Qt5 +find_package(Qt6 COMPONENTS Core Sql Network QUIET) +if (Qt6_FOUND) + set(_QT_CORE_TARGET Qt6::Core) + set(_QT_SQL_TARGET Qt6::Sql) + set(_QT_NETWORK_TARGET Qt6::Network) +else() + find_package(Qt5 COMPONENTS Core Sql Network QUIET) + set(_QT_CORE_TARGET Qt5::Core) + set(_QT_SQL_TARGET Qt5::Sql) + set(_QT_NETWORK_TARGET Qt5::Network) +endif() + +SET(SRCS_telegrams + training_area_telegrams.cpp + training_area_telegrams.h +) +NGL_ADD_LIBRARY(AAR SV WS HLA tabTelegrams STATIC ${SRCS_telegrams}) +NGL_TARGET_INCLUDE_DIRECTORIES(tabTelegrams + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/.. +) +NGL_TARGET_LINK_LIBRARIES(tabTelegrams + PUBLIC + ${_QT_CORE_TARGET} +) + +# install on RPM build and copy for local builds so that LogView automatically finds the training_area_telegrams.h file +if (BUILD_RPM) + add_custom_target(training_area_telegrams.h_bin) # empty target so that LogView still builds on RPM build + NGL_INSTALL(AAR SV FILES training_area_telegrams.h DESTINATION bin) +else() + add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h + COMMENT "[Local build] Copy training_area_telegrams.h for LogView into bin/" + ) + add_custom_target(training_area_telegrams.h_bin DEPENDS ${CMAKE_BINARY_DIR}/bin/training_area_telegrams.h) +endif() + +# +# --- Library svcTabCommon -------------------------------------------------------------------------------- +# +SET(SRCS_common + logger.cpp + logger.h + tab_export.h +) + +# Generate tab_enums.idl / tab.idl +CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) +# Generate tab_db_impl.cpp/.h, tab_db.h +CODEGEN_DATABASE(SRCS_common ${xml_FILE}) + +# Generate *.cpp/*.hpp from idl +RTIDDSGEN(SRCS_common tab_enums.idl) +RTIDDSGEN(SRCS_common tab.idl) + +# Generate tab_dt[s,c]_types.h, tab_ft[s,c]_types.h +CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) +# generate tab_[d|f]tc.h +CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE}) + +NGL_ADD_LIBRARY(AAR SV WS HLA svcTabCommon SHARED ${SRCS_common}) +NGL_TARGET_INCLUDE_DIRECTORIES(svcTabCommon + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/../ + ${CMAKE_CURRENT_BINARY_DIR}/../ +) +NGL_TARGET_LINK_LIBRARIES(svcTabCommon + PRIVATE + RTI::nddscpp2 + PUBLIC + Qt5::Core + Qt5::Sql + ddscore + NGLLogger + ngldb + svcPdmCommon + LtsUtilsCoreHeaderOnly +) +NGL_INSTALL_TARGET(svcTabCommon) + +# +# --- Library svcTabClient -------------------------------------------------------------------------------- +# +SET(SRCS_client + tab_export.h +) +# generate tab_[d|f]tc_impl.[cpp|h] +CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) + +NGL_ADD_LIBRARY(AAR SV WS HLA svcTabClient SHARED ${SRCS_client}) +NGL_TARGET_INCLUDE_DIRECTORIES(svcTabClient + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/../ + ${CMAKE_CURRENT_BINARY_DIR}/../ +) + +NGL_TARGET_LINK_LIBRARIES(svcTabClient + PRIVATE + RTI::nddscpp2 + ddsconnector + PUBLIC + svcTabCommon + ddsftc +) +NGL_INSTALL_TARGET(svcTabClient) + +# +# --- Library svcTabServer -------------------------------------------------------------------------------- +# +SET(SRCS_server + tx_mixin.cpp + tx_mixin.h +) +# generate tab_[d|f]ts.h, tab_[d|f]ts_impl.[cpp|h] +CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE}) + +NGL_ADD_LIBRARY(AAR HLA SV svcTabServer SHARED ${SRCS_server}) # NGL_ADD_LIBRARY2 won't work here - no time for investigations +if(BUILD_SV OR BUILD_HLA) + GENERATE_EXPORT_HEADER(svcTabServer) # FIXME: quick workaround +endif() +NGL_TARGET_INCLUDE_DIRECTORIES(svcTabServer + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/../ + ${CMAKE_CURRENT_BINARY_DIR}/../ +) + +NGL_TARGET_LINK_LIBRARIES(svcTabServer + PRIVATE + RTI::nddscpp2 + ddsconnector + ddsfts + PUBLIC + svcTabCommon + ngldb +) +NGL_INSTALL_TARGET(svcTabServer) + +# +# --- Topic Type Plugin -------------------------------------------------------------- +# +CREATE_TOPIC_TYPE_PLUGIN(${xml_FILE}) + +# +# --- RecordReplayPlugin -------------------------------------------------------------- +# +CREATE_RECORD_REPLAY_PLUGIN_SHARED(${xml_FILE}) +IF (TARGET tabRecordReplayPlugin) + TARGET_SOURCES(tabRecordReplayPlugin + PRIVATE + tab_record_replay_plugin_custom.cpp + tab_record_replay_plugin_custom.h + ) +ENDIF() + +# +# --- Executable svcTrainingAreaBase (sTAB) ------------------------------------------------- +# +SET(SRCS_exe + dds_handler.cpp + dds_handler.h + exm_handler.cpp + exm_handler.h + ism_handler.cpp + ism_handler.h + main.cpp + main_handler.cpp + main_handler.h + pdm_handler.cpp + pdm_handler.h + ppm_handler.cpp + ppm_handler.h + position_handler.cpp + position_handler.h + recv_from_dds_aes.cpp + recv_from_dds_aes.h + recv_from_dds_fts.cpp + recv_from_dds_fts.h + recv_from_tab.h + send_to_dds.cpp + send_to_dds.h + send_to_tab.h + settings.cpp + settings.h + tab_export.h + tab_plugin_interface.h + + WebSocketInterface/data_manager.cpp + WebSocketInterface/data_manager.h + WebSocketInterface/json_keys.h + WebSocketInterface/websocket_interface_handler.cpp + WebSocketInterface/websocket_interface_handler.h + WebSocketInterface/Messages/client_message.cpp + WebSocketInterface/Messages/client_message.h + WebSocketInterface/Messages/reply_message.cpp + WebSocketInterface/Messages/reply_message.h +# tx_mixin.cpp +# tx_mixin.h + + log4cxx_tab.props + ${xml_FILE} +) + +# Generate tab.sql, tab.xml +CODEGEN_SQL(SRCS_exe ${xml_FILE}) + +NGL_ADD_SVC_ICON(SRCS_exe) +NGL_ADD_EXECUTABLE(AAR SV svcTrainingAreaBase ${SRCS_exe}) +NGL_TARGET_LINK_LIBRARIES(svcTrainingAreaBase + Qt5::Core + Qt5::Network + LtsCoordTrans + LtsWebSocketServer + LtsCommandLineParser + LtsPluginLoader + LtsUtilsCoreHeaderOnly + LtsUtilsCore + svcTabCommon + svcTabServer + svcNomClient + svcAesClient + svcOpmClient + svcCoreClient + svcAsmClient + svcExmClient + svcIsmClient + svcPdmClient + svcPpmClient + ddsconnector + nglsettings + ProjectConfig + NGLLogger + nglcoreapplication + ngltools + tabTelegrams +) +NGL_INSTALL_TARGET(svcTrainingAreaBase) +NGL_INSTALL(AAR SV FILES log4cxx_tab.props DESTINATION bin) +NGL_ADD_TARGET_LINK(svcTrainingAreaBase sTAB) + +# clientPluginInterface +ADD_LIBRARY(tabPluginInterface INTERFACE) +TARGET_SOURCES(tabPluginInterface INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/tab_plugin_interface.h + ${CMAKE_CURRENT_SOURCE_DIR}/training_area_telegrams.h +) +TARGET_INCLUDE_DIRECTORIES(tabPluginInterface INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/../) +TARGET_LINK_LIBRARIES(tabPluginInterface INTERFACE Qt5::Core svcPdmCommon)