aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/CMakeLists.txt')
-rw-r--r--arch/x86_64/CMakeLists.txt176
1 files changed, 35 insertions, 141 deletions
diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt
index 57b3a60..54f04cb 100644
--- a/arch/x86_64/CMakeLists.txt
+++ b/arch/x86_64/CMakeLists.txt
@@ -1,155 +1,49 @@
-#[============================================================================[
-# The Kernel Library
-#]============================================================================]
+add_library("x86_64" OBJECT)
+add_library("os::arch" ALIAS "x86_64")
-set(TEACHOS_KERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld")
-mark_as_advanced(TEACHOS_KERNEL_LINKER_SCRIPT)
-
-target_sources("_kernel" PRIVATE
- "src/kernel/main.cpp"
- "src/kernel/cpu/control_register.cpp"
- "src/kernel/cpu/gdtr.cpp"
- "src/kernel/cpu/idtr.cpp"
- "src/kernel/cpu/if.cpp"
- "src/kernel/cpu/call.cpp"
- "src/kernel/cpu/msr.cpp"
- "src/kernel/cpu/segment_register.cpp"
- "src/kernel/cpu/tlb.cpp"
- "src/kernel/cpu/tr.cpp"
-)
-
-target_link_options("_kernel" PRIVATE
- "-T${TEACHOS_KERNEL_LINKER_SCRIPT}"
+target_include_directories("x86_64" PUBLIC
+ "include"
)
-set_target_properties("_kernel" PROPERTIES
- LINK_DEPENDS "${TEACHOS_KERNEL_LINKER_SCRIPT}"
+target_link_libraries("x86_64" PUBLIC
+ "os::kapi"
+ "libs::multiboot2"
)
-#[============================================================================[
-# The Bootstrap Library
-#]============================================================================]
+target_sources("x86_64" PRIVATE
+ # Low-level bootstrap
+ "src/boot/boot32.S"
+ "src/boot/entry64.s"
+ "src/boot/initialize_runtime.cpp"
+ "src/boot/multiboot.s"
-target_sources("_boot" PRIVATE
- "src/boot/boot.s"
- "src/boot/crti.s"
- "src/boot/crtn.s"
- "src/boot/multiboot.s"
-)
+ # api::kapi implementation
+ "src/kapi/cio.cpp"
+ "src/kapi/cpu.cpp"
+ "src/kapi/memory.cpp"
-#[============================================================================[
-# The Video Library
-#]============================================================================]
+ # Memory management
+ "src/memory/kernel_mapper.cpp"
+ "src/memory/mmu.cpp"
+ "src/memory/page_table.cpp"
+ "src/memory/paging_root.cpp"
+ "src/memory/recursive_page_mapper.cpp"
+ "src/memory/region_allocator.cpp"
+ "src/memory/scoped_mapping.cpp"
-target_sources("_video" PRIVATE
- "src/video/vga/text.cpp"
+ # VGA text mode
+ "src/vga/text.cpp"
)
-#[============================================================================[
-# The Memory Library
-#]============================================================================]
+file(GLOB_RECURSE ARCH_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp")
-target_sources("_memory" PRIVATE
- "src/memory/main.cpp"
- "src/memory/multiboot/elf_symbols_section.cpp"
- "src/memory/multiboot/reader.cpp"
- "src/memory/allocator/area_frame_allocator.cpp"
- "src/memory/allocator/tiny_frame_allocator.cpp"
- "src/memory/allocator/physical_frame.cpp"
- "src/memory/paging/page_entry.cpp"
- "src/memory/paging/page_table.cpp"
- "src/memory/paging/temporary_page.cpp"
- "src/memory/paging/virtual_page.cpp"
- "src/memory/paging/active_page_table.cpp"
- "src/memory/paging/inactive_page_table.cpp"
- "src/memory/heap/bump_allocator.cpp"
- "src/memory/heap/user_heap_allocator.cpp"
- "src/memory/heap/memory_block.cpp"
- "src/memory/heap/linked_list_allocator.cpp"
- "src/memory/heap/global_heap_allocator.cpp"
+target_sources("x86_64" PUBLIC
+ FILE_SET HEADERS
+ BASE_DIRS "include"
+ FILES ${ARCH_HEADERS}
)
-#[============================================================================[
-# The STL Library
-#]============================================================================]
-
-target_sources("_stl" PRIVATE
- "src/stl/mutex.cpp"
-)
-
-#[============================================================================[
-# The Exception handling Library
-#]============================================================================]
-
-target_sources("_exception" PRIVATE
- "src/exception_handling/assert.cpp"
- "src/exception_handling/abort.cpp"
- "src/exception_handling/panic.cpp"
- "src/exception_handling/pure_virtual.cpp"
-)
-
-#[============================================================================[
-# The Context switching Library
-#]============================================================================]
-
-target_sources("_context" PRIVATE
- "src/context_switching/segment_descriptor_table/access_byte.cpp"
- "src/context_switching/segment_descriptor_table/gdt_flags.cpp"
- "src/context_switching/segment_descriptor_table/global_descriptor_table_pointer.cpp"
- "src/context_switching/segment_descriptor_table/global_descriptor_table.cpp"
- "src/context_switching/segment_descriptor_table/segment_descriptor_base.cpp"
- "src/context_switching/segment_descriptor_table/segment_descriptor_extension.cpp"
- "src/context_switching/main.cpp"
- "src/context_switching/syscall/main.cpp"
- "src/context_switching/syscall/syscall_enable.cpp"
- "src/context_switching/syscall/syscall_handler.cpp"
- "src/context_switching/interrupt_descriptor_table/gate_descriptor.cpp"
- "src/context_switching/interrupt_descriptor_table/idt_flags.cpp"
- "src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table_pointer.cpp"
- "src/context_switching/interrupt_descriptor_table/interrupt_descriptor_table.cpp"
- "src/context_switching/interrupt_descriptor_table/ist_offset.cpp"
- "src/context_switching/interrupt_descriptor_table/segment_selector.cpp"
+set(KERNEL_LINKER_SCRIPT
+ "${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld"
+ PARENT_SCOPE
)
-
-#[============================================================================[
-# The Interrupt Handlers
-#]============================================================================]
-
-target_sources("_interrupt_handling" PRIVATE
- "src/interrupt_handling/generic_interrupt_handler.cpp"
-)
-
-#[============================================================================[
-# The User code
-#]============================================================================]
-
-target_sources("_context" PRIVATE
- "src/user/main.cpp"
-)
-
-#[============================================================================[
-# The Bootable ISO Image
-#]============================================================================]
-
-find_package("grub-mkrescue")
-
-if(grub-mkrescue_FOUND)
- file(GENERATE
- OUTPUT "isofs/boot/grub/grub.cfg"
- INPUT "support/grub.cfg.in"
- )
-
- add_custom_target("bootable-iso"
- COMMAND "${GRUB_MKRESCUE_EXE}"
- "-o"
- "${PROJECT_BINARY_DIR}/teachos-$<CONFIGURATION>.iso"
- "${CMAKE_CURRENT_BINARY_DIR}/isofs"
- "$<TARGET_FILE:teachos::kernel>"
- "2>/dev/null"
- DEPENDS
- "$<TARGET_FILE:teachos::kernel>"
- "isofs/boot/grub/grub.cfg"
- BYPRODUCTS "${PROJECT_BINARY_DIR}/teachos-$<CONFIGURATION>.iso"
- COMMENT "Creating bootable ISO image"
- )
-endif()