C

Qt Quick Ultralite imagedecoder Example

cmake_minimum_required (VERSION 3.21.1)

if (QUL_PLATFORM MATCHES "autosar")
    return()
endif()

project(imagedecoder VERSION 0.0.1 LANGUAGES C CXX ASM)
if (NOT TARGET Qul::Core)
    find_package(Qul)
endif()

if(CMAKE_CROSSCOMPILING)
    if(QUL_PLATFORM MATCHES "^stm32")
        # Custom JPG encoder supported
        if(QUL_PLATFORM MATCHES "^stm32f7")
            set(STM32XX "stm32f7")

            qul_add_target(imagedecoder
                QML_PROJECT mcu_imagedecoder.qmlproject
                os/${QUL_OS_LOWERCASE}/main.cpp
                SELECTORS filesystemSupport
            )

            target_sources(imagedecoder PRIVATE
                ../fileloading/3rdparty/FatFs/src/diskio.c
                ../fileloading/3rdparty/FatFs/src/ff.c
                ../fileloading/3rdparty/FatFs/src/ff_gen_drv.c
                ../fileloading/3rdparty/FatFs/src/option/unicode.c
                ../fileloading/3rdparty/FatFs/src/sd_diskio.c
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.c
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.c
                ${QUL_BOARD_SDK_DIR}/Drivers/BSP/STM32F769I-Discovery/stm32f769i_discovery_sd.c
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_jpeg.c
                ${CMAKE_CURRENT_SOURCE_DIR}/stm/${STM32XX}/stm32f7xx_hal_msp.c
            )

            target_include_directories(imagedecoder PRIVATE
                ../fileloading/
                ../fileloading/3rdparty/FatFs/src/
            )

            target_compile_definitions(imagedecoder PRIVATE
                SUPPORT_FILESYSTEM
                FF_FS_READONLY
            )
        elseif(QUL_PLATFORM MATCHES "^stm32h7")
            set(STM32XX "stm32h7")

            qul_add_target(imagedecoder
                QML_PROJECT mcu_imagedecoder_stm32h750b.qmlproject
                os/${QUL_OS_LOWERCASE}/main.cpp
                SELECTORS noFilesystemSupport
            )

            target_sources(imagedecoder PRIVATE
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_jpeg.c
                ${CMAKE_CURRENT_SOURCE_DIR}/stm/${STM32XX}/stm32h7xx_hal_msp.c
            )
        endif()

        target_sources(imagedecoder PRIVATE
            ${CMAKE_CURRENT_SOURCE_DIR}/stm/${STM32XX}/board_config.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/stm/${STM32XX}/buffer_config.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/stm/stmimagedecoder.cpp
            common/jpeg.cpp
            3rdparty/stm/Utilities/JPEG/jpeg_utils.c
        )

        target_include_directories(imagedecoder PRIVATE
            ${QUL_BOARD_SDK_DIR}/Utilities/JPEG
            ${CMAKE_CURRENT_SOURCE_DIR}/stm/${STM32XX}
            ${CMAKE_CURRENT_SOURCE_DIR}/stm
        )

        target_compile_definitions(imagedecoder PRIVATE
            USE_JPEG_DECODER=1
            PLATFORM_OS=${QUL_OS_LOWERCASE}
            USE_DMA_BASED_JPEG_DECODING
        )

        target_link_libraries(imagedecoder PRIVATE Qul::PlatformBSPConfig)

        if(NOT IAR)
            # Required for SDK code to build
            target_compile_options(imagedecoder PRIVATE
                -Wno-unused-parameter
            )
        endif()
    else()
        return()
    endif()
endif()

app_target_setup_os(imagedecoder)

if (QUL_PLATFORM STREQUAL "qt")
    find_package(Qt6 6.2 COMPONENTS Gui REQUIRED)

    qul_add_target(imagedecoder
        QML_PROJECT mcu_imagedecoder.qmlproject
        os/${QUL_OS_LOWERCASE}/main.cpp
        SELECTORS filesystemSupport
    )

    target_link_libraries(imagedecoder PRIVATE Qt6::Gui)
    target_sources(imagedecoder PRIVATE
                          desktop/desktopimagedecoder.cpp
                          desktop/board_config.cpp
                          ../fileloading/desktop/posixfilesystem.cpp
                  )
    target_compile_features(imagedecoder PRIVATE cxx_std_17)
    target_include_directories(imagedecoder PRIVATE ../fileloading/desktop/)
    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        target_compile_options(imagedecoder PRIVATE -Wno-maybe-uninitialized) # desktopimagedecoder.cpp:129ff read into a byte array.
    endif()

    add_custom_command(TARGET imagedecoder POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E
      copy_if_different "${CMAKE_CURRENT_LIST_DIR}/basse-terre-guadeloupe.jpg" "${CMAKE_CURRENT_LIST_DIR}/yosemite-national-park.jpg" "$<TARGET_FILE_DIR:imagedecoder>")
endif()