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
Servers for Qt installer are currently down

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.
  • 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
                                      • 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

                                        12/21

                                        27 Feb 2025, 07:11

                                        • Login

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