C

Monitor Integration to Qt Ultralite with AUTOSAR

cmake_minimum_required(VERSION 3.10)
project(QSRMonitor C CXX)

# Check for required QSR source directory
if(NOT DEFINED QSR_SOURCE_DIR)
    message(FATAL_ERROR "QSR_SOURCE_DIR must be defined. Please provide it with -DQSR_SOURCE_DIR=<path>")
endif()
if(NOT IS_DIRECTORY "${QSR_SOURCE_DIR}")
    message(FATAL_ERROR "QSR_SOURCE_DIR (${QSR_SOURCE_DIR}) is not a directory.")
endif()

# Define build options
option(BUILD_FOR_MCU "Build for MCU target" ON)
option(BUILD_LIBRARIES_ONLY "Build only libraries without executable" OFF)

# Include QSR tools macros and header export
include(${QSR_SOURCE_DIR}/cmake/qsr_tools_custom_macros.cmake)
include(${QSR_SOURCE_DIR}/cmake/export_qsr_headers.cmake)

# Set the QML file for monitor data generation
set(QSR_INPUT_QML "${CMAKE_CURRENT_SOURCE_DIR}/qml/SafeUI.qml" CACHE STRING "The QML file for the monitor data generation")
if(NOT EXISTS "${QSR_INPUT_QML}")
    message(FATAL_ERROR "QSR_INPUT_QML (${QSR_INPUT_QML}) does not exist.")
endif()

# Set variables needed by QSR subdirectories
set(QSR_SOURCE_DIR "${QSR_SOURCE_DIR}" CACHE PATH "QSR source directory" FORCE)

# Add QSR subdirectories with binary directories
add_subdirectory(${QSR_SOURCE_DIR}/src/saferenderer ${CMAKE_BINARY_DIR}/qsr/saferenderer)
add_subdirectory(${QSR_SOURCE_DIR}/src/adaptation/outputverifier ${CMAKE_BINARY_DIR}/qsr/outputverifier)
add_subdirectory(${QSR_SOURCE_DIR}/src/monitor ${CMAKE_BINARY_DIR}/qsr/monitor)

# Generate monitorconfig data from QML to a library
add_subdirectory(libmonitordata)

# Include export QSR headers
include_directories(
    .
    ${CMAKE_BINARY_DIR}/include
    ${CMAKE_BINARY_DIR}/include/QtSafeMonitor
    ${CMAKE_BINARY_DIR}/include/QtSafeOutputVerifierAdaptation
    ${CMAKE_BINARY_DIR}/include/QtSafeRenderer
)

# Create a custom target for all libraries
add_custom_target(qsr_libraries
    DEPENDS
        SafeRenderer
        OutputVerifier
        SafeMonitor
        qsrmonitordata
    COMMENT "Building QSR libraries"
)

# In case you want to build the example test executable
if(NOT BUILD_LIBRARIES_ONLY)
    # The example test executable
    set(TEST_SRCS
        cdd_qsr_stub.c
        main.c
    )

    # Create the test executable
    add_executable(test_exe ${TEST_SRCS})

    # Link the test executable with the libraries
    target_link_libraries(test_exe
        OutputVerifier
        SafeMonitor
        qsrmonitordata
        SafeRenderer
    )

    # Set the output directory for the test executable
    set_target_properties(test_exe PROPERTIES
        RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
    )
endif()

# Set default target based on BUILD_LIBRARIES_ONLY
if(BUILD_LIBRARIES_ONLY)
    set(CMAKE_DEFAULT_TARGET qsr_libraries)
endif()