summaryrefslogtreecommitdiffstats
path: root/arch/x86
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 /arch/x86
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>
Diffstat (limited to 'arch/x86')
-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
4 files changed, 158 insertions, 66 deletions
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()