C

Qt Quick Ultralite static_library Example

cmake_minimum_required (VERSION 3.21.1)

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

if(QUL_OS STREQUAL "FreeRTOS")
    message(STATUS "Static library example is disabled for FreeRTOS based platforms")
    return()
endif()

set(EXAMPLE_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})

# Add configuration of Qt4MCU_GUI target for prebuild step
add_subdirectory(lib/Qt_for_MCU)

add_executable(static_library_example
        src/main.cpp
)

qul_generate_flash_target(static_library_example)

# If QUL GUI library has IPO enabled then we need also enable it for our target
get_target_property(QUL_LIB_IPO_CONFIG Qt4MCU_GUI INTERPROCEDURAL_OPTIMIZATION)
set_target_properties(static_library_example PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${QUL_LIB_IPO_CONFIG})

target_include_directories(static_library_example
    PRIVATE
        # Add include folder from QtForMCU installation folder
        ${Qul_DIR}/include
        # Add folder containing qul_run.h header file
        ${CMAKE_CURRENT_BINARY_DIR}/lib/Qt_for_MCU
        # Add folder containing sensorAPI.h header file
        ${CMAKE_CURRENT_SOURCE_DIR}/include
)

target_link_libraries(static_library_example
    PRIVATE
        # Static library containing UI and interfaces
        Qt4MCU_GUI

        # Depending on which function the Qt4MCU_GUI static library is using,
        # you need to link the proper static library to the executable.
        # In this example list of the libraries which are changing depending on
        # CMake variables configuration are described. Just uncomment those which
        # apply to your setup. Config which applies to this example is uncommented.

        # Font engines:
        #   - Spark font engine (QUL_FONT_ENGINE == Spark):
        #       - QUL_PLATFORM_REQUIRED_IMAGE_ALIGNMENT == 1
        # Qul::MonotypeFontEngine
        #       - QUL_PLATFORM_REQUIRED_IMAGE_ALIGNMENT not set or 0
        # Qul::MonotypeFontEngineAligned
        #       - QUL_COMPLEX_TEXT_RENDERING == ON
        # Qul::MonotypeShaperEngine
        # Qul::MonotypeUnicodeEngine
        #       - QUL_COMPLEX_TEXT_RENDERING not set
        # Qul::MonotypeUnicodeEngineShaperDisabled
        #   - Static font engine (QUL_FONT_ENGINE == Static)
        Qul::MonotypeUnicodeEngineShaperDisabled

        # PNG decoder (add when project uses PNG images):
        #   - QUL_RESOURCE_COMPRESSION == ON
        # Qul::PNGDecoderLodePNG
        #   - QUL_RESOURCE_COMPRESSION not set or OFF
        # Qul::PNGDecoderNull

        # Additional lib which needs to be linked along to Qt QuickUltralite Core
        $<$<BOOL:${CMAKE_CROSSCOMPILING}>:Qul::DeviceLink>

        # Static library with Qt QuickUltralite Core
        Qul::Core
        # Static library with Qt QuickUltralite Platform abstraction.
        # Should be replaced by custom implementation adapted to target board
        Qul::Platform
        # All additional Qul libraries used by QtForMCU GUI needs to be also
        # linked with application
        Qul::Controls
        # Satisfy cyclic dependency between Qt4MCU_GUI and Qul::Core
        # libraries (Qul::Core depends on symbols autogenerated
        # in Qt4MCU_GUI_qmlproject build process)
        # Same sets of libraries chosen above need to match those below.
        # For example if above we choose Qul::MonotypeUnicodeEngineShaperDisabled
        # then here below we add the same library as cyclic dependency to Qul::Core.
        Qul::Core
        $<$<BOOL:${CMAKE_CROSSCOMPILING}>:Qul::DeviceLink>
        Qul::MonotypeUnicodeEngineShaperDisabled
        Qt4MCU_GUI
)

target_link_libraries(static_library_example PRIVATE Qul::PlatformDefaultLinkerScript)

if(CMAKE_CROSSCOMPILING)
    set(CMAKE_EXECUTABLE_SUFFIX ".elf")
endif()

if (QUL_BUILD_QMLPROJECT_EXAMPLES)
    add_executable(static_library_example_qmlproject
            src/main.cpp
    )

    qul_generate_flash_target(static_library_example_qmlproject)

    # If QUL GUI library has IPO enabled then we need also enable it for our target
    get_target_property(QUL_LIB_IPO_CONFIG Qt4MCU_GUI_qmlproject INTERPROCEDURAL_OPTIMIZATION)
    set_target_properties(static_library_example_qmlproject PROPERTIES INTERPROCEDURAL_OPTIMIZATION ${QUL_LIB_IPO_CONFIG})

    target_include_directories(static_library_example_qmlproject
        PRIVATE
            # Add include folder from QtForMCU installation folder
            ${Qul_DIR}/include
            # Add folder containing qul_run.h header file
            ${CMAKE_CURRENT_BINARY_DIR}/lib/Qt_for_MCU
            # Add folder containing sensorAPI.h header file
            ${CMAKE_CURRENT_SOURCE_DIR}/include
    )

    target_link_libraries(static_library_example_qmlproject
        PRIVATE
            # Static library containing UI and interfaces
            Qt4MCU_GUI_qmlproject

            # Depending on which function the Qt4MCU_GUI_qmlproject static library is using,
            # you need to link the proper static library to the executable.
            # In this example list of the libraries which are changing depending on
            # CMake variables configuration are described. Just uncomment those which
            # apply to your setup. Config which applies to this example is uncommented.

            # Font engines:
            #   - Spark font engine (QUL_FONT_ENGINE == Spark):
            #       - QUL_PLATFORM_REQUIRED_IMAGE_ALIGNMENT == 1
            # Qul::MonotypeFontEngine
            #       - QUL_PLATFORM_REQUIRED_IMAGE_ALIGNMENT not set or 0
            # Qul::MonotypeFontEngineAligned
            #       - QUL_COMPLEX_TEXT_RENDERING == ON
            # Qul::MonotypeShaperEngine
            # Qul::MonotypeUnicodeEngine
            #       - QUL_COMPLEX_TEXT_RENDERING not set
            # Qul::MonotypeUnicodeEngineShaperDisabled
            #   - Static font engine (QUL_FONT_ENGINE == Static)
            Qul::MonotypeUnicodeEngineShaperDisabled

            # PNG decoder (add when project uses PNG images):
            #   - QUL_RESOURCE_COMPRESSION == ON
            # Qul::PNGDecoderLodePNG
            #   - QUL_RESOURCE_COMPRESSION not set or OFF
            # Qul::PNGDecoderNull

            # Additional lib which needs to be linked along to Qt QuickUltralite Core
            $<$<BOOL:${CMAKE_CROSSCOMPILING}>:Qul::DeviceLink>

            # Static library with Qt QuickUltralite Core
            Qul::Core
            # Static library with Qt QuickUltralite Platform abstraction.
            # Should be replaced by custom implementation adapted to target board
            Qul::Platform
            # All additional Qul libraries used by QtForMCU GUI needs to be also
            # linked with application
            Qul::Controls
            # Satisfy cyclic dependency between Qt4MCU_GUI_qmlproject and Qul::Core
            # libraries (Qul::Core depends on symbols autogenerated
            # in Qt4MCU_GUI_qmlproject build process)
            # Same sets of libraries chosen above need to match those below.
            # For example if above we choose Qul::MonotypeUnicodeEngineShaperDisabled
            # then here below we add the same library as cyclic dependency to Qul::Core.
            Qul::Core
            $<$<BOOL:${CMAKE_CROSSCOMPILING}>:Qul::DeviceLink>
            Qul::MonotypeUnicodeEngineShaperDisabled
            Qt4MCU_GUI_qmlproject
    )

    target_link_libraries(static_library_example_qmlproject PRIVATE Qul::PlatformDefaultLinkerScript)
endif()