diff options
| author | Alexey Gavrilov <alexey.gavrilov@mail.com> | 2026-07-23 14:37:44 +0700 |
|---|---|---|
| committer | Alexey Gavrilov <alexey.gavrilov@mail.com> | 2026-07-23 17:55:20 +0700 |
| commit | ccb9dbd3f78d9f06826560bd54519bab3477947a (patch) | |
| tree | 70a5a4ddb9ff59ba334000c0c87d1e0299b408a7 /cmake/module/dexport.cmake | |
| parent | bfab70232fb99d08131c0da3a95b98174e107999 (diff) | |
Include cmake feature module in the build routine
Add predicate `ifFeatureEnables` that checks feature is define or not,
and return accordingly boolean value.
Consider some cmake objective targets as features. Populate information
to these targets, and provides in particular file `CMakeFeatures.txt`.
Cpuid, MSR, ACPI and driver VGA in text mode they are.
Signed-off-by: Alexey Gavrilov <alexey.gavrilov@mail.com>
Diffstat (limited to 'cmake/module/dexport.cmake')
| -rw-r--r-- | cmake/module/dexport.cmake | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/cmake/module/dexport.cmake b/cmake/module/dexport.cmake new file mode 100644 index 0000000..6ab5146 --- /dev/null +++ b/cmake/module/dexport.cmake @@ -0,0 +1,46 @@ +#[[ + # Copyright (c) 2026 Alexey Gavrilov <alexey.gavrilov@mail.com> + # + # This file is part of ObjectiveOS. + # + # ObjectiveOS is free software: you can redistribute it and/or modify it under + # the terms of the GNU General Public License as published by the Free Software + # Foundation, either version 3 of the License, or (at your option) any later + # version. + # + # ObjectiveOS is distributed in the hope that it will be useful, but WITHOUT ANY + # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License along with + # ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. + ]] + +include_guard(GLOBAL) + +set(CONFFILE_NAME "CMakeDexport.txt" CACHE STRING "Build configuration +file contains cmake run command to reproduce last run") + +macro(convertCacheVarIntoArg var cachelist outfile) + if("${var}" IN_LIST ${cachelist} AND DEFINED "${var}") + file(APPEND ${${outfile}} " -D${var}=${${var}}") + endif() +endmacro() + +macro(parseFeatures vars outfile) + # Make copy of cache variables + set(FEATURE_CACHE_VARS ${${vars}}) + # Stay only features enumeration + list(FILTER FEATURE_CACHE_VARS INCLUDE REGEX "FEATURE_[A-Za-z0-9\.]+$") + + foreach(FEATURE_VAR IN LISTS FEATURE_CACHE_VARS) + convertCacheVarIntoArg("${FEATURE_VAR}" ${vars} ${outfile}) + endforeach() +endmacro() + +function(definesFileExport) + cmake_path(APPEND OUTFILE "${CMAKE_BINARY_DIR}" "${CONFFILE_NAME}") + + get_directory_property(cacheVars CACHE_VARIABLES) + + parseFeatures(cacheVars OUTFILE) +endfunction() |
