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.txt64
1 files changed, 64 insertions, 0 deletions
diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt
new file mode 100644
index 0000000..6ff1332
--- /dev/null
+++ b/arch/x86_64/CMakeLists.txt
@@ -0,0 +1,64 @@
+#[============================================================================[
+# 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"
+)
+
+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 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()