aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/CMakeLists.txt
blob: 25f86341dbacbae1e69e3289b4613e9b8a25eab4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#[============================================================================[
# 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 Memory Library
#]============================================================================]

target_sources("_memory" PRIVATE
  "src/memory/multiboot.cpp"
  "src/memory/frame_allocator.cpp"
  "src/memory/paging.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()