C

Qt Quick Ultralite freertos_app_switch Example

cmake_minimum_required (VERSION 3.15)

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

if(QUL_PLATFORM STREQUAL "qt" OR QUL_PLATFORM STREQUAL "example-baremetal")
    message(STATUS "Skipping freertos_app_switch.")
elseif(NOT QUL_OS STREQUAL "FreeRTOS")
    message(STATUS "Operating system is not FreeRTOS. Skipping freertos_app_switch.")
else()
    add_library(app_switch_freertos_kernel STATIC)
    target_link_libraries(app_switch_freertos_kernel
        PRIVATE
            Qul::PlatformArchitecture
            Qul::PlatformBSPConfig
    )

    # Enforce symbols to be put in the binary, otherwise LTO will strip them
    if(NOT IAR)
        target_link_libraries(app_switch_freertos_kernel PRIVATE -Wl,-u,vTaskSwitchContext)
    endif()

    target_include_directories(app_switch_freertos_kernel PUBLIC ${TARGET_PLATFORM_DIR})

    target_compile_definitions(app_switch_freertos_kernel PRIVATE USE_FreeRTOS_HEAP_4)

    # Add common sources
    target_sources(app_switch_freertos_kernel PRIVATE
        ${FREERTOS_DIR}/portable/MemMang/heap_4.c
    )
endif()

if(TARGET app_switch_freertos_kernel) # FreeRTOS support implemented for this platform
    qul_add_target(freertos_app_switch
        src/main.cpp
        src/devcontrol.cpp
    )

    include(src/${QUL_PLATFORM}/board.cmake)

    qul_target_generate_interfaces(freertos_app_switch
        ${CMAKE_CURRENT_SOURCE_DIR}/src/devcontrol.h
    )

    qul_target_qml_sources(freertos_app_switch appswitch.qml)
    target_link_libraries(freertos_app_switch
        PRIVATE
            Qul::Controls
            Qul::PlatformBSPConfig
            app_switch_freertos_kernel
    )
endif()