-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
94 lines (82 loc) · 3.37 KB
/
CMakeLists.txt
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
cmake_minimum_required(VERSION 3.28)
project(super VERSION 0.0.1 DESCRIPTION "SUPER UNIX. SUPER UNIX. SUPER UNIX.")
enable_language(ASM_NASM)
set(CMAKE_CXX_STANDARD 20)
add_executable(kernel)
target_sources(kernel PUBLIC
src/init.cxx
src/glue/stubs.cxx
src/glue/mem.cxx
src/amd64/handlers.asm
)
target_sources(kernel
PUBLIC FILE_SET CXX_MODULES FILES
src/au/util.cxx
src/au/types.cxx
src/au/array.cxx
src/au/require.cxx
src/au/integral.cxx
src/au/debug_info.cxx
src/au/optional.cxx
src/framebuffer.cxx
src/font.cxx
src/limine.cxx
src/kernel.cxx
src/fmt.cxx
src/amd64/gdt.cxx
src/amd64/init.cxx
src/amd64/idt.cxx
src/io.cxx
)
target_compile_features(kernel PRIVATE cxx_std_20)
target_compile_options(kernel PUBLIC $<$<COMPILE_LANGUAGE:C,CXX>:
-fno-stack-check
-fno-stack-protector
-fno-pic
-fno-pie
-fno-rtti
-fno-exceptions
-ffreestanding
-mabi=sysv
-mno-80387
-mno-mmx
-mno-3dnow
-mno-sse
-mno-sse2
-mno-ssse3
-mno-sse4
-mno-sse4a
-mno-sse4.1
-mno-sse4.2
-mno-avx
-mno-avx2
-mno-avx512f
-mno-red-zone
-msoft-float
-mcmodel=kernel
-masm=intel
-std=c++20
>)
target_link_options(kernel PUBLIC
-T${CMAKE_CURRENT_SOURCE_DIR}/link.ld
-nostdlib
-static
)
set(ISO_IMAGE ${PROJECT_NAME}.iso)
add_custom_command(OUTPUT ${ISO_IMAGE} DEPENDS kernel
COMMAND make -C ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot/limine
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/iso_root/EFI/BOOT
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/kernel ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/limine.cfg ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot/limine
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/limine-bios.sys ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot/limine
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/limine-bios-cd.bin ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot/limine
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/limine-uefi-cd.bin ${CMAKE_CURRENT_BINARY_DIR}/iso_root/boot/limine
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/BOOTX64.EFI ${CMAKE_CURRENT_BINARY_DIR}/iso_root/EFI/BOOT
COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/BOOTIA32.EFI ${CMAKE_CURRENT_BINARY_DIR}/iso_root/EFI/BOOT
COMMAND xorriso -as mkisofs -b boot/limine/limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot boot/limine/limine-uefi-cd.bin -efi-boot-part --efi-boot-image --protective-msdos-label ${CMAKE_CURRENT_BINARY_DIR}/iso_root -o ${CMAKE_CURRENT_BINARY_DIR}/${ISO_IMAGE}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/limine/limine bios-install ${CMAKE_CURRENT_BINARY_DIR}/${ISO_IMAGE}
)
add_custom_target(iso ALL DEPENDS ${ISO_IMAGE})
add_custom_target(run DEPENDS ${ISO_IMAGE} COMMAND qemu-system-x86_64 -no-reboot -no-shutdown -M q35 -m 2G -cdrom ${ISO_IMAGE})