diff --git a/src/Comms/CMakeLists.txt b/src/Comms/CMakeLists.txt index c118d6313608..543b7399b6fc 100644 --- a/src/Comms/CMakeLists.txt +++ b/src/Comms/CMakeLists.txt @@ -68,6 +68,35 @@ endif() # ---------------------------------------------------------------------------- add_subdirectory(Bluetooth) +# ---------------------------------------------------------------------------- +# ZeroConf/mDNS Service Discovery +# ---------------------------------------------------------------------------- +if(QGC_ZEROCONF_ENABLED) + if(NOT USE_SYSTEM_QMDNSENGINE) + CPMAddPackage( + NAME qmdnsengine + GITHUB_REPOSITORY nitroshare/qmdnsengine + GIT_TAG master + OPTIONS + "BUILD_DOC OFF" + "BUILD_EXAMPLES OFF" + "BUILD_TESTS OFF" + ) + + if(TARGET qmdnsengine) + qgc_disable_dependency_warnings(qmdnsengine) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qmdnsengine) + target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE QGC_ZEROCONF_ENABLED) + else() + message(WARNING "QGC: qmdnsengine target not created, ZeroConf will be disabled") + endif() + else() + find_package(qmdnsengine REQUIRED) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qmdnsengine) + target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE QGC_ZEROCONF_ENABLED) + endif() +endif() + # ============================================================================ # Communication Link Subdirectories # ============================================================================ diff --git a/src/FirmwarePlugin/APM/CMakeLists.txt b/src/FirmwarePlugin/APM/CMakeLists.txt index 57d9e79903f1..af3ab1487988 100644 --- a/src/FirmwarePlugin/APM/CMakeLists.txt +++ b/src/FirmwarePlugin/APM/CMakeLists.txt @@ -47,12 +47,17 @@ qt_add_resources(${CMAKE_PROJECT_NAME} firmaware_plugin_apm_resource #===========================================================================# +if(NOT USE_SYSTEM_PARAMETERS) CPMAddPackage( NAME ArduPilotParams GITHUB_REPOSITORY ArduPilot/ParameterRepository GIT_TAG 037ff6bcfc080608544a4526f2c22406f2cce60f ) +else() + set(ArduPilotParams_SOURCE_DIR /usr/share/ParameterRepository) +endif() + # Dynamically discover all parameter definition files. # Directory layout: {Vehicle}-{Major}.{Minor}/apm.pdef.json # Resource alias: FirmwarePlugin/APM/APMParameterFactMetaData.{Vehicle}.{Major}.{Minor}.json diff --git a/src/GPS/CMakeLists.txt b/src/GPS/CMakeLists.txt index 902a62e6e255..331ebf858eeb 100644 --- a/src/GPS/CMakeLists.txt +++ b/src/GPS/CMakeLists.txt @@ -38,12 +38,16 @@ add_subdirectory(NTRIP) # PX4 GPS Drivers Integration # ============================================================================ +if(NOT USE_SYSTEM_PX4-GPSDRIVERS) CPMAddPackage( NAME px4-gpsdrivers GITHUB_REPOSITORY PX4/PX4-GPSDrivers GIT_TAG caf5158061bd10e79c9f042abb62c86bc6f3e7a7 SOURCE_SUBDIR src ) +else() +set(px4-gpsdrivers_SOURCE_DIR /usr/src/PX4-GPSDrivers) +endif() # NOTE: Using file(GLOB) for external dependency sources # CONFIGURE_DEPENDS ensures CMake re-runs if files are added/removed diff --git a/src/MAVLink/CMakeLists.txt b/src/MAVLink/CMakeLists.txt index 43a18b671b14..ae88ab727819 100644 --- a/src/MAVLink/CMakeLists.txt +++ b/src/MAVLink/CMakeLists.txt @@ -34,6 +34,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_ message(STATUS "QGC: Building MAVLink") +if(NOT USE_SYSTEM_MAVLINK) CPMAddPackage( NAME mavlink GIT_REPOSITORY ${QGC_MAVLINK_GIT_REPO} @@ -43,6 +44,22 @@ CPMAddPackage( "MAVLINK_VERSION ${QGC_MAVLINK_VERSION}" ) +else() +set(mavlink_SOURCE_DIR /usr/include/c_library_v2) +file(GLOB MAVLINK_SOURCES1 ${mavlink_SOURCE_DIR}/*) +file(GLOB MAVLINK_SOURCES2 ${mavlink_SOURCE_DIR}/all/*) +file(GLOB MAVLINK_SOURCES3 ${mavlink_SOURCE_DIR}/common/*) +file(GLOB MAVLINK_SOURCES4 ${mavlink_SOURCE_DIR}/development/*) + +target_sources(${CMAKE_PROJECT_NAME} + PRIVATE + ${MAVLINK_SOURCES1} + ${MAVLINK_SOURCES2} + ${MAVLINK_SOURCES3} + ${MAVLINK_SOURCES4} +) +endif() + if(mavlink_ADDED) add_dependencies(${CMAKE_PROJECT_NAME} mavlink) target_include_directories(${CMAKE_PROJECT_NAME} diff --git a/src/MAVLink/LibEvents/CMakeLists.txt b/src/MAVLink/LibEvents/CMakeLists.txt index 3dedd962c435..adf23f85ff0f 100644 --- a/src/MAVLink/LibEvents/CMakeLists.txt +++ b/src/MAVLink/LibEvents/CMakeLists.txt @@ -18,6 +18,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_ # LibEvents Library Integration # ============================================================================ +if(NOT USE_SYSTEM_LIBEVENTS) CPMAddPackage( NAME libevents GITHUB_REPOSITORY mavlink/libevents @@ -30,3 +31,29 @@ CPMAddPackage( # warnings when its headers are compiled as part of QGC source code. target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE libevents) target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE ${libevents_SOURCE_DIR}/libs/cpp) + +else() +find_package(libevents REQUIRED) +set(LIBEVENTS_INCLUDE_DIRS /usr/include/libevents) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${LIBEVENTS_INCLUDE_DIRS}) +find_library(EVENTS_HEALTH_LIB events_health_and_arming_checks) +find_library(EVENTS_PARSER_LIB events_parser) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${EVENTS_HEALTH_LIB}) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${EVENTS_PARSER_LIB}) +find_package(PkgConfig) + +if(TARGET libevents) + if(TARGET events_health_and_arming_checks) + if(TARGET events_parser) + target_link_libraries(events_health_and_arming_checks PRIVATE events_parser) + message(STATUS "Fixed: events_health_and_arming_checks -> events_parser") + endif() + endif() + + if(TARGET events::health_and_arming_checks AND TARGET events::parser) + target_link_libraries(events::health_and_arming_checks PRIVATE events::parser) + message(STATUS "Fixed: events::health_and_arming_checks -> events::parser") + endif() +endif() +endif() + diff --git a/src/Utilities/Compression/CMakeLists.txt b/src/Utilities/Compression/CMakeLists.txt index 262d39060b88..d40c8a23fc9f 100644 --- a/src/Utilities/Compression/CMakeLists.txt +++ b/src/Utilities/Compression/CMakeLists.txt @@ -43,6 +43,7 @@ if(WIN32) ) endif() +if(NOT USE_SYSTEM_ZLIB) CPMAddPackage( NAME zlib GITHUB_REPOSITORY madler/zlib @@ -73,10 +74,15 @@ if(NOT TARGET ZLIB::ZLIB) add_library(ZLIB::ZLIB ALIAS zlibstatic) endif() +else() +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE z) +endif() + # ============================================================================ # XZ (LZMA) Integration - liblzma from xz-utils # ============================================================================ +if(NOT USE_SYSTEM_XZ-EMBEDDED) CPMAddPackage( NAME xz VERSION 5.8.2 @@ -127,10 +133,36 @@ else() message(FATAL_ERROR "liblzma target not found") endif() +else() + +add_library(xz STATIC ${LIB_PREFIX}/libxz.a) +set_target_properties(xz PROPERTIES + IMPORTED_LOCATION "${LIB_PREFIX}/libxz.a" + INTERFACE_INCLUDE_DIRECTORIES "/usr/include/xz-embedded" +) + +target_compile_definitions(xz + PUBLIC + XZ_USE_CRC64 + XZ_USE_CRC32 + XZ_DEC_ANY_CHECK +) + +target_include_directories(xz INTERFACE /usr/include/xz-embedded) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE xz) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${LIB_PREFIX}/libxz.a") +endif() + # ============================================================================ # Zstandard (ZSTD) Integration # ============================================================================ +# Suppress CMake warning about MSVC not being an ASM assembler (CMP0194) +if(POLICY CMP0194) + set(CMAKE_POLICY_DEFAULT_CMP0194 NEW CACHE STRING "" FORCE) +endif() + +if(NOT USE_SYSTEM_ZSTD) CPMAddPackage( NAME zstd VERSION 1.5.7 @@ -174,12 +206,16 @@ if(TARGET libzstd_static) else() message(FATAL_ERROR "libzstd_static target not found") endif() +else() + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE zstd) +endif() # ============================================================================ # LZ4 Integration (Fast compression) - Optional # ============================================================================ if(QGC_ENABLE_LZ4) + if(NOT USE_SYSTEM_LZ4) CPMAddPackage( NAME lz4 VERSION 1.10.0 @@ -207,6 +243,9 @@ if(QGC_ENABLE_LZ4) else() message(FATAL_ERROR "lz4_static target not found") endif() + else() + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE lz4) + endif() endif() # ============================================================================ @@ -219,6 +258,7 @@ endif() # - TODO: Update to tagged release when bzip2 publishes one with CMake support if(QGC_ENABLE_BZIP2) + if(NOT USE_SYSTEM_BZIP2) CPMAddPackage( NAME bzip2 VERSION 1.0.8 @@ -248,6 +288,9 @@ if(QGC_ENABLE_BZIP2) else() message(FATAL_ERROR "bz2_static target not found") endif() + else() + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE bzip2) + endif() endif() # ============================================================================ @@ -267,6 +310,7 @@ else() set(_LIBARCHIVE_LZ4 "OFF") endif() +if(NOT USE_SYSTEM_LIBARCHIVE) CPMAddPackage( NAME libarchive VERSION 3.8.6 @@ -325,4 +369,7 @@ else() message(FATAL_ERROR "libarchive target not found") endif() +else() + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE libarchive) +endif() diff --git a/src/Utilities/Geo/CMakeLists.txt b/src/Utilities/Geo/CMakeLists.txt index f0e328b09ef9..bf2a906df589 100644 --- a/src/Utilities/Geo/CMakeLists.txt +++ b/src/Utilities/Geo/CMakeLists.txt @@ -34,6 +34,7 @@ qt_add_resources(${CMAKE_PROJECT_NAME} "kml_schema" # GeographicLib Integration # ============================================================================ +if(NOT USE_SYSTEM_GEOGRAPHICLIB) CPMAddPackage( NAME geographiclib VERSION 2.7 @@ -62,11 +63,16 @@ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE GeographicLib::GeographicLib if(geographiclib_ADDED) qgc_disable_dependency_warnings(GeographicLib_STATIC) endif() +else() +find_package(GeographicLib REQUIRED) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE GeographicLib) +endif() # ============================================================================ # Shapelib Integration # ============================================================================ +if(NOT USE_SYSTEM_SHAPE) CPMAddPackage( NAME Shapelib VERSION 1.6.3 @@ -78,6 +84,8 @@ CPMAddPackage( "BUILD_TESTING OFF" ) +endif() + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE shp) if(Shapelib_ADDED) qgc_disable_dependency_warnings(shp) diff --git a/src/Utilities/Parsing/Exif/CMakeLists.txt b/src/Utilities/Parsing/Exif/CMakeLists.txt index a4d91815ba4a..17b4b62834bb 100644 --- a/src/Utilities/Parsing/Exif/CMakeLists.txt +++ b/src/Utilities/Parsing/Exif/CMakeLists.txt @@ -16,6 +16,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_ # libexif uses autotools, so we build it directly from source files # ============================================================================ +if(NOT USE_SYSTEM_LIBEXIF) CPMAddPackage( NAME libexif VERSION 0.6.25 @@ -103,5 +104,5 @@ typedef SSIZE_T ssize_t; # Suppress warnings in third-party code qgc_disable_dependency_warnings(exif) endif() - +endif() target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE exif) diff --git a/src/Utilities/Parsing/ULog/CMakeLists.txt b/src/Utilities/Parsing/ULog/CMakeLists.txt index c42e5d37e6d8..59ce8a88a4b3 100644 --- a/src/Utilities/Parsing/ULog/CMakeLists.txt +++ b/src/Utilities/Parsing/ULog/CMakeLists.txt @@ -16,6 +16,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_ # PX4 ULog parsing library # ============================================================================ +if(NOT USE_SYSTEM_ULOG_CPP) CPMAddPackage( NAME ulog_cpp GITHUB_REPOSITORY PX4/ulog_cpp @@ -28,3 +29,7 @@ qgc_disable_dependency_warnings(ulog_cpp) target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE ${ulog_cpp_SOURCE_DIR}) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ulog_cpp::ulog_cpp) +else() +find_package(ulog_cpp REQUIRED) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ulog_cpp) +endif() diff --git a/src/Utilities/SDL/CMakeLists.txt b/src/Utilities/SDL/CMakeLists.txt index 22a0bd05e69f..a62e5a8718e9 100644 --- a/src/Utilities/SDL/CMakeLists.txt +++ b/src/Utilities/SDL/CMakeLists.txt @@ -40,6 +40,7 @@ else() set(SDL_STATIC_FLAG "ON") endif() +if(NOT USE_SYSTEM_SDL3) CPMAddPackage( NAME SDL3 VERSION 3.4.2 @@ -95,11 +96,17 @@ else() target_compile_definitions(SDL3-static PRIVATE SDL_MAIN_NOIMPL SDL_MAIN_HANDLED) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE SDL3::SDL3-static) endif() +else() +find_package(SDL3 REQUIRED CONFIG) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE SDL3) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${SDL3_INCLUDE_DIRS}) +endif() # ============================================================================ # SDL Game Controller Database # ============================================================================ +if(NOT USE_SYSTEM_SDL_GAMECONTROLLERDB) CPMAddPackage( NAME sdl_gamecontrollerdb GITHUB_REPOSITORY mdqinc/SDL_GameControllerDB @@ -107,6 +114,10 @@ CPMAddPackage( DOWNLOAD_ONLY ) +else() +set(sdl_gamecontrollerdb_SOURCE_DIR /usr/share/SDL_GameControllerDB) +endif() + set(SDL_GAMECONTROLLERDB_PATH "${sdl_gamecontrollerdb_SOURCE_DIR}/gamecontrollerdb.txt") qgc_set_qt_resource_alias("${SDL_GAMECONTROLLERDB_PATH}") diff --git a/src/VideoManager/VideoReceiver/GStreamer/CMakeLists.txt b/src/VideoManager/VideoReceiver/GStreamer/CMakeLists.txt index 4ad33c6967c2..c4a7e16cdef6 100644 --- a/src/VideoManager/VideoReceiver/GStreamer/CMakeLists.txt +++ b/src/VideoManager/VideoReceiver/GStreamer/CMakeLists.txt @@ -12,6 +12,28 @@ if(QGC_ENABLE_GST_VIDEOSTREAMING) OPTIONAL_COMPONENTS GlEgl GlWayland GlX11 ) + if(GStreamer_USE_STATIC_LIBS) + foreach(_plugin IN LISTS GSTREAMER_PLUGINS) + if(GST_PLUGIN_${_plugin}_FOUND) + target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE GST_PLUGIN_${_plugin}_FOUND) + endif() + endforeach() + endif() + + # Build GStreamer Qt6 QML GL plugin + if(USE_SYSTEM_GSTQML6) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${LIB_PREFIX}/gstreamer-1.0/libgstqml6.so") + else() + add_subdirectory(gstqml6gl) + endif() + + # TODO: Add Qt6 Direct3D11 plugin support + # https://gstreamer.freedesktop.org/documentation/qt6d3d11/index.html#qml6d3d11sink-page +endif() + +if(TARGET gstqml6gl) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE gstqml6gl) + target_sources(${CMAKE_PROJECT_NAME} PRIVATE GStreamer.cc diff --git a/src/Viewer3D/Providers/Osm/CMakeLists.txt b/src/Viewer3D/Providers/Osm/CMakeLists.txt index 6fda61451dbe..40b7515d623f 100644 --- a/src/Viewer3D/Providers/Osm/CMakeLists.txt +++ b/src/Viewer3D/Providers/Osm/CMakeLists.txt @@ -59,6 +59,7 @@ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE expat) # protozero — required by libosmium headers # ---------------------------------------------------------------------------- +if(NOT USE_SYSTEM_PROTOZERO) CPMAddPackage( NAME protozero GITHUB_REPOSITORY mapbox/protozero @@ -66,10 +67,14 @@ CPMAddPackage( DOWNLOAD_ONLY YES ) +else() + set(protozero_SOURCE_DIR /usr/src/protozero) +endif() # ---------------------------------------------------------------------------- # libosmium — OSM data parsing # ---------------------------------------------------------------------------- +if(NOT USE_SYSTEM_LIBOSMIUM) CPMAddPackage( NAME libosmium GITHUB_REPOSITORY osmcode/libosmium @@ -77,6 +82,10 @@ CPMAddPackage( DOWNLOAD_ONLY YES ) +else() + set(libosmium_SOURCE_DIR /usr/src/libosmium) +endif() + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE diff --git a/test/UnitTestFramework/Benchmarking/CMakeLists.txt b/test/UnitTestFramework/Benchmarking/CMakeLists.txt index 3f95729725f7..0ba02740b9c8 100644 --- a/test/UnitTestFramework/Benchmarking/CMakeLists.txt +++ b/test/UnitTestFramework/Benchmarking/CMakeLists.txt @@ -1,12 +1,14 @@ # ---------------------------------------------------------------------------- # nanobench (Microbenchmarking Framework) # ---------------------------------------------------------------------------- +if(NOT USE_SYSTEM_NANOBENCH) CPMAddPackage( NAME nanobench GITHUB_REPOSITORY martinus/nanobench VERSION 4.3.11 SYSTEM YES ) +endif() qgc_disable_dependency_warnings(nanobench) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE nanobench) diff --git a/test/UnitTestFramework/PropertyTesting/CMakeLists.txt b/test/UnitTestFramework/PropertyTesting/CMakeLists.txt index 59a510ea9ab6..2a5c05350f49 100644 --- a/test/UnitTestFramework/PropertyTesting/CMakeLists.txt +++ b/test/UnitTestFramework/PropertyTesting/CMakeLists.txt @@ -11,6 +11,7 @@ string(REPLACE "--coverage" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") string(REPLACE "-fprofile-arcs" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") string(REPLACE "-ftest-coverage" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") +if(NOT USE_SYSTEM_RAPIDCHECK) CPMAddPackage( NAME rapidcheck GITHUB_REPOSITORY emil-e/rapidcheck @@ -27,6 +28,7 @@ CPMAddPackage( "RC_ENABLE_EXAMPLES OFF" ) +endif() # Restore coverage flags set(CMAKE_CXX_FLAGS_DEBUG "${_RC_SAVED_CXX_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${_RC_SAVED_C_FLAGS}")