From 6ffe96d1e3f0289c2070e050cf8e1a30288e6d91 Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Fri, 27 Mar 2026 14:03:55 +0700 Subject: Cmake build generator support: build stage Multi-target architecture implementation: each root source code directory presents the one *INTERFACE* target to it's subdirectory subtargets that link only as *STATIC* library. For instance, *arch* directory presents *Architecture* target then *Architecture* target has *CPUID*, *IO*, *PORT* and etc. dependencies Exact order of linking targets is: boot.o CRTIBUNDLE CRTNBUNDLE. Sequence destruction cause to UB. Please to pay attention to this. TODO - Debug information - Build type - Toolchain file - Image creation - Build by WinGW compiler on Windows platform (optional) Signed-off-by: Alexey Gavrilov --- arch/x86/cpuid/CMakeLists.txt | 25 +++++++++++++++++++++++++ arch/x86/cpuid/Cpuid.h | 2 +- arch/x86/cpuid/CpuidCheck.nasm | 21 +++++++++++++++++++++ arch/x86/cpuid/CpuidCheck.s | 21 --------------------- 4 files changed, 47 insertions(+), 22 deletions(-) create mode 100644 arch/x86/cpuid/CMakeLists.txt create mode 100644 arch/x86/cpuid/CpuidCheck.nasm delete mode 100644 arch/x86/cpuid/CpuidCheck.s (limited to 'arch/x86/cpuid') diff --git a/arch/x86/cpuid/CMakeLists.txt b/arch/x86/cpuid/CMakeLists.txt new file mode 100644 index 0000000..e8528e8 --- /dev/null +++ b/arch/x86/cpuid/CMakeLists.txt @@ -0,0 +1,25 @@ +add_library(CPUID STATIC) +target_link_libraries(CPUID PUBLIC CXX_COMPILER_REQUIREMENTS) + +target_sources(CPUID PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/Cpuid.cpp +) + +target_sources(CPUID + PUBLIC + FILE_SET HEADERS + BASE_DIRS + ${CMAKE_CURRENT_LIST_DIR} + FILES + ${CMAKE_CURRENT_LIST_DIR}/Cpuid.h +) + +target_link_libraries(Architecture INTERFACE CPUID) + +add_library(CPUIDASM OBJECT) + +target_sources(CPUIDASM PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/CpuidCheck.nasm +) + +target_sources(ArchitectureAssemblerSources PRIVATE $) diff --git a/arch/x86/cpuid/Cpuid.h b/arch/x86/cpuid/Cpuid.h index a65cdc8..c8ad4aa 100644 --- a/arch/x86/cpuid/Cpuid.h +++ b/arch/x86/cpuid/Cpuid.h @@ -1,6 +1,6 @@ #ifndef CPUID_H #define CPUID_H -#include +#include #include // To declare cpuid::Executor::Executor() diff --git a/arch/x86/cpuid/CpuidCheck.nasm b/arch/x86/cpuid/CpuidCheck.nasm new file mode 100644 index 0000000..67bc9eb --- /dev/null +++ b/arch/x86/cpuid/CpuidCheck.nasm @@ -0,0 +1,21 @@ +global CPUIDCHK:function +CPUIDCHK: + push ebx + pushfd + pop eax + mov ebx, eax + xor eax, 0x200000 + push eax + popfd + pushfd + pop eax + xor eax, ebx + je nocpuid + mov eax, 1 + jmp restore +nocpuid: + mov eax, 0 +restore: + pop ebx + ret +.endchk: diff --git a/arch/x86/cpuid/CpuidCheck.s b/arch/x86/cpuid/CpuidCheck.s deleted file mode 100644 index 67bc9eb..0000000 --- a/arch/x86/cpuid/CpuidCheck.s +++ /dev/null @@ -1,21 +0,0 @@ -global CPUIDCHK:function -CPUIDCHK: - push ebx - pushfd - pop eax - mov ebx, eax - xor eax, 0x200000 - push eax - popfd - pushfd - pop eax - xor eax, ebx - je nocpuid - mov eax, 1 - jmp restore -nocpuid: - mov eax, 0 -restore: - pop ebx - ret -.endchk: -- cgit v1.2.3