Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QGCS error for Android
Forum Updated to NodeBB v4.3 + New Features

QGCS error for Android

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
21 Posts 2 Posters 1.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J jsulm
    24 Feb 2025, 13:55

    @InsideFPV said in QGCS error for Android:

    please give me solution

    Please answer my question first: do you link to libpng explicitly (in your CMakeLists.txt file)?

    I Offline
    I Offline
    InsideFPV
    wrote on 25 Feb 2025, 04:49 last edited by
    #5

    @jsulm No sir
    I am adding full cmakelist.txt please check

    cmake_minimum_required(VERSION 3.25)

    list(APPEND CMAKE_MODULE_PATH
    ${CMAKE_SOURCE_DIR}/cmake
    ${CMAKE_SOURCE_DIR}/cmake/modules
    ${CMAKE_SOURCE_DIR}/cmake/find-modules
    )

    if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release")
    endif()

    set(CMAKE_REQUIRED_QUIET ON)

    #######################################################

    Custom Build Configuration

    #######################################################

    include(CustomOptions)

    if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/custom)
    message(STATUS "Enabling custom build")
    set(QGC_CUSTOM_BUILD ON)
    list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/custom/cmake)
    include(CustomOverrides)
    endif()

    #######################################################

    Project Info

    #######################################################

    set(CMAKE_OSX_ARCHITECTURES "arm64")

    set(CMAKE_OSX_SYSROOT "iphoneos")

    if(APPLE)
    set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
    endif()

    include(Git)

    project(${QGC_APP_NAME}
    VERSION ${QGC_APP_VERSION}
    DESCRIPTION ${QGC_APP_DESCRIPTION}
    HOMEPAGE_URL "https://qgroundcontrol.com/"
    LANGUAGES C CXX
    )

    if(APPLE AND NOT IOS)
    set(MACOS TRUE)
    endif()

    #######################################################

    CMake Configuration Options

    #######################################################

    include(GNUInstallDirs)
    include(FetchContent)
    include(CMakePrintHelpers)

    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)

    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_AUTORCC ON)

    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    set(CMAKE_POSITION_INDEPENDENT_CODE ON)

    if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    if(LINUX)
    set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/AppDir/usr")
    else()
    set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/staging")
    endif()
    endif()

    if(QGC_USE_CACHE)
    if(CMAKE_HOST_UNIX)
    find_program(CCACHE_PROGRAM ccache)
    if(CCACHE_PROGRAM)
    message(STATUS "Using CCache")
    set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
    if(APPLE)
    set(CMAKE_OBJC_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
    endif()
    endif()
    elseif(CMAKE_HOST_WIN32)
    find_program(SCCACHE_PROGRAM sccache)
    if(SCCACHE_PROGRAM)
    message(STATUS "Using SCCache")
    set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
    endif()
    endif()
    endif()

    if(MSVC)
    set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
    endif()

    if(CMAKE_CROSSCOMPILING AND ANDROID)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
    endif()

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>/lib)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)

    https://cmake.org/cmake/help/latest/policy/CMP0168.html#policy:CMP0168

    if(POLICY CMP0168)
    cmake_policy(SET CMP0168 NEW)
    set(CMAKE_POLICY_DEFAULT_CMP0168 NEW)
    endif()

    https://cmake.org/cmake/help/latest/policy/CMP0075.html#policy:CMP0075

    if(POLICY CMP0075)
    cmake_policy(SET CMP0075 NEW)
    set(CMAKE_POLICY_DEFAULT_CMP0075 NEW)
    endif()

    if(QGC_USE_IWYU)
    include(IWYU)
    endif()

    #######################################################

    Qt6 Configuration

    #######################################################

    if(CMAKE_CROSSCOMPILING AND NOT IS_DIRECTORY ${QT_HOST_PATH})
    message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.")
    endif()

    find_program(QMAKE_EXECUTABLE NAMES qmake HINTS ${QT_ROOT_DIR} ${QTDIR} ENV QTDIR PATH_SUFFIXES bin)
    execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
    if(QT_VERSION LESS QT_MINIMUM_VERSION)
    MESSAGE(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}.
    Installed version: ${QT_VERSION}")
    endif()

    add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x060800)

    if(CMAKE_BUILD_TYPE STREQUAL "Release")
    add_compile_definitions(
    NDEBUG
    QT_NO_DEBUG
    QT_NO_DEBUG_OUTPUT
    )
    elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
    include(CTest)
    endif()

    if(ANDROID)
    list(APPEND QT_ANDROID_MULTI_ABI_FORWARD_VARS QGC_STABLE_BUILD QT_HOST_PATH)
    endif()

    find_package(Qt6
    ${QT_MINIMUM_VERSION}
    REQUIRED
    COMPONENTS
    Concurrent
    Core
    Core5Compat
    Location
    Multimedia
    Network
    OpenGL
    Positioning
    Qml
    QmlIntegration
    Quick
    QuickControls2
    QuickWidgets
    Sensors
    Sql
    Svg
    TextToSpeech
    Widgets
    Xml
    OPTIONAL_COMPONENTS
    Bluetooth
    Charts
    LinguistTools
    MultimediaQuickPrivate
    Quick3D
    Quick3DTools
    SerialPort
    Test
    HINTS
    ${QT_LIBRARY_HINTS}
    )

    if(LINUX)
    find_package(Qt6 ${QT_MINIMUM_VERSION} COMPONENTS WaylandClient)
    endif()

    Set extra standard project setup options for Qt 6.7.0 and above

    set(EXTRA_STANDARD_PROJECT_SETUP_OPTIONS)
    if(QT_VERSION VERSION_GREATER_EQUAL 6.8.2)
    list(APPEND EXTRA_STANDARD_PROJECT_SETUP_OPTIONS I18N_SOURCE_LANGUAGE en)
    endif()

    qt_standard_project_setup(
    REQUIRES ${QGC_QT_MINIMUM_VERSION}
    SUPPORTS_UP_TO ${QGC_QT_MAXIMUM_VERSION}
    ${EXTRA_STANDARD_PROJECT_SETUP_OPTIONS}
    )

    qt_policy(
    SET QTP0001 NEW
    SET QTP0002 NEW
    SET QTP0003 NEW
    SET QTP0004 NEW
    SET QTP0005 NEW
    )

    #######################################################

    QGroundControl Options

    #######################################################

    add_compile_definitions(
    $<$<NOT:$BOOL:${QGC_STABLE_BUILD}>:QGC_DAILY_BUILD>
    $<$BOOL:${QGC_BUILD_TESTING}:QGC_UNITTEST_BUILD>
    $<$BOOL:${QGC_DEBUG_QML}:QT_QML_DEBUG>
    $<$BOOL:${QGC_DISABLE_APM_MAVLINK}:QGC_NO_ARDUPILOT_DIALECT>
    $<$BOOL:${QGC_VIEWER3D}:QGC_VIEWER3D>
    )

    if(NOT QGC_BUILD_TESTING)
    set(BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
    endif()

    if("${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm64;x86_64" OR "${CMAKE_OSX_ARCHITECTURES}" MATCHES "x86_64;arm64")
    set(MACOS_UNIVERSAL_BUILD ON)
    endif()

    TODO: Force building dependencies if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL CMAKE_SYSTEM_PROCESSOR)?

    if(CMAKE_OSX_ARCHITECTURES AND NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" IN_LIST CMAKE_OSX_ARCHITECTURES)

    include(CPM)
    if(CMAKE_CROSSCOMPILING OR ANDROID OR MACOS_UNIVERSAL_BUILD)
    set(CPM_DOWNLOAD_ALL ON)
    endif()

    #######################################################

    Custom Build Configuration

    #######################################################

    if(QGC_CUSTOM_BUILD)
    add_subdirectory(custom)
    endif()

    #######################################################

    QGroundControl Resources

    #######################################################

    Note: Adding Resources to Library instead requires using Q_INIT_RESOURCE(qgcresources)

    if(NOT QGC_CUSTOM_BUILD)
    # Custom builds can override the resources
    list(APPEND QGC_RESOURCES
    ${CMAKE_SOURCE_DIR}/qgcimages.qrc
    ${CMAKE_SOURCE_DIR}/qgcresources.qrc
    ${CMAKE_SOURCE_DIR}/qgroundcontrol.qrc
    )
    endif()

    list(APPEND QGC_RESOURCES
    ${CMAKE_SOURCE_DIR}/resources/InstrumentValueIcons/InstrumentValueIcons.qrc
    ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/APM/APMResources.qrc
    ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/PX4/PX4Resources.qrc
    )

    if(QGC_UTM_ADAPTER)
    list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/utmsp.qrc)
    else()
    list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/dummy/utmsp_dummy.qrc)
    endif()

    if(QGC_BUILD_TESTING)
    list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/test/UnitTest.qrc)
    endif()

    #######################################################

    QGroundControl Target

    #######################################################

    qt_add_executable(${CMAKE_PROJECT_NAME}
    WIN32
    MACOSX_BUNDLE
    src/main.cc
    ${QGC_RESOURCES}
    )

    if(NOT ANDROID AND NOT IOS)
    target_sources(${CMAKE_PROJECT_NAME}
    PRIVATE
    src/RunGuard.cc
    src/RunGuard.h
    )
    endif()

    target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)

    if(Qt6LinguistTools_FOUND)
    file(GLOB TS_SOURCES ${CMAKE_SOURCE_DIR}/translations/qgc_*.ts)
    set_source_files_properties(${TS_SOURCES} PROPERTIES OUTPUT_LOCATION "${CMAKE_BINARY_DIR}/i18n")
    qt_add_translations(${CMAKE_PROJECT_NAME}
    # TS_FILE_BASE ${CMAKE_PROJECT_NAME}
    # TS_FILE_DIR ${CMAKE_SOURCE_DIR}/translations/
    TS_FILES ${TS_SOURCES}
    RESOURCE_PREFIX "/"
    LUPDATE_OPTIONS -no-obsolete
    )
    endif()

    set_target_properties(${CMAKE_PROJECT_NAME}
    PROPERTIES
    QT_RESOURCE_PREFIX "/qgc"
    OUTPUT_NAME ${CMAKE_PROJECT_NAME}
    )

    if(WIN32)
    # windows installer files shared with core and custom
    set(DEPLOY_WIN_FILES
    "${CMAKE_SOURCE_DIR}/deploy/windows/driver.msi"
    "${CMAKE_SOURCE_DIR}/deploy/windows/nullsoft_installer.nsi"
    "${CMAKE_SOURCE_DIR}/deploy/windows/QGroundControl.rc"
    "${QGC_WINDOWS_INSTALL_HEADER_PATH}"
    "${QGC_WINDOWS_ICON_PATH}"
    )

    # Destination directory where files will be copied
    set(QGC_INSTALLER_SOURCE_WIN "${CMAKE_BINARY_DIR}/deploy/windows")
    file(MAKE_DIRECTORY ${QGC_INSTALLER_SOURCE_WIN})
    foreach(FILE ${DEPLOY_WIN_FILES})
        # filename without the path
        get_filename_component(FILE_NAME ${FILE} NAME)
        # re-copy the file if it changes
        add_custom_command(
            OUTPUT "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
            COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FILE}" "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
            DEPENDS "${FILE}"  # Depend on the source file so that it re-copies when it changes
        )
        list(APPEND QGC_INSTALLER_SOURCE_WIN_FILES "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}")
    endforeach()
    
    target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QGC_INSTALLER_SOURCE_WIN_FILES})
    set_target_properties(${CMAKE_PROJECT_NAME}
        PROPERTIES
            WIN32_EXECUTABLE TRUE
            QT_TARGET_RC_ICONS "${QGC_WINDOWS_ICON_PATH}"
    )
    add_compile_definitions(_USE_MATH_DEFINES)
    

    elseif(MACOS)
    set(MACOSX_BUNDLE_ICON_FILE "macx.icns")
    set(app_icon_macos "${QGC_MACOS_ICON_PATH}/macx.icns")
    set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
    target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${app_icon_macos})
    set_target_properties(${CMAKE_PROJECT_NAME}
    PROPERTIES
    MACOSX_BUNDLE TRUE
    MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/deploy/macos/MacOSXBundleInfo.plist.in"
    MACOSX_BUNDLE_BUNDLE_NAME "${CMAKE_PROJECT_NAME}"
    MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
    MACOSX_BUNDLE_COPYRIGHT "${QGC_APP_COPYRIGHT}"
    MACOSX_BUNDLE_GUI_IDENTIFIER "${QGC_BUNDLE_ID}"
    MACOSX_BUNDLE_ICON_FILE "macx.icns"
    MACOSX_BUNDLE_INFO_STRING "${QGC_APP_DESCRIPTION}"
    MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
    MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
    )
    elseif(IOS)
    enable_language(OBJC)

    set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
    set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") # iPhone,iPad
    set(CMAKE_XCODE_ATTRIBUTE_INFOPLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/deploy/ios/iOS-Info.plist")
    
    set_target_properties(${CMAKE_PROJECT_NAME}
        PROPERTIES
            QT_IOS_LAUNCH_SCREEN ${CMAKE_SOURCE_DIR}/deploy/ios/QGCLaunchScreen.xib
            XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.mavlink.qgroundcontrol"
            XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
            XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
            XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
            XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
            XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0"
            XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone,iPad
            XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${CMAKE_PROJECT_NAME}
            XCODE_ATTRIBUTE_INFOPLIST_KEY_LSApplicationCategoryType "public.app-category.mycategory"
            XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES"
    )
    
    # set(QT_NO_FFMPEG_XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON)
    qt_add_ios_ffmpeg_libraries(${CMAKE_PROJECT_NAME})
    

    elseif(ANDROID)
    include(CPM)
    CPMAddPackage(
    NAME android_openssl
    URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
    )
    include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
    add_android_openssl_libraries(${CMAKE_PROJECT_NAME})

    set(ANDROID_PLATFORM_ARCHITECTURE_CODE)
    if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
        set(ANDROID_PLATFORM_ARCHITECTURE_CODE "032")
    elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
        set(ANDROID_PLATFORM_ARCHITECTURE_CODE "064")
    elseif(${ANDROID_ABI} STREQUAL "x86")
        set(ANDROID_PLATFORM_ARCHITECTURE_CODE "132")
    elseif(${ANDROID_ABI} STREQUAL "x86_64")
        set(ANDROID_PLATFORM_ARCHITECTURE_CODE "164")
    endif()
    set(ANDROID_VERSION_CODE "${ANDROID_PLATFORM_ARCHITECTURE_CODE}${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}")
    
    set_target_properties(${CMAKE_PROJECT_NAME}
        PROPERTIES
            # QT_ANDROID_ABIS ${ANDROID_ABI}
            QT_ANDROID_MIN_SDK_VERSION ${QGC_QT_ANDROID_MIN_SDK_VERSION}
            QT_ANDROID_TARGET_SDK_VERSION ${QGC_QT_ANDROID_TARGET_SDK_VERSION}
            QT_ANDROID_PACKAGE_NAME "${QGC_ANDROID_PACKAGE_NAME}"
            QT_ANDROID_PACKAGE_SOURCE_DIR "${QGC_ANDROID_PACKAGE_SOURCE_DIR}"
            QT_ANDROID_VERSION_NAME ${CMAKE_PROJECT_VERSION}
            QT_ANDROID_VERSION_CODE ${ANDROID_VERSION_CODE}
            QT_QML_ROOT_PATH ${CMAKE_SOURCE_DIR}
            # QT_ANDROID_SDK_BUILD_TOOLS_REVISION
            # QT_ANDROID_SYSTEM_LIBS_PREFIX
    )
    

    endif()

    add_compile_definitions(
    QGC_APP_NAME="${QGC_APP_NAME}"
    QGC_ORG_NAME="${QGC_ORG_NAME}"
    QGC_ORG_DOMAIN="${QGC_ORG_DOMAIN}"
    QGC_APP_VERSION_STR="${QGC_APP_VERSION_STR}"
    QGC_SETTINGS_VERSION=${QGC_SETTINGS_VERSION}
    )

    add_subdirectory(src)

    target_link_libraries(${CMAKE_PROJECT_NAME}
    PRIVATE
    Qt6::Core
    Qt6::Core5Compat
    Qt6::Quick
    Qt6::Svg
    Qt6::Widgets
    QGC
    QmlControls

    )

    target_link_libraries(QGroundControl
    PUBLIC
    -ljpeg
    -lpng
    )

    if(ANDROID)
    # Find JPEG library in NDK sysroot, Qt paths, or project paths
    find_library(JPEG_LIBRARY jpeg
    PATHS
    ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI} # NDK sysroot for the ABI
    ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib # Alternative NDK path
    ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI} # Project-specific libraries
    ${QT_LIBRARY_DIR} # Qt library directory (if applicable)
    NO_DEFAULT_PATH # Restrict to these paths only
    )

    # Find PNG library (you’ll need to do the same for PNG if it’s missing)
    find_library(PNG_LIBRARY png
        PATHS
            ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI}
            ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib
            ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}
            ${QT_LIBRARY_DIR}
        NO_DEFAULT_PATH
    )
    
    # Check if libraries are found
    if(NOT JPEG_LIBRARY)
        message(WARNING "JPEG library not found. Ensure libjpeg is available for ${ANDROID_ABI}. Attempting to proceed without it.")
        # Optionally, you can specify a fallback path or disable linking if not critical
        # set(JPEG_LIBRARY "")  # Comment out or handle gracefully
    endif()
    if(NOT PNG_LIBRARY)
        message(WARNING "PNG library not found. Ensure libpng is available for ${ANDROID_ABI}. Attempting to proceed without it.")
        # set(PNG_LIBRARY "")  # Comment out or handle gracefully
    endif()
    
    # Link the libraries (only if found)
    if(JPEG_LIBRARY)
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${JPEG_LIBRARY})
    endif()
    if(PNG_LIBRARY)
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${PNG_LIBRARY})
    endif()
    
    # Continue with other Android-specific configurations
    target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)
    target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
    
    target_link_libraries(${CMAKE_PROJECT_NAME}
        PRIVATE
            Qt6::Core
            Joystick
            Utilities
    )
    
    if(NOT QGC_NO_SERIAL_LINK)
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
    endif()
    

    endif()
    #target_link_libraries(QGroundControl PRIVATE C:/libpng/build/libpng.a)

    if(QGC_BUILD_TESTING)
    add_subdirectory(test)
    target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qgctest)
    endif()

    if(ANDROID)
    target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)

    target_link_libraries(${CMAKE_PROJECT_NAME}
        PRIVATE
            Qt6::Core
            Joystick
            Utilities
    )
    
    target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
    
    if(NOT QGC_NO_SERIAL_LINK)
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
    endif()
    

    endif()

    qt_import_plugins(${CMAKE_PROJECT_NAME}
    INCLUDE Qt6::QSvgPlugin
    EXCLUDE_BY_TYPE geoservices
    INCLUDE_BY_TYPE sqldrivers Qt6::QSQLiteDriverPlugin
    )

    include(Install)

    include(PrintSummary)

    J 1 Reply Last reply 25 Feb 2025, 07:11
    0
    • I InsideFPV
      25 Feb 2025, 04:49

      @jsulm No sir
      I am adding full cmakelist.txt please check

      cmake_minimum_required(VERSION 3.25)

      list(APPEND CMAKE_MODULE_PATH
      ${CMAKE_SOURCE_DIR}/cmake
      ${CMAKE_SOURCE_DIR}/cmake/modules
      ${CMAKE_SOURCE_DIR}/cmake/find-modules
      )

      if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
      set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
      set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release")
      endif()

      set(CMAKE_REQUIRED_QUIET ON)

      #######################################################

      Custom Build Configuration

      #######################################################

      include(CustomOptions)

      if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/custom)
      message(STATUS "Enabling custom build")
      set(QGC_CUSTOM_BUILD ON)
      list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/custom/cmake)
      include(CustomOverrides)
      endif()

      #######################################################

      Project Info

      #######################################################

      set(CMAKE_OSX_ARCHITECTURES "arm64")

      set(CMAKE_OSX_SYSROOT "iphoneos")

      if(APPLE)
      set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
      endif()

      include(Git)

      project(${QGC_APP_NAME}
      VERSION ${QGC_APP_VERSION}
      DESCRIPTION ${QGC_APP_DESCRIPTION}
      HOMEPAGE_URL "https://qgroundcontrol.com/"
      LANGUAGES C CXX
      )

      if(APPLE AND NOT IOS)
      set(MACOS TRUE)
      endif()

      #######################################################

      CMake Configuration Options

      #######################################################

      include(GNUInstallDirs)
      include(FetchContent)
      include(CMakePrintHelpers)

      set(CMAKE_CXX_STANDARD 20)
      set(CMAKE_CXX_STANDARD_REQUIRED ON)

      set(CMAKE_AUTOMOC ON)
      set(CMAKE_AUTOUIC ON)
      set(CMAKE_AUTORCC ON)

      set(CMAKE_INCLUDE_CURRENT_DIR ON)
      set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
      set(CMAKE_POSITION_INDEPENDENT_CODE ON)

      if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
      if(LINUX)
      set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/AppDir/usr")
      else()
      set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/staging")
      endif()
      endif()

      if(QGC_USE_CACHE)
      if(CMAKE_HOST_UNIX)
      find_program(CCACHE_PROGRAM ccache)
      if(CCACHE_PROGRAM)
      message(STATUS "Using CCache")
      set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      if(APPLE)
      set(CMAKE_OBJC_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      endif()
      endif()
      elseif(CMAKE_HOST_WIN32)
      find_program(SCCACHE_PROGRAM sccache)
      if(SCCACHE_PROGRAM)
      message(STATUS "Using SCCache")
      set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
      set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
      endif()
      endif()
      endif()

      if(MSVC)
      set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
      endif()

      if(CMAKE_CROSSCOMPILING AND ANDROID)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
      set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
      endif()

      set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>/lib)
      set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
      set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)

      https://cmake.org/cmake/help/latest/policy/CMP0168.html#policy:CMP0168

      if(POLICY CMP0168)
      cmake_policy(SET CMP0168 NEW)
      set(CMAKE_POLICY_DEFAULT_CMP0168 NEW)
      endif()

      https://cmake.org/cmake/help/latest/policy/CMP0075.html#policy:CMP0075

      if(POLICY CMP0075)
      cmake_policy(SET CMP0075 NEW)
      set(CMAKE_POLICY_DEFAULT_CMP0075 NEW)
      endif()

      if(QGC_USE_IWYU)
      include(IWYU)
      endif()

      #######################################################

      Qt6 Configuration

      #######################################################

      if(CMAKE_CROSSCOMPILING AND NOT IS_DIRECTORY ${QT_HOST_PATH})
      message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.")
      endif()

      find_program(QMAKE_EXECUTABLE NAMES qmake HINTS ${QT_ROOT_DIR} ${QTDIR} ENV QTDIR PATH_SUFFIXES bin)
      execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
      if(QT_VERSION LESS QT_MINIMUM_VERSION)
      MESSAGE(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}.
      Installed version: ${QT_VERSION}")
      endif()

      add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x060800)

      if(CMAKE_BUILD_TYPE STREQUAL "Release")
      add_compile_definitions(
      NDEBUG
      QT_NO_DEBUG
      QT_NO_DEBUG_OUTPUT
      )
      elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
      include(CTest)
      endif()

      if(ANDROID)
      list(APPEND QT_ANDROID_MULTI_ABI_FORWARD_VARS QGC_STABLE_BUILD QT_HOST_PATH)
      endif()

      find_package(Qt6
      ${QT_MINIMUM_VERSION}
      REQUIRED
      COMPONENTS
      Concurrent
      Core
      Core5Compat
      Location
      Multimedia
      Network
      OpenGL
      Positioning
      Qml
      QmlIntegration
      Quick
      QuickControls2
      QuickWidgets
      Sensors
      Sql
      Svg
      TextToSpeech
      Widgets
      Xml
      OPTIONAL_COMPONENTS
      Bluetooth
      Charts
      LinguistTools
      MultimediaQuickPrivate
      Quick3D
      Quick3DTools
      SerialPort
      Test
      HINTS
      ${QT_LIBRARY_HINTS}
      )

      if(LINUX)
      find_package(Qt6 ${QT_MINIMUM_VERSION} COMPONENTS WaylandClient)
      endif()

      Set extra standard project setup options for Qt 6.7.0 and above

      set(EXTRA_STANDARD_PROJECT_SETUP_OPTIONS)
      if(QT_VERSION VERSION_GREATER_EQUAL 6.8.2)
      list(APPEND EXTRA_STANDARD_PROJECT_SETUP_OPTIONS I18N_SOURCE_LANGUAGE en)
      endif()

      qt_standard_project_setup(
      REQUIRES ${QGC_QT_MINIMUM_VERSION}
      SUPPORTS_UP_TO ${QGC_QT_MAXIMUM_VERSION}
      ${EXTRA_STANDARD_PROJECT_SETUP_OPTIONS}
      )

      qt_policy(
      SET QTP0001 NEW
      SET QTP0002 NEW
      SET QTP0003 NEW
      SET QTP0004 NEW
      SET QTP0005 NEW
      )

      #######################################################

      QGroundControl Options

      #######################################################

      add_compile_definitions(
      $<$<NOT:$BOOL:${QGC_STABLE_BUILD}>:QGC_DAILY_BUILD>
      $<$BOOL:${QGC_BUILD_TESTING}:QGC_UNITTEST_BUILD>
      $<$BOOL:${QGC_DEBUG_QML}:QT_QML_DEBUG>
      $<$BOOL:${QGC_DISABLE_APM_MAVLINK}:QGC_NO_ARDUPILOT_DIALECT>
      $<$BOOL:${QGC_VIEWER3D}:QGC_VIEWER3D>
      )

      if(NOT QGC_BUILD_TESTING)
      set(BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
      endif()

      if("${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm64;x86_64" OR "${CMAKE_OSX_ARCHITECTURES}" MATCHES "x86_64;arm64")
      set(MACOS_UNIVERSAL_BUILD ON)
      endif()

      TODO: Force building dependencies if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL CMAKE_SYSTEM_PROCESSOR)?

      if(CMAKE_OSX_ARCHITECTURES AND NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" IN_LIST CMAKE_OSX_ARCHITECTURES)

      include(CPM)
      if(CMAKE_CROSSCOMPILING OR ANDROID OR MACOS_UNIVERSAL_BUILD)
      set(CPM_DOWNLOAD_ALL ON)
      endif()

      #######################################################

      Custom Build Configuration

      #######################################################

      if(QGC_CUSTOM_BUILD)
      add_subdirectory(custom)
      endif()

      #######################################################

      QGroundControl Resources

      #######################################################

      Note: Adding Resources to Library instead requires using Q_INIT_RESOURCE(qgcresources)

      if(NOT QGC_CUSTOM_BUILD)
      # Custom builds can override the resources
      list(APPEND QGC_RESOURCES
      ${CMAKE_SOURCE_DIR}/qgcimages.qrc
      ${CMAKE_SOURCE_DIR}/qgcresources.qrc
      ${CMAKE_SOURCE_DIR}/qgroundcontrol.qrc
      )
      endif()

      list(APPEND QGC_RESOURCES
      ${CMAKE_SOURCE_DIR}/resources/InstrumentValueIcons/InstrumentValueIcons.qrc
      ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/APM/APMResources.qrc
      ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/PX4/PX4Resources.qrc
      )

      if(QGC_UTM_ADAPTER)
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/utmsp.qrc)
      else()
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/dummy/utmsp_dummy.qrc)
      endif()

      if(QGC_BUILD_TESTING)
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/test/UnitTest.qrc)
      endif()

      #######################################################

      QGroundControl Target

      #######################################################

      qt_add_executable(${CMAKE_PROJECT_NAME}
      WIN32
      MACOSX_BUNDLE
      src/main.cc
      ${QGC_RESOURCES}
      )

      if(NOT ANDROID AND NOT IOS)
      target_sources(${CMAKE_PROJECT_NAME}
      PRIVATE
      src/RunGuard.cc
      src/RunGuard.h
      )
      endif()

      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)

      if(Qt6LinguistTools_FOUND)
      file(GLOB TS_SOURCES ${CMAKE_SOURCE_DIR}/translations/qgc_*.ts)
      set_source_files_properties(${TS_SOURCES} PROPERTIES OUTPUT_LOCATION "${CMAKE_BINARY_DIR}/i18n")
      qt_add_translations(${CMAKE_PROJECT_NAME}
      # TS_FILE_BASE ${CMAKE_PROJECT_NAME}
      # TS_FILE_DIR ${CMAKE_SOURCE_DIR}/translations/
      TS_FILES ${TS_SOURCES}
      RESOURCE_PREFIX "/"
      LUPDATE_OPTIONS -no-obsolete
      )
      endif()

      set_target_properties(${CMAKE_PROJECT_NAME}
      PROPERTIES
      QT_RESOURCE_PREFIX "/qgc"
      OUTPUT_NAME ${CMAKE_PROJECT_NAME}
      )

      if(WIN32)
      # windows installer files shared with core and custom
      set(DEPLOY_WIN_FILES
      "${CMAKE_SOURCE_DIR}/deploy/windows/driver.msi"
      "${CMAKE_SOURCE_DIR}/deploy/windows/nullsoft_installer.nsi"
      "${CMAKE_SOURCE_DIR}/deploy/windows/QGroundControl.rc"
      "${QGC_WINDOWS_INSTALL_HEADER_PATH}"
      "${QGC_WINDOWS_ICON_PATH}"
      )

      # Destination directory where files will be copied
      set(QGC_INSTALLER_SOURCE_WIN "${CMAKE_BINARY_DIR}/deploy/windows")
      file(MAKE_DIRECTORY ${QGC_INSTALLER_SOURCE_WIN})
      foreach(FILE ${DEPLOY_WIN_FILES})
          # filename without the path
          get_filename_component(FILE_NAME ${FILE} NAME)
          # re-copy the file if it changes
          add_custom_command(
              OUTPUT "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
              COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FILE}" "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
              DEPENDS "${FILE}"  # Depend on the source file so that it re-copies when it changes
          )
          list(APPEND QGC_INSTALLER_SOURCE_WIN_FILES "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}")
      endforeach()
      
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QGC_INSTALLER_SOURCE_WIN_FILES})
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              WIN32_EXECUTABLE TRUE
              QT_TARGET_RC_ICONS "${QGC_WINDOWS_ICON_PATH}"
      )
      add_compile_definitions(_USE_MATH_DEFINES)
      

      elseif(MACOS)
      set(MACOSX_BUNDLE_ICON_FILE "macx.icns")
      set(app_icon_macos "${QGC_MACOS_ICON_PATH}/macx.icns")
      set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${app_icon_macos})
      set_target_properties(${CMAKE_PROJECT_NAME}
      PROPERTIES
      MACOSX_BUNDLE TRUE
      MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/deploy/macos/MacOSXBundleInfo.plist.in"
      MACOSX_BUNDLE_BUNDLE_NAME "${CMAKE_PROJECT_NAME}"
      MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
      MACOSX_BUNDLE_COPYRIGHT "${QGC_APP_COPYRIGHT}"
      MACOSX_BUNDLE_GUI_IDENTIFIER "${QGC_BUNDLE_ID}"
      MACOSX_BUNDLE_ICON_FILE "macx.icns"
      MACOSX_BUNDLE_INFO_STRING "${QGC_APP_DESCRIPTION}"
      MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
      MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
      )
      elseif(IOS)
      enable_language(OBJC)

      set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
      set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") # iPhone,iPad
      set(CMAKE_XCODE_ATTRIBUTE_INFOPLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/deploy/ios/iOS-Info.plist")
      
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              QT_IOS_LAUNCH_SCREEN ${CMAKE_SOURCE_DIR}/deploy/ios/QGCLaunchScreen.xib
              XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.mavlink.qgroundcontrol"
              XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
              XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
              XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
              XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
              XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0"
              XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone,iPad
              XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${CMAKE_PROJECT_NAME}
              XCODE_ATTRIBUTE_INFOPLIST_KEY_LSApplicationCategoryType "public.app-category.mycategory"
              XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES"
      )
      
      # set(QT_NO_FFMPEG_XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON)
      qt_add_ios_ffmpeg_libraries(${CMAKE_PROJECT_NAME})
      

      elseif(ANDROID)
      include(CPM)
      CPMAddPackage(
      NAME android_openssl
      URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
      )
      include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
      add_android_openssl_libraries(${CMAKE_PROJECT_NAME})

      set(ANDROID_PLATFORM_ARCHITECTURE_CODE)
      if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "032")
      elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "064")
      elseif(${ANDROID_ABI} STREQUAL "x86")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "132")
      elseif(${ANDROID_ABI} STREQUAL "x86_64")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "164")
      endif()
      set(ANDROID_VERSION_CODE "${ANDROID_PLATFORM_ARCHITECTURE_CODE}${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}")
      
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              # QT_ANDROID_ABIS ${ANDROID_ABI}
              QT_ANDROID_MIN_SDK_VERSION ${QGC_QT_ANDROID_MIN_SDK_VERSION}
              QT_ANDROID_TARGET_SDK_VERSION ${QGC_QT_ANDROID_TARGET_SDK_VERSION}
              QT_ANDROID_PACKAGE_NAME "${QGC_ANDROID_PACKAGE_NAME}"
              QT_ANDROID_PACKAGE_SOURCE_DIR "${QGC_ANDROID_PACKAGE_SOURCE_DIR}"
              QT_ANDROID_VERSION_NAME ${CMAKE_PROJECT_VERSION}
              QT_ANDROID_VERSION_CODE ${ANDROID_VERSION_CODE}
              QT_QML_ROOT_PATH ${CMAKE_SOURCE_DIR}
              # QT_ANDROID_SDK_BUILD_TOOLS_REVISION
              # QT_ANDROID_SYSTEM_LIBS_PREFIX
      )
      

      endif()

      add_compile_definitions(
      QGC_APP_NAME="${QGC_APP_NAME}"
      QGC_ORG_NAME="${QGC_ORG_NAME}"
      QGC_ORG_DOMAIN="${QGC_ORG_DOMAIN}"
      QGC_APP_VERSION_STR="${QGC_APP_VERSION_STR}"
      QGC_SETTINGS_VERSION=${QGC_SETTINGS_VERSION}
      )

      add_subdirectory(src)

      target_link_libraries(${CMAKE_PROJECT_NAME}
      PRIVATE
      Qt6::Core
      Qt6::Core5Compat
      Qt6::Quick
      Qt6::Svg
      Qt6::Widgets
      QGC
      QmlControls

      )

      target_link_libraries(QGroundControl
      PUBLIC
      -ljpeg
      -lpng
      )

      if(ANDROID)
      # Find JPEG library in NDK sysroot, Qt paths, or project paths
      find_library(JPEG_LIBRARY jpeg
      PATHS
      ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI} # NDK sysroot for the ABI
      ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib # Alternative NDK path
      ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI} # Project-specific libraries
      ${QT_LIBRARY_DIR} # Qt library directory (if applicable)
      NO_DEFAULT_PATH # Restrict to these paths only
      )

      # Find PNG library (you’ll need to do the same for PNG if it’s missing)
      find_library(PNG_LIBRARY png
          PATHS
              ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI}
              ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib
              ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}
              ${QT_LIBRARY_DIR}
          NO_DEFAULT_PATH
      )
      
      # Check if libraries are found
      if(NOT JPEG_LIBRARY)
          message(WARNING "JPEG library not found. Ensure libjpeg is available for ${ANDROID_ABI}. Attempting to proceed without it.")
          # Optionally, you can specify a fallback path or disable linking if not critical
          # set(JPEG_LIBRARY "")  # Comment out or handle gracefully
      endif()
      if(NOT PNG_LIBRARY)
          message(WARNING "PNG library not found. Ensure libpng is available for ${ANDROID_ABI}. Attempting to proceed without it.")
          # set(PNG_LIBRARY "")  # Comment out or handle gracefully
      endif()
      
      # Link the libraries (only if found)
      if(JPEG_LIBRARY)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${JPEG_LIBRARY})
      endif()
      if(PNG_LIBRARY)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${PNG_LIBRARY})
      endif()
      
      # Continue with other Android-specific configurations
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)
      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
      
      target_link_libraries(${CMAKE_PROJECT_NAME}
          PRIVATE
              Qt6::Core
              Joystick
              Utilities
      )
      
      if(NOT QGC_NO_SERIAL_LINK)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
      endif()
      

      endif()
      #target_link_libraries(QGroundControl PRIVATE C:/libpng/build/libpng.a)

      if(QGC_BUILD_TESTING)
      add_subdirectory(test)
      target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qgctest)
      endif()

      if(ANDROID)
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)

      target_link_libraries(${CMAKE_PROJECT_NAME}
          PRIVATE
              Qt6::Core
              Joystick
              Utilities
      )
      
      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
      
      if(NOT QGC_NO_SERIAL_LINK)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
      endif()
      

      endif()

      qt_import_plugins(${CMAKE_PROJECT_NAME}
      INCLUDE Qt6::QSvgPlugin
      EXCLUDE_BY_TYPE geoservices
      INCLUDE_BY_TYPE sqldrivers Qt6::QSQLiteDriverPlugin
      )

      include(Install)

      include(PrintSummary)

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 25 Feb 2025, 07:11 last edited by
      #6

      @InsideFPV said in QGCS error for Android:

      target_link_libraries(QGroundControl
      PUBLIC
      -ljpeg
      -lpng
      )

      Yes, you're linking libpng.
      Was libpng found when running cmake?
      Where is libpng for Android located?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      I 1 Reply Last reply 25 Feb 2025, 07:20
      0
      • J jsulm
        25 Feb 2025, 07:11

        @InsideFPV said in QGCS error for Android:

        target_link_libraries(QGroundControl
        PUBLIC
        -ljpeg
        -lpng
        )

        Yes, you're linking libpng.
        Was libpng found when running cmake?
        Where is libpng for Android located?

        I Offline
        I Offline
        InsideFPV
        wrote on 25 Feb 2025, 07:20 last edited by
        #7

        @jsulm i am adding only this code porting inside my cmake file.
        target_link_libraries(QGroundControl
        PUBLIC
        -ljpeg
        -lpng
        )

        I am getting gstreamer error and i ask chatgpt and it provide me this solution.
        As form your questing i understand i have to add libpng in my project but i didnt added that till now.(Am i right...?)
        please guide me how can i resolve it...?

        J 1 Reply Last reply 25 Feb 2025, 07:22
        0
        • I InsideFPV
          25 Feb 2025, 07:20

          @jsulm i am adding only this code porting inside my cmake file.
          target_link_libraries(QGroundControl
          PUBLIC
          -ljpeg
          -lpng
          )

          I am getting gstreamer error and i ask chatgpt and it provide me this solution.
          As form your questing i understand i have to add libpng in my project but i didnt added that till now.(Am i right...?)
          please guide me how can i resolve it...?

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 25 Feb 2025, 07:22 last edited by
          #8

          @InsideFPV said in QGCS error for Android:

          i have to add libpng in my project but i didnt added that till now

          You DID add it already! Just look at your CMakeLists.txt file.
          I repeat the questions you did not answer:
          Was libpng found when running cmake?
          Where is libpng for Android located?

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          I 1 Reply Last reply 25 Feb 2025, 09:49
          0
          • J jsulm
            25 Feb 2025, 07:22

            @InsideFPV said in QGCS error for Android:

            i have to add libpng in my project but i didnt added that till now

            You DID add it already! Just look at your CMakeLists.txt file.
            I repeat the questions you did not answer:
            Was libpng found when running cmake?
            Where is libpng for Android located?

            I Offline
            I Offline
            InsideFPV
            wrote on 25 Feb 2025, 09:49 last edited by InsideFPV
            #9

            @jsulm No libpng was not found while running cmake.
            and it is not presend in this location:
            "C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android"

            where will i get libpng ?

            J 1 Reply Last reply 25 Feb 2025, 10:29
            0
            • I InsideFPV
              25 Feb 2025, 09:49

              @jsulm No libpng was not found while running cmake.
              and it is not presend in this location:
              "C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android"

              where will i get libpng ?

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 25 Feb 2025, 10:29 last edited by
              #10

              @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              I 2 Replies Last reply 25 Feb 2025, 11:01
              0
              • J jsulm
                25 Feb 2025, 10:29

                @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

                I Offline
                I Offline
                InsideFPV
                wrote on 25 Feb 2025, 11:01 last edited by
                #11

                @jsulm As i am using master clone.
                As this is my first time doing I am struggling with steps. Can you guide me how to build it..?

                1 Reply Last reply
                0
                • J jsulm
                  25 Feb 2025, 10:29

                  @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

                  I Offline
                  I Offline
                  InsideFPV
                  wrote on 27 Feb 2025, 07:11 last edited by
                  #12

                  @jsulm hello sir please guide me how to build lpng file ?

                  J 1 Reply Last reply 27 Feb 2025, 07:42
                  0
                  • I InsideFPV
                    27 Feb 2025, 07:11

                    @jsulm hello sir please guide me how to build lpng file ?

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 27 Feb 2025, 07:42 last edited by
                    #13

                    @InsideFPV Take a look at https://github.com/julienr/libpng-android
                    Official description how to build: https://github.com/pnggroup/libpng/blob/libpng16/INSTALL

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    I 1 Reply Last reply 27 Feb 2025, 08:44
                    0
                    • J jsulm
                      27 Feb 2025, 07:42

                      @InsideFPV Take a look at https://github.com/julienr/libpng-android
                      Official description how to build: https://github.com/pnggroup/libpng/blob/libpng16/INSTALL

                      I Offline
                      I Offline
                      InsideFPV
                      wrote on 27 Feb 2025, 08:44 last edited by
                      #14

                      @jsulm sir i am adding libpng.so and libpng.a on my ndk path that is below
                      C:\Users\Software\AppData\Local\Android\Sdk\ndk\26.1.10909125\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\lib\aarch64-linux-android

                      but still getting error
                      Capture21.PNG Capture22.PNG Capture23.PNG

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 27 Feb 2025, 09:12 last edited by
                        #15

                        You're missing libjpeg library now. Install it.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        I 1 Reply Last reply 27 Feb 2025, 10:06
                        0
                        • J jsulm
                          27 Feb 2025, 09:12

                          You're missing libjpeg library now. Install it.

                          I Offline
                          I Offline
                          InsideFPV
                          wrote on 27 Feb 2025, 10:06 last edited by
                          #16

                          @jsulm where to find or build this library ?

                          J 1 Reply Last reply 27 Feb 2025, 12:01
                          0
                          • I InsideFPV
                            27 Feb 2025, 10:06

                            @jsulm where to find or build this library ?

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 27 Feb 2025, 12:01 last edited by
                            #17

                            @InsideFPV https://www.ijg.org/files/

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            I 2 Replies Last reply 27 Feb 2025, 12:28
                            0
                            • J jsulm
                              27 Feb 2025, 12:01

                              @InsideFPV https://www.ijg.org/files/

                              I Offline
                              I Offline
                              InsideFPV
                              wrote on 27 Feb 2025, 12:28 last edited by
                              #18

                              @jsulm yes sir I am build this library but getting another error ..

                              Capture24.PNG Capture25.PNG

                              1 Reply Last reply
                              0
                              • J jsulm
                                27 Feb 2025, 12:01

                                @InsideFPV https://www.ijg.org/files/

                                I Offline
                                I Offline
                                InsideFPV
                                wrote on 28 Feb 2025, 06:04 last edited by
                                #19

                                @jsulm hello sir
                                please guide me for above error

                                J 1 Reply Last reply 28 Feb 2025, 06:12
                                0
                                • I InsideFPV
                                  28 Feb 2025, 06:04

                                  @jsulm hello sir
                                  please guide me for above error

                                  J Offline
                                  J Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on 28 Feb 2025, 06:12 last edited by
                                  #20

                                  @InsideFPV Maybe you should ask QGCS project? It is not part of Qt...

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  I 1 Reply Last reply 28 Feb 2025, 06:30
                                  0
                                  • J jsulm
                                    28 Feb 2025, 06:12

                                    @InsideFPV Maybe you should ask QGCS project? It is not part of Qt...

                                    I Offline
                                    I Offline
                                    InsideFPV
                                    wrote on 28 Feb 2025, 06:30 last edited by
                                    #21

                                    @jsulm yes sir I am asking about QGCS project
                                    please help me for this

                                    1 Reply Last reply
                                    0

                                    14/21

                                    27 Feb 2025, 08:44

                                    • Login

                                    • Login or register to search.
                                    14 out of 21
                                    • First post
                                      14/21
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt Extensions
                                    • Unsolved