summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Gavrilov <alexey.gavrilov@mail.com>2026-03-28 14:55:53 +0700
committerAlexey Gavrilov <alexey.gavrilov@mail.com>2026-03-28 14:55:53 +0700
commit378972285342f52bb71822d87ba261b76b4a42ed (patch)
tree20ac43a02dce05e09272865f961f2e3decceda1f
parentc62baf8bca986d493e1caf441ea7a6b9d1c1823f (diff)
Cmake build type at the generation stage
Fix in *nasm* files - set architecture bitness. Move compiler flags from *toolchain* file to *requirements target* considering cmake files. This solution allows available of multi-configurations generators to pass compiler options without affecting on single-configuration generators. TODO - Debug information - Image creation - Build under window platform (optional) Signed-off-by: Alexey Gavrilov <alexey.gavrilov@mail.com>
-rw-r--r--CMakeLists.txt25
-rw-r--r--arch/x86/boot.nasm2
-rw-r--r--arch/x86/cpuid/CMakeLists.txt4
-rw-r--r--arch/x86/gdt/CMakeLists.txt4
-rw-r--r--arch/x86/gdt/SwitchToGdt.nasm4
-rw-r--r--cmake/toolchain/x86_generic_clang.cmake2
-rw-r--r--cmake/toolchain/x86_generic_gcc.cmake2
-rw-r--r--libgcc/x86/CMakeLists.txt6
8 files changed, 36 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b093d80..c6d9912 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,8 +4,13 @@
# Expected input variables:
# ARCH: type of architecture
-set(CXX_FLAGS
- -Wall
+cmake_minimum_required(VERSION 3.25)
+
+project(ObjectiveProject LANGUAGES CXX ASM_NASM)
+
+set(ObjectiveProject_CXX_FLAGS
+ $<$<CONFIG:Debug>:-Wall -Wextra -ggdb -g3 -O0>
+ $<$<CONFIG:Release>:-Wall -Werror>
-ffreestanding
-nostdinc
-nostdlib
@@ -13,9 +18,10 @@ set(CXX_FLAGS
-mgeneral-regs-only
)
-cmake_minimum_required(VERSION 3.25)
-
-project(ObjectiveProject LANGUAGES CXX ASM_NASM)
+set(ObjectiveProject_ASM_NASM_FLAGS
+ $<$<CONFIG:Debug>:-g -O0 -Wall>
+ $<$<CONFIG:RELEASE>:-Wall>
+)
list(APPEND CMAKE_MODULE_PATH
"${ObjectiveProject_SOURCE_DIR}/cmake/module"
@@ -36,11 +42,12 @@ endif()
# Create target with compiler requirements (include directories, flags and etc)
add_library(CXX_COMPILER_REQUIREMENTS INTERFACE)
+add_library(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE)
# Target with linker requirements
add_library(CXX_LINKER_REQUIREMENTS INTERFACE)
target_link_options(CXX_LINKER_REQUIREMENTS INTERFACE
- ${CXX_FLAGS}
+ ${ObjectiveProject_CXX_FLAGS}
)
target_link_libraries(CXX_LINKER_REQUIREMENTS INTERFACE
gcc
@@ -49,10 +56,14 @@ target_link_libraries(CXX_LINKER_REQUIREMENTS INTERFACE
# Set compiler flags
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(CXX_COMPILER_REQUIREMENTS INTERFACE
- ${CXX_FLAGS}
+ ${ObjectiveProject_CXX_FLAGS}
)
endif()
+target_compile_options(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE
+ ${ObjectiveProject_ASM_NASM_FLAGS}
+)
+
target_include_directories(CXX_COMPILER_REQUIREMENTS
INTERFACE
${ObjectiveProject_SOURCE_DIR}/include
diff --git a/arch/x86/boot.nasm b/arch/x86/boot.nasm
index 11175af..d250434 100644
--- a/arch/x86/boot.nasm
+++ b/arch/x86/boot.nasm
@@ -1,3 +1,4 @@
+BITS 32
section .text
extern main, _estack, _init
global _start:function
@@ -13,4 +14,3 @@ _start:
cli
.hang: hlt
jmp .hang
-; .end:
diff --git a/arch/x86/cpuid/CMakeLists.txt b/arch/x86/cpuid/CMakeLists.txt
index e8528e8..f03b2b1 100644
--- a/arch/x86/cpuid/CMakeLists.txt
+++ b/arch/x86/cpuid/CMakeLists.txt
@@ -22,4 +22,8 @@ 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>)
diff --git a/arch/x86/gdt/CMakeLists.txt b/arch/x86/gdt/CMakeLists.txt
index 57e3c26..ae31792 100644
--- a/arch/x86/gdt/CMakeLists.txt
+++ b/arch/x86/gdt/CMakeLists.txt
@@ -20,4 +20,8 @@ target_sources(GDTASM PRIVATE
${CMAKE_CURRENT_LIST_DIR}/SwitchToGdt.nasm
)
+target_link_libraries(GDTASM PUBLIC
+ ASM_NASM_COMPILER_REQUIREMENTS
+)
+
target_sources(ArchitectureAssemblerSources PRIVATE $<TARGET_OBJECTS:GDTASM>)
diff --git a/arch/x86/gdt/SwitchToGdt.nasm b/arch/x86/gdt/SwitchToGdt.nasm
index 52ebbc7..5d3d612 100644
--- a/arch/x86/gdt/SwitchToGdt.nasm
+++ b/arch/x86/gdt/SwitchToGdt.nasm
@@ -1,4 +1,6 @@
-global SWITCHTOGDT
+BITS 32
+section .text
+global SWITCHTOGDT:function
SWITCHTOGDT:
lgdt [esp + 4]
jmp 0x08:.reloadCS
diff --git a/cmake/toolchain/x86_generic_clang.cmake b/cmake/toolchain/x86_generic_clang.cmake
index 108f9c4..696568e 100644
--- a/cmake/toolchain/x86_generic_clang.cmake
+++ b/cmake/toolchain/x86_generic_clang.cmake
@@ -6,5 +6,3 @@ set(CMAKE_ASM_NASM_OBJECT_FORMAT elf32)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_COMPILER_TARGET i686)
-
-set(CMAKE_CXX_FLAGS_DEBUG_INIT "-Wextra -ggdb -g3 -O0")
diff --git a/cmake/toolchain/x86_generic_gcc.cmake b/cmake/toolchain/x86_generic_gcc.cmake
index 138bc45..8ea769e 100644
--- a/cmake/toolchain/x86_generic_gcc.cmake
+++ b/cmake/toolchain/x86_generic_gcc.cmake
@@ -6,5 +6,3 @@ set(CMAKE_ASM_NASM_OBJECT_FORMAT elf32)
set(CMAKE_CXX_COMPILER i686-elf-g++)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
-
-set(CMAKE_CXX_FLAGS_DEBUG_INIT "-Wextra -ggdb -g3 -O0")
diff --git a/libgcc/x86/CMakeLists.txt b/libgcc/x86/CMakeLists.txt
index 2a1bec9..8b2eb67 100644
--- a/libgcc/x86/CMakeLists.txt
+++ b/libgcc/x86/CMakeLists.txt
@@ -4,6 +4,9 @@ target_sources(CRTIBUNDLE PRIVATE
${CMAKE_CURRENT_LIST_DIR}/crti.nasm
$<TARGET_OBJECTS:CRTBEGIN>
)
+target_link_libraries(CRTIBUNDLE PUBLIC
+ ASM_NASM_COMPILER_REQUIREMENTS
+)
target_link_libraries(CRTI INTERFACE CRTIBUNDLE)
add_library(CRTN INTERFACE)
@@ -12,4 +15,7 @@ target_sources(CRTNBUNDLE PRIVATE
${CMAKE_CURRENT_LIST_DIR}/crtn.nasm
$<TARGET_OBJECTS:CRTEND>
)
+target_link_libraries(CRTNBUNDLE PUBLIC
+ ASM_NASM_COMPILER_REQUIREMENTS
+)
target_link_libraries(CRTN INTERFACE CRTNBUNDLE)