aboutsummaryrefslogtreecommitdiff
path: root/source/arch/x86_64/CMakeLists.txt
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2023-10-11 14:43:50 +0200
committerFelix Morgner <felix.morgner@ost.ch>2023-10-11 14:43:50 +0200
commit74eaee0fcc7390d4290b41a2a92ee34346e2f7c2 (patch)
tree3a38f8dbe0c6b757167bc264cb68e3da145bd069 /source/arch/x86_64/CMakeLists.txt
parentf47bee5f51a73593d3594940663f56f2427f480b (diff)
downloadteachos-74eaee0fcc7390d4290b41a2a92ee34346e2f7c2.tar.xz
teachos-74eaee0fcc7390d4290b41a2a92ee34346e2f7c2.zip
teachos: restructure file layout
Diffstat (limited to 'source/arch/x86_64/CMakeLists.txt')
-rw-r--r--source/arch/x86_64/CMakeLists.txt66
1 files changed, 66 insertions, 0 deletions
diff --git a/source/arch/x86_64/CMakeLists.txt b/source/arch/x86_64/CMakeLists.txt
new file mode 100644
index 0000000..f917cd0
--- /dev/null
+++ b/source/arch/x86_64/CMakeLists.txt
@@ -0,0 +1,66 @@
+#[============================================================================[
+# 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)
+ set(ISO_FILE "${PROJECT_BINARY_DIR}/teachos.iso")
+
+ file(GENERATE
+ OUTPUT "isofs/boot/grub/grub.cfg"
+ INPUT "support/grub.cfg.in"
+ )
+
+ add_custom_target("bootable-iso"
+ COMMAND "${GRUB_MKRESCUE_EXE}"
+ "-o"
+ "${ISO_FILE}"
+ "${CMAKE_CURRENT_BINARY_DIR}/isofs"
+ "$<TARGET_FILE:teachos::kernel>"
+ "2>/dev/null"
+ DEPENDS
+ "$<TARGET_FILE:teachos::kernel>"
+ "isofs/boot/grub/grub.cfg"
+ BYPRODUCTS "${ISO_FILE}"
+ COMMENT "Creating bootable ISO image"
+ )
+endif()