C

Qt Quick Ultralite Thermostat Demo

cmake_minimum_required (VERSION 3.21.1)

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

if(QUL_PLATFORM MATCHES "^ek-ra6m3g")
    string(TOUPPER ${CMAKE_BUILD_TYPE} build_type)
    if(build_type STREQUAL "RELEASE" OR build_type STREQUAL "DEBUG")
        message(WARNING "For Release or Debug builds, thermo demo binary may not fit in internal flash of EK-RA6M3G board. Sections QulResourceDataExtFlash and QulFontResourceDataExtFlash can be used to move image or font data into the external flash memory.")
    endif()

    qul_add_target(thermo_small
        src/os/${QUL_OS_LOWERCASE}/main.cpp
        QML_PROJECT
        qmlproject/thermo_ek-ra6m3g.qmlproject
        SELECTORS small
    )
elseif(QUL_PLATFORM MATCHES "^stm32")
    if (NOT QUL_PLATFORM MATCHES "^stm32f7" AND NOT QUL_PLATFORM MATCHES "^stm32f4")
        qul_add_target(thermo_small
             src/os/${QUL_OS_LOWERCASE}/main.cpp
             QML_PROJECT
             qmlproject/thermo_stm32.qmlproject
             SELECTORS small
        )
    endif()
elseif (QUL_PLATFORM STREQUAL "mimxrt1064-evk-baremetal" OR QUL_PLATFORM STREQUAL "mimxrt1064-evk-freertos")
    qul_add_target(thermo_small
        src/os/${QUL_OS_LOWERCASE}/main.cpp
        QML_PROJECT
        qmlproject/thermo_mimxrt1064.qmlproject
        SELECTORS small
    )
else()
    qul_add_target(thermo_small
        src/os/${QUL_OS_LOWERCASE}/main.cpp
        QML_PROJECT
        qmlproject/thermo.qmlproject
        SELECTORS small
        )
endif()

if(QUL_PLATFORM STREQUAL "ek-ra6m3g-freertos")
    # default FreeRTOS heap size 220k
    math(EXPR heap_size "250 * 1024")
    add_compile_definitions(configTOTAL_HEAP_SIZE=${heap_size})
endif()

if (QUL_PLATFORM STREQUAL "mimxrt1050-evk-freertos" OR QUL_PLATFORM STREQUAL "mimxrt1064-evk-freertos")
    # default FreeRTOS heap size 256k
    math(EXPR heap_size "2304 * 1024")
    add_compile_definitions(configTOTAL_HEAP_SIZE=${heap_size})
endif()

if(QUL_PLATFORM MATCHES "^stm32h7")
    math(EXPR text_cache_size "32 * 1024")
    target_compile_definitions(thermo_small PRIVATE APP_TEXT_CACHE_SIZE=${text_cache_size})
endif()

if(TARGET thermo_small)
    app_target_setup_os(thermo_small)
endif()

# FIXME: the if below should be changed to
# if (NOT "thermo_big" IN_LIST QUL_PLATFORM_EXCLUDED_DEMOS)
# Assets currently too big for devices (except stm32s)
if(QUL_PLATFORM STREQUAL "qt" OR QUL_PLATFORM MATCHES "^stm32f7" OR QUL_PLATFORM MATCHES "^stm32f4")
    if(QUL_PLATFORM STREQUAL "qt")
        qul_add_target(thermo_big
            src/os/${QUL_OS_LOWERCASE}/main.cpp
            QML_PROJECT
            qmlproject/thermo.qmlproject
            SELECTORS big)
    elseif(QUL_PLATFORM MATCHES "^stm32f7" OR QUL_PLATFORM MATCHES "^stm32f4")
        qul_add_target(thermo_big
            src/os/${QUL_OS_LOWERCASE}/main.cpp
            QML_PROJECT
            qmlproject/thermo_stm32.qmlproject
            SELECTORS big)
    endif()

    if(QUL_PLATFORM MATCHES "^stm32f4")
        math(EXPR text_cache_size "48 * 1024")
        target_compile_definitions(thermo_big PRIVATE APP_TEXT_CACHE_SIZE=${text_cache_size})
    endif()

    if(QUL_PLATFORM MATCHES "^stm32f7")
        math(EXPR text_cache_size "64 * 1024")
        target_compile_definitions(thermo_big PRIVATE APP_TEXT_CACHE_SIZE=${text_cache_size})
        if (QUL_OS STREQUAL "FreeRTOS")
            # 200 kB is the default heap size for STM32F769i, but we need to add
            # space for the text cache as well and the dynamic QML loader
            math(EXPR heap_size "210 * 1024 + ${text_cache_size}")
            add_compile_definitions(configTOTAL_HEAP_SIZE=${heap_size})
        endif()
    endif()

    app_target_setup_os(thermo_big)
endif()