blob: 0d634914ee73fbbefc3c77a1de508ade1ec12c30 [file] [log] [blame]
#
# Copyright (c) 2021 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# @file
# CMake utilities for managing and retrieving Zephyr build configuration
#
#
# Retrieve Zephyr compiler flags for the given language.
#
# Arguments:
# VAR Name of list variable in the parent scope to be appended with the result
# LANG Programming language: C or CXX
#
function(zephyr_get_compile_flags VAR LANG)
# Replace "-I" with "-isystem" to treat all Zephyr headers as system headers
# that do not trigger -Werror.
zephyr_get_include_directories_for_lang_as_string(${LANG} INCLUDES)
string(REGEX REPLACE "(^| )-I" "\\1-isystem" INCLUDES ${INCLUDES})
zephyr_get_system_include_directories_for_lang_as_string(${LANG} SYSTEM_INCLUDES)
zephyr_get_compile_definitions_for_lang_as_string(${LANG} DEFINES)
zephyr_get_compile_options_for_lang_as_string(${LANG} FLAGS)
set(${VAR} ${INCLUDES} ${SYSTEM_INCLUDES} ${DEFINES} ${FLAGS} ${${VAR}} PARENT_SCOPE)
endfunction()
#
# Select gnu++<YY> standard matching C++ standard configured via Kconfig.
#
# Arguments:
# VAR Name of list variable to be appended with the selected "-std=gnu++<YY>" flag
#
macro(zephyr_get_gnu_cpp_standard VAR)
if (CONFIG_STD_CPP11)
list(APPEND ${VAR} -std=gnu++11)
elseif (CONFIG_STD_CPP14)
list(APPEND ${VAR} -std=gnu++14)
elseif (CONFIG_STD_CPP17)
list(APPEND ${VAR} -std=gnu++17)
elseif (CONFIG_STD_CPP2A)
list(APPEND ${VAR} -std=gnu++20)
else()
message(FATAL_ERROR "Building with unsupported C++ standard")
endif()
endmacro()
function(zephyr_set_openthread_config_impl OT_DIR CONFIG_FILE)
get_property(DEFINES DIRECTORY ${OT_DIR} PROPERTY COMPILE_DEFINITIONS)
get_property(SUBDIRS DIRECTORY ${OT_DIR} PROPERTY SUBDIRECTORIES)
list(TRANSFORM DEFINES REPLACE
OPENTHREAD_PROJECT_CORE_CONFIG_FILE=.*
OPENTHREAD_PROJECT_CORE_CONFIG_FILE="${CONFIG_FILE}")
set_property(DIRECTORY ${OT_DIR} PROPERTY COMPILE_DEFINITIONS ${DEFINES})
foreach(SUBDIR ${SUBDIRS})
zephyr_set_openthread_config_impl(${SUBDIR} ${CONFIG_FILE})
endforeach()
endfunction()
#
# Replace Zephyr-supplied configuration file with a custom one.
#
# Arguments:
# CONFIG_PATH Path to OpenThread configuration file
#
function(zephyr_set_openthread_config CONFIG_PATH)
get_filename_component(CONFIG_DIR ${CONFIG_PATH} DIRECTORY)
get_filename_component(CONFIG_FILE ${CONFIG_PATH} NAME)
target_include_directories(ot-config INTERFACE ${CONFIG_DIR})
zephyr_set_openthread_config_impl(${ZEPHYR_OPENTHREAD_MODULE_DIR} ${CONFIG_FILE})
endfunction()