From ccb9dbd3f78d9f06826560bd54519bab3477947a Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Thu, 23 Jul 2026 14:37:44 +0700 Subject: 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 --- arch/x86/cpuid/CMakeLists.txt | 68 +++++++++++++++++++++++++++++-------------- arch/x86/ic/CMakeLists.txt | 54 ++++++++++++++++++++++++---------- arch/x86/io/CMakeLists.txt | 55 ++++++++++++++++++++++++---------- arch/x86/msr/CMakeLists.txt | 47 ++++++++++++++++++++++-------- 4 files changed, 158 insertions(+), 66 deletions(-) (limited to 'arch/x86') 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 . ]] -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_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 $) +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 ") + +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 . ]] -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 ") +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 . ]] -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 ") +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 . ]] -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 ") +setFeatureDependencies("x86;CPUID") + +saveFeaturerecording() -- cgit v1.2.3