acadia/zion/CMakeLists.txt

44 lines
1.5 KiB
CMake
Raw Normal View History

add_executable(zion
boot/boot_info.cpp
common/gdt.cpp
common/load_gdt.s
2023-05-17 20:42:59 -07:00
debug/debug.cpp
interrupt/interrupt.cpp
interrupt/interrupt_enter.s
memory/kernel_heap.cpp
2023-05-18 01:18:51 -07:00
memory/paging_util.cpp
zion.cpp)
2023-05-17 20:42:59 -07:00
target_include_directories(zion
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
# -c -- Don't run the linker (only necessary for the assembler)
# -ffreestanding
# -nostdlib -- Don't include the standard library.
# -mabi=sysv -- Explicitly specify the ABI since we will rely on it.
# -mno-red-zone -- Don't put data below the stack pointer (clobbered by interrupts).
# -mcmodel=kernel -- Assume the kernel code is running in the higher half.
# -mgeneral-regs-only -- Prevent GCC from using a whole host of nonsense registers (that we have to enable).
set(_Z_COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -c -ffreestanding -nostdlib -mabi=sysv -mno-red-zone -mcmodel=kernel -mgeneral-regs-only")
set(_Z_LINK_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/linker.ld")
# -lgcc -- Link against gcc internals. Not sure if necessary.
# -nostdlib -- Don't try to link against the stdlib.
# -nostartfiles -- Don't try to link against crt0.s
# -static -- Prevent trying something with shared libraries (probably irrelevant).
# -z max-page-size=0x1000 -- Assume 4 KiB Pages.
set(_Z_LINK_FLAGS "-T ${_Z_LINK_SCRIPT} -lgcc -nostdlib -nostartfiles -static -z max-page-size=0x1000")
# Don't try to dynamically link.
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
set_target_properties(zion
PROPERTIES
COMPILE_FLAGS "${_Z_COMPILE_FLAGS}"
LINK_FLAGS "${_Z_LINK_FLAGS}"
)