C

Qt Quick Ultralite multitask Example

# Copyright (C) 2025 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial
cmake_minimum_required (VERSION 3.21.1)

project(multitask VERSION 0.0.1 LANGUAGES C CXX ASM)

find_package(QulApp)

add_subdirectory(freertos)

if(TARGET freertos_kernel) # FreeRTOS support implemented for this platform
    add_subdirectory(board_utils)
    set(MULTITASK_TARGET multitask)
elseif(NOT CMAKE_CROSSCOMPILING) # No FreeRTOS here - fallback for building on desktop platform
    set(MULTITASK_TARGET multitask_desktop)
else()
    message(STATUS "Skipping generating target: multitask")
    return()
endif()

qul_add_executable(${MULTITASK_TARGET})

set_source_files_properties(images/fan-off.png PROPERTIES
    QUL_RESOURCE_OPTIMIZE_FOR_ROTATION TRUE)

qul_add_qml_module(${MULTITASK_TARGET}
    URI MultitaskApp
    QML_FILES multitask.qml
    SOURCES src/hardwarecontrol.h
    RESOURCES
        images/background-dark.png
        images/fan-off.png
)

target_include_directories(${MULTITASK_TARGET} PRIVATE src)

if(TARGET freertos_kernel)
    target_sources(multitask PRIVATE
        src/freertos/main.cpp
        src/freertos/hardwarecontrol.cpp
        src/freertos/threads/led_thread.cpp
        src/freertos/threads/qul_thread.cpp
        src/freertos/threads/fan_thread.cpp
    )
    target_compile_definitions(multitask PRIVATE FREERTOS)
    target_include_directories(multitask PRIVATE src/freertos/threads)
    target_link_libraries(multitask PRIVATE freertos_kernel board_utils)
else()
    target_sources(multitask_desktop PRIVATE src/desktop/hardwarecontrol.cpp)
    target_compile_definitions(multitask_desktop PRIVATE DESKTOP)

    app_target_setup_os(multitask_desktop)
    app_target_default_entrypoint(multitask_desktop multitask MODULE MultitaskApp)
endif()