summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Gavrilov <alexey.gavrilov@mail.com>2026-07-23 14:37:44 +0700
committerAlexey Gavrilov <alexey.gavrilov@mail.com>2026-07-23 17:55:20 +0700
commitccb9dbd3f78d9f06826560bd54519bab3477947a (patch)
tree70a5a4ddb9ff59ba334000c0c87d1e0299b408a7
parentbfab70232fb99d08131c0da3a95b98174e107999 (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>
-rw-r--r--CMakeLists.txt14
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--arch/x86/cpuid/CMakeLists.txt68
-rw-r--r--arch/x86/ic/CMakeLists.txt54
-rw-r--r--arch/x86/io/CMakeLists.txt55
-rw-r--r--arch/x86/msr/CMakeLists.txt47
-rw-r--r--cmake/module/cmaketodo10
-rw-r--r--cmake/module/dexport.cmake (renamed from cmake/module/runfile.cmake)10
-rw-r--r--cmake/module/feature.cmake39
-rw-r--r--drivers/acpi/CMakeLists.txt55
-rw-r--r--kernel/details/CMakeLists.txt21
11 files changed, 267 insertions, 110 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 383bc13..5e55185 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,8 +59,17 @@ list(APPEND CMAKE_MODULE_PATH
)
include(feature)
+
+# Propagate project information to feature module
+featureProjectDataAssign(
+ "${OBJECTIVE_SUPPORTED_PROCESSORS}"
+ "${ObjectiveProject_SOURCE_DIR}"
+ "${ObjectiveProject_ARCHITECTURE}"
+ "cmake/toolchain"
+)
+
include(metadata)
-include(runfile)
+include(dexport)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -91,6 +100,7 @@ add_library(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE)
# Target with linker requirements
add_library(CXX_LINKER_REQUIREMENTS INTERFACE)
+
target_link_options(CXX_LINKER_REQUIREMENTS INTERFACE
${ObjectiveProject_CXX_FLAGS}
)
@@ -144,4 +154,4 @@ target_link_libraries(Objective PRIVATE
target_link_libraries(Objective PRIVATE CXX_LINKER_REQUIREMENTS)
outFeaturesToFile()
-writerunfile()
+definesFileExport()
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index cc57821..58d1259 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -62,7 +62,7 @@ differ. `email` branch indent to receive patches from email and used by gerrit
instance when pushing to review.
## Sending a patch
-**`<builddir>/CMakeReplication.txt` file must is attached to the commit**
+**`<builddir>/CMakeDexport.txt` file must is attached to the commit**
Before to submit a patch, please read its whole. Make sure there are no unintended changes and fix them.
Trailing whitespaces, empty commits, test code, bad words and etc. must be deleted.
@@ -132,7 +132,7 @@ Attach the following information:
- Version of the kernel.
- Explain the behavior you would expect and the actual behaviour.
- Exactly what steps did you take to trigger the bug?
-- `<builddir>/CMakeReplication.txt` file content.
+- `<builddir>/CMakeDexport.txt` file content.
- If possible provide an exact example that demonstrates your problem. This
could be a code snippet or display content from emulator or something else.
Create the minimum working example that demonstrates your problem. Remove
diff --git a/arch/x86/cpuid/CMakeLists.txt b/arch/x86/cpuid/CMakeLists.txt
index e6af515..6833df5 100644
--- a/arch/x86/cpuid/CMakeLists.txt
+++ b/arch/x86/cpuid/CMakeLists.txt
@@ -16,32 +16,56 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-add_library(CPUID STATIC)
-target_link_libraries(CPUID PUBLIC CXX_COMPILER_REQUIREMENTS)
+set(IS_CPUID_DEFINES TRUE)
+ifFeatureEnables(CPUID IS_CPUID_DEFINES)
-target_sources(CPUID PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/Cpuid.cpp
-)
+if(NOT IS_CPUID_DEFINES)
+ add_library(CPUID INTERFACE)
+else()
-target_sources(CPUID
- PUBLIC
- FILE_SET HEADERS
- BASE_DIRS
- ${CMAKE_CURRENT_LIST_DIR}
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/Cpuid.h
-)
+ target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE
+ FEATRUE_CPUID
+ )
-target_link_libraries(Architecture INTERFACE CPUID)
+ add_library(CPUID STATIC)
-add_library(CPUIDASM OBJECT)
+ target_link_libraries(CPUID PUBLIC CXX_COMPILER_REQUIREMENTS)
-target_sources(CPUIDASM PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/CpuidCheck.nasm
-)
+ target_sources(CPUID PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/Cpuid.cpp
+ )
-target_link_libraries(CPUIDASM PUBLIC
- ASM_NASM_COMPILER_REQUIREMENTS
-)
+ target_sources(CPUID
+ PUBLIC
+ FILE_SET HEADERS
+ BASE_DIRS
+ ${CMAKE_CURRENT_LIST_DIR}
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/Cpuid.h
+ )
-target_sources(ArchitectureAssemblerSources PRIVATE $<TARGET_OBJECTS:CPUIDASM>)
+ target_link_libraries(Architecture INTERFACE CPUID)
+
+ add_library(CPUIDASM OBJECT)
+
+ target_sources(CPUIDASM PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/CpuidCheck.nasm
+ )
+
+ target_link_libraries(CPUIDASM PUBLIC
+ ASM_NASM_COMPILER_REQUIREMENTS
+ )
+
+ target_sources(ArchitectureAssemblerSources PRIVATE $<TARGET_OBJECTS:CPUIDASM>)
+endif()
+
+startFeatureRecording(CPUID)
+
+setFeatureField(NAME "cpuid extension")
+setFeatureField(HASHCOMMIT "e3e68862bbc731802efc39cbfb1b6df7ab255204")
+setFeatureField(DESCRIPTION "This feature makes available to use cpuid"
+ "processor's function")
+setFeatureField(TAGS "NEW;MULTIPLATFORM")
+setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>")
+
+saveFeatureRecording()
diff --git a/arch/x86/ic/CMakeLists.txt b/arch/x86/ic/CMakeLists.txt
index b724a64..cdb30c3 100644
--- a/arch/x86/ic/CMakeLists.txt
+++ b/arch/x86/ic/CMakeLists.txt
@@ -16,19 +16,41 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-add_library(IC STATIC)
-target_link_libraries(IC PUBLIC CXX_COMPILER_REQUIREMENTS)
-
-target_sources(IC PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/Pic.cpp
-)
-
-target_sources(IC
- PUBLIC
- FILE_SET HEADERS
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/Pic.h
- ${CMAKE_CURRENT_LIST_DIR}/IPic.h
-)
-
-target_link_libraries(Architecture INTERFACE IC)
+set(IS_PIC_DEFINES TRUE)
+ifFeatureEnables(PIC IS_PIC_DEFINES)
+
+if(NOT IS_PIC_DEFINES)
+ add_library(PIC INTERFACE)
+else()
+ target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE
+ FEATURE_PIC
+ )
+
+ add_library(PIC STATIC)
+ target_link_libraries(PIC PUBLIC CXX_COMPILER_REQUIREMENTS)
+
+ target_sources(PIC PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/Pic.cpp
+ )
+
+ target_sources(PIC
+ PUBLIC
+ FILE_SET HEADERS
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/Pic.h
+ ${CMAKE_CURRENT_LIST_DIR}/IPic.h
+ )
+
+ target_link_libraries(Architecture INTERFACE PIC)
+endif()
+
+startFeatureRecording(PIC)
+
+setFeatureField(NAME "PIC support")
+setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178")
+setFeatureField(DESCRIPTION "PIC x86 support")
+setFeatureField(TAGS "NEW")
+setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>")
+setFeatureDependencies("x86;ACPI")
+
+saveFeaturerecording()
diff --git a/arch/x86/io/CMakeLists.txt b/arch/x86/io/CMakeLists.txt
index 0686529..b63c4eb 100644
--- a/arch/x86/io/CMakeLists.txt
+++ b/arch/x86/io/CMakeLists.txt
@@ -16,19 +16,42 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-add_library(IO STATIC)
-target_link_libraries(IO PUBLIC CXX_COMPILER_REQUIREMENTS)
-
-target_sources(IO PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.cpp
-)
-
-target_sources(IO
- PUBLIC
- FILE_SET HEADERS
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.h
- ${CMAKE_CURRENT_LIST_DIR}/VGADisplayInfo.h
-)
-
-target_link_libraries(Architecture INTERFACE IO)
+set(IS_DISPLAY_DEFINES TRUE)
+ifFeatureEnables(DISPLAY IS_DISPLAY_DEFINES)
+
+if(NOT IS_DISPLAY_DEFINES)
+ add_library(DISPLAY INTERFACE)
+else()
+ target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE
+ FEATURE_DISPLAY
+ )
+
+ add_library(DISPLAY STATIC)
+ target_link_libraries(DISPLAY PUBLIC CXX_COMPILER_REQUIREMENTS)
+
+ target_sources(DISPLAY PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.cpp
+ )
+
+ target_sources(DISPLAY
+ PUBLIC
+ FILE_SET HEADERS
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.h
+ ${CMAKE_CURRENT_LIST_DIR}/VGADisplayInfo.h
+ )
+
+ target_link_libraries(Architecture INTERFACE DISPLAY)
+endif()
+
+startFeatureRecording(DISPLAY)
+
+setFeatureField(NAME "VGA driver for x86 processors")
+setFeatureField(HASHCOMMIT "b82ccebd3a0cce28177b5fac046139e2de7737fa")
+setFeatureField(DESCRIPTION "Add ability to write into framebuffer"
+ "under the x86 processorҕ")
+setFeatureField(TAGS "NEW")
+setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>")
+setFeatureDependencies(x86)
+
+saveFeatureRecording()
diff --git a/arch/x86/msr/CMakeLists.txt b/arch/x86/msr/CMakeLists.txt
index 3f4fd8a..47112dd 100644
--- a/arch/x86/msr/CMakeLists.txt
+++ b/arch/x86/msr/CMakeLists.txt
@@ -16,18 +16,41 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-add_library(MSR STATIC)
-target_link_libraries(MSR PUBLIC CXX_COMPILER_REQUIREMENTS)
+set(IS_MSR_DEFINES TRUE)
+ifFeatureEnables(MSR IS_MSR_DEFINES)
-target_sources(MSR PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/Msr.cpp
-)
+if(NOT IS_MSR_DEFINES)
+ add_library(MSR INTERFACE)
+else()
+ target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE
+ FEATRUE_MSR
+ )
-target_sources(MSR
- PUBLIC
- FILE_SET HEADERS
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/Msr.h
-)
+ add_library(MSR STATIC)
+ target_link_libraries(MSR PUBLIC CXX_COMPILER_REQUIREMENTS)
-target_link_libraries(Architecture INTERFACE MSR)
+ target_sources(MSR PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/Msr.cpp
+ )
+
+ target_sources(MSR
+ PUBLIC
+ FILE_SET HEADERS
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/Msr.h
+ )
+
+ target_link_libraries(Architecture INTERFACE MSR)
+endif()
+
+startFeatureRecording(MSR)
+
+setFeatureField(NAME "MSR register extension")
+setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178")
+setFeatureField(DESCRIPTION "This feature makes available to use"
+ "the x86 MSR register")
+setFeatureField(TAGS "NEW")
+setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>")
+setFeatureDependencies("x86;CPUID")
+
+saveFeaturerecording()
diff --git a/cmake/module/cmaketodo b/cmake/module/cmaketodo
new file mode 100644
index 0000000..9ccad77
--- /dev/null
+++ b/cmake/module/cmaketodo
@@ -0,0 +1,10 @@
+1.(DONE) Don't create a feature with duplicating name
+ Add checks in create and save feature functions
+
+2.(DONE) Add processing for FEATURES_SUSPEND variable features functions to suspend
+this module variables populating.
+
+3.(DONE) Are Features accord toolchain? Implement this check. Maybe to process a cache cmake
+variable. FEATURES_TIE_BUILD
+
+4. find_package() support for modules, and write documentation.
diff --git a/cmake/module/runfile.cmake b/cmake/module/dexport.cmake
index 86c7493..6ab5146 100644
--- a/cmake/module/runfile.cmake
+++ b/cmake/module/dexport.cmake
@@ -17,11 +17,11 @@
include_guard(GLOBAL)
-set(CONFFILE_NAME "CMakeFeaturesDefineEnum.txt" CACHE STRING "Build configuration
+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}}")
+ if("${var}" IN_LIST ${cachelist} AND DEFINED "${var}")
file(APPEND ${${outfile}} " -D${var}=${${var}}")
endif()
endmacro()
@@ -37,10 +37,10 @@ macro(parseFeatures vars outfile)
endforeach()
endmacro()
-function(writerunfile)
- set(OUT_FILE "${CMAKE_BINARY_DIR}/${CONFFILE_NAME}")
+function(definesFileExport)
+ cmake_path(APPEND OUTFILE "${CMAKE_BINARY_DIR}" "${CONFFILE_NAME}")
get_directory_property(cacheVars CACHE_VARIABLES)
- parseFeatures(cacheVars OUT_FILE)
+ parseFeatures(cacheVars OUTFILE)
endfunction()
diff --git a/cmake/module/feature.cmake b/cmake/module/feature.cmake
index 8ee7848..bb2459c 100644
--- a/cmake/module/feature.cmake
+++ b/cmake/module/feature.cmake
@@ -42,8 +42,23 @@ macro(createFeatureModuleFunction name args bodyfunc)
endmacro()
#[[
+# Return TRUE if feature define passed from cmake option, FALSE otherwise
+ # featurename - the name of a feature
+ # result - out argument keeps variable name to propagate
+ ]]
+createFeatureModuleFunction("ifFeatureEnables" "featurename;result"
+[[ if(DEFINED FEATURE_${featurename})
+ set(${result} TRUE)
+ else()
+ set(${result} FALSE)
+ endif()
+
+ return(PROPAGATE ${result})]]
+)
+
+#[[
# !IMPORTANT! Call before any other function execution and only one time.
- # !IMPORTANT! Incorrect use of this function cause undefined behaviour.
+ # Incorrect use of this function cause undefined behaviour.
# Filling cache variables related project information.
]]
createFeatureModuleFunction("featureProjectDataAssign"
@@ -65,7 +80,7 @@ createFeatureModuleFunction("featureModuleInitialization" ""
set_property(GLOBAL PROPERTY CONSERVED_FEATURES "")
# Name of out file
- set(FEATURE_OUT_FILE "CMakeFeaturesDefineEnum.txt" CACHE STRING "Features data
+ set(FEATURE_OUT_FILE "CMakeFeatures.txt" CACHE STRING "Features data
out filename")
set(FEATURE_AVAILABLE_FIELDS "NAME;DESCRIPTION;TAGS;HASHCOMMIT;AUTHORSHIP"
CACHE STRING "Available feature fields")]]
@@ -122,11 +137,12 @@ createFeatureModuleFunction("saveFeatureRecording" ""
# Save feature divides on three category: nothing to save, cannot to finish
# and can finish the save process
+ list(POP_BACK POPULATING_FEATURES_PROPERTY PROMISE_SAVE)
+
if(POPULATING_FEATURES_LENGTH LESS 1)
message(WARNING "Nothing feature to save")
elseif(POPULATING_FEATURES_LENGTH EQUAL 1)
- list(POP_BACK POPULATING_FEATURES_PROPERTY SAVING_FEATURE)
- list(APPEND FEATURES_LIST_PROPERTY \${SAVING_FEATURE})
+ list(APPEND FEATURES_LIST_PROPERTY \${PROMISE_SAVE})
# Finish the save process for all features in CONSERVED_FEATURES list
while(NOT "\${CONSERVED_FEATURES_PROPERTY}" STREQUAL "")
@@ -151,8 +167,7 @@ createFeatureModuleFunction("saveFeatureRecording" ""
list(APPEND FEATURES_LIST_PROPERTY \${CONSERVED_FEATURE})
endwhile()
elseif(POPULATING_FEATURES_LENGTH GREATER 1)
- list(POP_BACK POPULATING_FEATURES_PROPERTY UNFINISHED_FEATURE)
- list(APPEND CONSERVED_FEATURES_PROPERTY \${UNFINISHED_FEATURE})
+ list(APPEND CONSERVED_FEATURES_PROPERTY \${PROMISE_SAVE})
endif()
set_property(GLOBAL PROPERTY
@@ -199,7 +214,7 @@ createFeatureModuleFunction("setFeatureField" "field;value"
# Element in names must be an architecture, compiler or another feature.
# Would is a list.
]]
-createFeatureModuleFunction("setFeatureDependency" "names"
+createFeatureModuleFunction("setFeatureDependencies" "names"
[[ get_property( POPULATING_FEATURES_PROPERTY GLOBAL PROPERTY POPULATING_FEATURES)
get_property( CONSERVED_FEATURES_PROPERTY GLOBAL PROPERTY CONSERVED_FEATURES)
list(POP_BACK POPULATING_FEATURES_PROPERTY RECORDING_FEATURE)
@@ -248,7 +263,7 @@ createFeatureModuleFunction("setFeatureDependency" "names"
#[[
# Function that push features data into file. Content is like cmake variables.
- # <FEATURE_PROPERTY> = "<VARIABLE>"
+# <FEATURE_PROPERTY> = "<VALUE>"
]]
createFeatureModuleFunction("outFeaturesToFile" ""
[[ get_directory_property(cacheVars CACHE_VARIABLES)
@@ -260,8 +275,12 @@ createFeatureModuleFunction("outFeaturesToFile" ""
file(APPEND "\${OUT_FILE}" "# Toolset variables\n")
if("CMAKE_TOOLCHAIN_FILE" IN_LIST cacheVars AND NOT "\${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
cmake_path(GET CMAKE_TOOLCHAIN_FILE FILENAME TOOLCHAIN_FILE_NAME)
- file(APPEND "\${OUT_FILE}" " -DCMAKE_TOOLCHAIN_FILE="
- "\${FEATURE_PROJECT_ROOT_DIR}/\${FEATURE_TOOLCHAIN_DIR}/\${TOOLCHAIN_FILE_NAME}")
+ cmake_path(APPEND TOOLCHAIN_PATH
+ "\${FEATURE_PROJECT_ROOT_DIR}"
+ "\${FEATURE_TOOLCHAIN_DIR}"
+ "\${TOOLCHAIN_FILE_NAME}"
+ )
+ file(APPEND "\${OUT_FILE}" " -DCMAKE_TOOLCHAIN_FILE=\${TOOLCHAIN_PATH}")
else()
cmake_path(GET CMAKE_CXX_COMPILER FILENAME CXX_COMPILER_EXECUTABLE)
file(APPEND "\${OUT_FILE}" "CMAKE_CXX_COMPILER= \\"\${CXX_COMPILER_EXECUTABLE}\\"\n")
diff --git a/drivers/acpi/CMakeLists.txt b/drivers/acpi/CMakeLists.txt
index 35c1d7b..55f0f3c 100644
--- a/drivers/acpi/CMakeLists.txt
+++ b/drivers/acpi/CMakeLists.txt
@@ -16,20 +16,41 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-add_library(ACPI STATIC)
-target_link_libraries(ACPI PUBLIC CXX_COMPILER_REQUIREMENTS)
-
-target_sources(ACPI PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/Acpi.cpp
- ${CMAKE_CURRENT_LIST_DIR}/Ics.cpp
-)
-
-target_sources(ACPI
- PUBLIC
- FILE_SET HEADERS
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/Acpi.h
- ${CMAKE_CURRENT_LIST_DIR}/Ics.h
-)
-
-target_link_libraries(Drivers INTERFACE ACPI)
+set(IS_ACPI_DEFINES TRUE)
+ifFeatureEnables(MSR IS_ACPI_DEFINES)
+
+if(NOT IS_ACPI_DEFINES)
+ add_library(ACPI INTERFACE)
+else()
+ target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE
+ FEATURE_ACPI
+ )
+
+ add_library(ACPI STATIC)
+ target_link_libraries(ACPI PUBLIC CXX_COMPILER_REQUIREMENTS)
+
+ target_sources(ACPI PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/Acpi.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/Ics.cpp
+ )
+
+ target_sources(ACPI
+ PUBLIC
+ FILE_SET HEADERS
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/Acpi.h
+ ${CMAKE_CURRENT_LIST_DIR}/Ics.h
+ )
+
+ target_link_libraries(Drivers INTERFACE ACPI)
+endif()
+
+startFeatureRecording(ACPI)
+
+setFeatureField(NAME "ACPI tables")
+setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178")
+setFeatureField(DESCRIPTION "ACPI tables support")
+setFeatureField(TAGS "NEW")
+setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>")
+
+saveFeaturerecording()
diff --git a/kernel/details/CMakeLists.txt b/kernel/details/CMakeLists.txt
index ceab7f6..1ecfc06 100644
--- a/kernel/details/CMakeLists.txt
+++ b/kernel/details/CMakeLists.txt
@@ -16,11 +16,16 @@
* ObjectiveOS. If not, see <https://www.gnu.org/licenses/>.
]]
-target_sources(CPUID
- PUBLIC
- FILE_SET HEADERS
- BASE_DIRS
- ${CMAKE_CURRENT_LIST_DIR}
- FILES
- ${CMAKE_CURRENT_LIST_DIR}/Platform.h
-)
+set(IS_CPUID_DEFINES TRUE)
+ifFeatureEnables(CPUID IS_CPUID_DEFINES)
+
+if(IS_CPUID_DEFINES)
+ target_sources(CPUID
+ PUBLIC
+ FILE_SET HEADERS
+ BASE_DIRS
+ ${CMAKE_CURRENT_LIST_DIR}
+ FILES
+ ${CMAKE_CURRENT_LIST_DIR}/Platform.h
+ )
+endif()