C

Qt Quick Ultralite fileloading Example

cmake_minimum_required (VERSION 3.21.1)

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

qul_add_target(fileloading QML_PROJECT mcu_fileloading.qmlproject os/${QUL_OS_LOWERCASE}/main.cpp)

if(CMAKE_CROSSCOMPILING)
    if(QUL_PLATFORM MATCHES "^stm32f469i" OR QUL_PLATFORM MATCHES "^stm32f769i")
        target_sources(fileloading PRIVATE
            3rdparty/FatFs/src/diskio.c
            3rdparty/FatFs/src/ff.c
            3rdparty/FatFs/src/ff_gen_drv.c
            3rdparty/FatFs/src/option/unicode.c
            3rdparty/FatFs/src/sd_diskio.c
            stm/board_config.cpp)

        if (QUL_PLATFORM MATCHES "^stm32f469i")
            target_sources(fileloading PRIVATE
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c
                ${QUL_BOARD_SDK_DIR}/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c
                ${QUL_BOARD_SDK_DIR}/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.c)

        else()
            target_sources(fileloading PRIVATE
                ${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)
        endif()

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

        target_include_directories(fileloading PRIVATE 3rdparty/FatFs/src)
        target_compile_definitions(fileloading PRIVATE FF_FS_READONLY)

        target_link_libraries(fileloading PRIVATE Qul::PlatformBSPConfig)
    elseif(QUL_PLATFORM MATCHES "^mimxrt")
        set(NXP_BOARD_CORE_DIR "")
        if (QUL_PLATFORM MATCHES "^mimxrt1050")
            set(NXP_BOARD_DRIVER_DIR MIMXRT1052)
        elseif (QUL_PLATFORM MATCHES "^mimxrt1060")
            set(NXP_BOARD_DRIVER_DIR MIMXRT1062)
        elseif (QUL_PLATFORM MATCHES "^mimxrt1064")
            set(NXP_BOARD_DRIVER_DIR MIMXRT1064)
        elseif (QUL_PLATFORM MATCHES "^mimxrt1170")
            set(NXP_BOARD_DRIVER_DIR MIMXRT1176)
            set(NXP_BOARD_CORE_DIR cm7)
        else()
            message(FATAL_ERROR "Unsupported NXP board")
        endif()

        if (QUL_OS MATCHES "FreeRTOS")
            if (QUL_PLATFORM MATCHES "^mimxrt10")
                # mimxrt1050-evk and mimxrt1064-evk
                qul_override_freertos_heap_size(fileloading "472 * 1024")
            endif()
        endif()

        target_sources(fileloading PRIVATE
            3rdparty/FatFs/src/diskio.c
            3rdparty/FatFs/src/ff.c
            3rdparty/FatFs/src/ff_gen_drv.c
            3rdparty/FatFs/src/option/unicode.c
            3rdparty/NXP/${NXP_BOARD_DRIVER_DIR}/sdmmc_config.c
            # We have to use a modified version of fsl_adapter_gpio.c to comment out the
            # GPIO1_Combined_0_15_IRQHandler() handler, which otherwise conflicts with the one in platform_irq.c
            3rdparty/NXP/fsl_adapter_igpio.c
            ${QUL_BOARD_SDK_DIR}/devices/${NXP_BOARD_DRIVER_DIR}/drivers/fsl_usdhc.c
            ${QUL_BOARD_SDK_DIR}/devices/${NXP_BOARD_DRIVER_DIR}/drivers/${NXP_BOARD_CORE_DIR}/fsl_cache.c
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/common/fsl_sdmmc_common.c
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/host/usdhc/non_blocking/fsl_sdmmc_host.c
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/osa/fsl_sdmmc_osa.c
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/sd/fsl_sd.c
            nxp/board_config.cpp)

        if (QUL_OS STREQUAL "FreeRTOS")
            target_sources(fileloading PRIVATE ${QUL_BOARD_SDK_DIR}/components/osa/fsl_os_abstraction_free_rtos.c)
        else()
            target_sources(fileloading PRIVATE ${QUL_BOARD_SDK_DIR}/components/osa/fsl_os_abstraction_bm.c)
        endif()

        if(NOT IAR)
            # Required for SDK code to build
            target_compile_options(fileloading PRIVATE
                -Wno-unused-parameter
                -Wno-unused-variable
                )
        endif()

        target_include_directories(fileloading PRIVATE
            3rdparty/FatFs/src
            3rdparty/NXP/${NXP_BOARD_DRIVER_DIR}
            ${QUL_BOARD_SDK_DIR}/components/gpio
            ${QUL_BOARD_SDK_DIR}/components/lists
            ${QUL_BOARD_SDK_DIR}/components/osa
            ${QUL_BOARD_SDK_DIR}/devices/${NXP_BOARD_DRIVER_DIR}/drivers/${NXP_BOARD_CORE_DIR}
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/common
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/host/usdhc/
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/osa
            ${QUL_BOARD_SDK_DIR}/middleware/sdmmc/sd)

        target_compile_definitions(fileloading PRIVATE FF_FS_READONLY SD_ENABLED)

        target_link_libraries(fileloading PRIVATE Qul::PlatformBSPConfig)
    else()
        message(FATAL_ERROR "Unsupported platform")
    endif()
endif()

app_target_setup_os(fileloading)

if (QUL_PLATFORM STREQUAL "qt")
    target_sources(fileloading PRIVATE desktop/board_config.cpp)
    target_sources(fileloading PRIVATE desktop/posixfilesystem.cpp)
    target_compile_features(fileloading PRIVATE cxx_std_17)

    target_include_directories(fileloading PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

    # On desktop we are not using a SD-Card and the files need to be available
    # next to the built binary.
    add_custom_command(
            TARGET fileloading POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_directory
                    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/fileloading.dir/resources/logos
                    $<TARGET_FILE_DIR:${PROJECT_NAME}>/logos)
endif()