add_library("arch-x86_64" OBJECT) add_library("arch::x86_64" ALIAS "arch-x86_64") target_include_directories("arch-x86_64" PUBLIC "include" ) target_link_libraries("arch-x86_64" PUBLIC "arch::any" "os::kern" "libs::multiboot2" ) target_link_options("arch-x86_64" PUBLIC "-T${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld" ) set_target_properties("arch-x86_64" PROPERTIES LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld" ) #[============================================================================[ # arch::any Implementation #]============================================================================] target_sources("arch-x86_64" PRIVATE "src/io.cpp" "src/memory.cpp" "src/system.cpp" ) #[============================================================================[ # Bootstrap Code #]============================================================================] target_sources("arch-x86_64" PRIVATE "src/boot/boot.s" "src/boot/crti.s" "src/boot/crtn.s" "src/boot/multiboot.s" ) #[============================================================================[ # VGA Code #]============================================================================] target_sources("arch-x86_64" PRIVATE "src/vga/text.cpp" ) # #[============================================================================[ # # The Kernel Library # #]============================================================================] # 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}" # ) # set_target_properties("_kernel" PROPERTIES # LINK_DEPENDS "${TEACHOS_KERNEL_LINKER_SCRIPT}" # ) # #[============================================================================[ # # The Bootstrap Library # #]============================================================================] # target_sources("_boot" PRIVATE # "src/boot/boot.s" # "src/boot/crti.s" # "src/boot/crtn.s" # "src/boot/multiboot.s" # ) # #[============================================================================[ # # The Video Library # #]============================================================================] # target_sources("_video" PRIVATE # "src/video/vga/text.cpp" # ) # #[============================================================================[ # # The Memory Library # #]============================================================================] # 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_link_libraries("_memory" PUBLIC # "libs::kstd" # "libs::multiboot2" # ) # #[============================================================================[ # # 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" # ) # target_link_libraries("_context" PUBLIC # "libs::kstd" # ) # #[============================================================================[ # # 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-$.iso" # "${CMAKE_CURRENT_BINARY_DIR}/isofs" # "$" # "2>/dev/null" # DEPENDS # "$" # "isofs/boot/grub/grub.cfg" # BYPRODUCTS "${PROJECT_BINARY_DIR}/teachos-$.iso" # COMMENT "Creating bootable ISO image" # ) # endif()