-
Notifications
You must be signed in to change notification settings - Fork 6.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmake: CMake compile features support
Fixes: #36558 #32577 This commit introduces CMAKE_C_COMPILE_FEATURES and CMAKE_CXX_COMPILE_FEATURES. This allows users to use the `target_compile_features()` in their own code. In Zephyr, the CMAKE_C/CXX_COMPILE_FEATURES are defined based on the compiler and the Kconfig / CSTD setting. Doing so ensures that a user compiling Zephyr with c99 and specifies `target_compile_features(<target> ... c_std_11)` will get an error. And similar if building Zephyr with C++ support and c++11, but testing for `target_compile_features(<target> ... cxx_std_17)`. For example in the C++ case, the user must ensure that Zephyr is compiled with C++17, that is: CPLUSPLUS=y and STD_CPP17=y, in which case the CMAKE_CXX_COMPILE_FEATURES will contain support for C++17 and thus the `target_compile_features(<target> ... cxx_std_17)` will succeed. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
- Loading branch information
1 parent
1a42926
commit 1d9ab58
Showing
3 changed files
with
40 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
set(c23id c2x gnu2x) | ||
set(c17id c17 c18 gnu17 gnu18 "iso9899:2017" "iso9899:2018") | ||
set(c11id c11 gnu11 "iso9899:2011") | ||
set(c99id c99 gnu99 "iso9899:1999") | ||
set(c90id c89 c90 gnu89 gnu90 "iso9899:1990" "iso9899:199409") | ||
|
||
set(compile_features_list) | ||
|
||
# For each id value above a compile_features_${idval} with a list of supported | ||
# `c_std_XX` values are created for easy lookup. | ||
# For example, the settings | ||
# - `compile_feature_c99` will contain `c_std_90;c_std_99` | ||
# - `compile_feature_iso9899:2011` will contain `c_std_90;c_std_99;c_std_11` | ||
# that can then be used to set CMAKE_C_COMPILE_FEATURES accordingly. | ||
foreach(standard 90 99 11 17 23) | ||
list(APPEND compile_features_list c_std_${standard}) | ||
foreach(id ${c${standard}id}) | ||
set(compile_features_${id} ${compile_features_list}) | ||
endforeach() | ||
endforeach() | ||
|
||
set(compile_features_cpp98 cxx_std_98) | ||
set(compile_features_cpp11 cxx_std_11 ${compile_features_cpp98}) | ||
set(compile_features_cpp14 cxx_std_14 ${compile_features_cpp11}) | ||
set(compile_features_cpp17 cxx_std_17 ${compile_features_cpp14}) | ||
set(compile_features_cpp20 cxx_std_20 ${compile_features_cpp17}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters