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.7k 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.
  • I Offline
    I Offline
    InsideFPV
    wrote on 24 Feb 2025, 05:20 last edited by
    #1

    FAILED: Release/libQGroundControl_arm64-v8a.so
    C:\Windows\system32\cmd.exe /C "cd . && C:\Users\Software\AppData\Local\Android\Sdk\ndk\26.1.10909125\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android23 --sysroot=C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fexceptions -frtti -stdlib=libc++ -O3 -DNDEBUG -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--gc-sections -Qunused-arguments -Wl,--no-undefined -Wl,-Bsymbolic -shared -o Release\libQGroundControl_arm64-v8a.so @CMakeFiles\QGroundControl.rsp && cd ."
    ld.lld: error: unable to find library -lpng
    clang++: error: linker command failed with exit code 1 (use -v to see invocation)
    ninja: build stopped: subcommand failed.
    10:44:07: The process "C:\Program Files\CMake\bin\cmake.exe" exited with code 1.
    10:44:07: Error while building/deploying project QGroundControl (kit: Android Qt 6.8.2 Clang arm64-v8a)
    10:44:07: When executing step "Build"
    10:44:07: Elapsed time: 08:59.
    Capture7.PNG Capture8.PNG Capture12.PNG

    I have the error when I am build the project for android please if any have solutions please ping me.

    J 1 Reply Last reply 24 Feb 2025, 06:05
    0
    • I InsideFPV
      24 Feb 2025, 05:20

      FAILED: Release/libQGroundControl_arm64-v8a.so
      C:\Windows\system32\cmd.exe /C "cd . && C:\Users\Software\AppData\Local\Android\Sdk\ndk\26.1.10909125\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android23 --sysroot=C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fexceptions -frtti -stdlib=libc++ -O3 -DNDEBUG -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--gc-sections -Qunused-arguments -Wl,--no-undefined -Wl,-Bsymbolic -shared -o Release\libQGroundControl_arm64-v8a.so @CMakeFiles\QGroundControl.rsp && cd ."
      ld.lld: error: unable to find library -lpng
      clang++: error: linker command failed with exit code 1 (use -v to see invocation)
      ninja: build stopped: subcommand failed.
      10:44:07: The process "C:\Program Files\CMake\bin\cmake.exe" exited with code 1.
      10:44:07: Error while building/deploying project QGroundControl (kit: Android Qt 6.8.2 Clang arm64-v8a)
      10:44:07: When executing step "Build"
      10:44:07: Elapsed time: 08:59.
      Capture7.PNG Capture8.PNG Capture12.PNG

      I have the error when I am build the project for android please if any have solutions please ping me.

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 24 Feb 2025, 06:05 last edited by
      #2

      @InsideFPV said in QGCS error for Android:

      ld.lld: error: unable to find library -lpng

      Linker cannot find libpng library.
      Do you link to libpng explicitly (in your CMakeLists.txt file)?

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

      I 1 Reply Last reply 24 Feb 2025, 12:39
      0
      • J jsulm
        24 Feb 2025, 06:05

        @InsideFPV said in QGCS error for Android:

        ld.lld: error: unable to find library -lpng

        Linker cannot find libpng library.
        Do you link to libpng explicitly (in your CMakeLists.txt file)?

        I Offline
        I Offline
        InsideFPV
        wrote on 24 Feb 2025, 12:39 last edited by
        #3

        @jsulm do we have to externally add and from where i can download this library , i am adding chatgpt solution but it will not resolve please give me solution if you have any idea for this like how to link..?

        J 1 Reply Last reply 24 Feb 2025, 13:55
        0
        • I InsideFPV
          24 Feb 2025, 12:39

          @jsulm do we have to externally add and from where i can download this library , i am adding chatgpt solution but it will not resolve please give me solution if you have any idea for this like how to link..?

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 24 Feb 2025, 13:55 last edited by
          #4

          @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)?

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

          I 1 Reply Last reply 25 Feb 2025, 04:49
          0
          • 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

                                          1/21

                                          24 Feb 2025, 05:20

                                          • Login

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