| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Copyright (c) 2022, Nordic Semiconductor ASA |
| |
| # Setup basic settings for a Zephyr project. |
| # |
| # Basic settings are: |
| # - sysbuild defined configuration settings |
| # |
| # Details for sysbuild settings: |
| # |
| # Sysbuild is a higher level build system used by Zephyr. |
| # Sysbuild allows users to build multiple samples for a given system. |
| # |
| # For this to work, sysbuild manages other Zephyr CMake build systems by setting |
| # dedicated build variables. |
| # This CMake modules loads the sysbuild cache variables as target properties on |
| # a sysbuild_cache target. |
| # |
| # This ensures that qoutes and lists are correctly preserved. |
| |
| include_guard(GLOBAL) |
| |
| if(SYSBUILD) |
| add_custom_target(sysbuild_cache) |
| file(STRINGS "${SYSBUILD_CACHE}" sysbuild_cache_strings ENCODING UTF-8) |
| foreach(str ${sysbuild_cache_strings}) |
| # Using a regex for matching whole 'VAR_NAME:TYPE=VALUE' will strip semi-colons |
| # thus resulting in lists to become strings. |
| # Therefore we first fetch VAR_NAME and TYPE, and afterwards extract |
| # remaining of string into a value that populates the property. |
| # This method ensures that both quoted values and ;-separated list stays intact. |
| string(REGEX MATCH "([^:]*):([^=]*)=" variable_identifier ${str}) |
| string(LENGTH ${variable_identifier} variable_identifier_length) |
| string(SUBSTRING "${str}" ${variable_identifier_length} -1 variable_value) |
| set_property(TARGET sysbuild_cache APPEND PROPERTY "SYSBUILD_CACHE:VARIABLES" "${CMAKE_MATCH_1}") |
| set_property(TARGET sysbuild_cache PROPERTY "${CMAKE_MATCH_1}:TYPE" "${CMAKE_MATCH_2}") |
| set_property(TARGET sysbuild_cache PROPERTY "${CMAKE_MATCH_1}" "${variable_value}") |
| endforeach() |
| endif() |