This is the first time I've actually dropped liballoc in favor of writing my own implementation. Usually, malloc() and such looked so complicated that I preferred to let a nice external library do the job. But I've decided to try writing my own allocator, and now we have heap memory without any 3rd party code!
61 lines
2.0 KiB
CMake
61 lines
2.0 KiB
CMake
set(SOURCES
|
|
src/main.cpp
|
|
src/video/Framebuffer.cpp
|
|
src/memory/MemoryManager.cpp
|
|
src/memory/Heap.cpp
|
|
src/boot/Init.cpp
|
|
src/arch/Serial.cpp
|
|
src/arch/Timer.cpp
|
|
)
|
|
|
|
if("${ARCH}" MATCHES "x86_64")
|
|
set(SOURCES
|
|
${SOURCES}
|
|
src/arch/x86_64/IO.cpp
|
|
src/arch/x86_64/Serial.cpp
|
|
src/arch/x86_64/MMU.cpp
|
|
src/arch/x86_64/CPU.cpp
|
|
src/arch/x86_64/Timer.cpp
|
|
)
|
|
endif()
|
|
|
|
add_executable(moon ${SOURCES})
|
|
|
|
if("${ARCH}" MATCHES "x86_64")
|
|
set(ASM_SOURCES
|
|
src/arch/x86_64/CPU.asm
|
|
src/arch/x86_64/Entry.asm
|
|
)
|
|
add_library(moon-asm STATIC ${ASM_SOURCES})
|
|
target_link_libraries(moon moon-asm)
|
|
endif()
|
|
|
|
target_link_libraries(moon luna-freestanding)
|
|
|
|
target_compile_definitions(moon PRIVATE IN_MOON)
|
|
|
|
target_compile_options(moon PRIVATE -Os)
|
|
|
|
target_compile_options(moon PRIVATE -Wall -Wextra -Werror -Wvla)
|
|
target_compile_options(moon PRIVATE -Wdisabled-optimization -Wformat=2 -Winit-self)
|
|
target_compile_options(moon PRIVATE -Wmissing-include-dirs -Wswitch-default -Wcast-qual -Wundef)
|
|
target_compile_options(moon PRIVATE -Wcast-align -Wwrite-strings -Wlogical-op -Wredundant-decls -Wshadow -Wconversion)
|
|
target_compile_options(moon PRIVATE -fno-rtti -ffreestanding -fno-exceptions)
|
|
target_compile_options(moon PRIVATE -fno-asynchronous-unwind-tables -fno-omit-frame-pointer)
|
|
target_compile_options(moon PRIVATE -nostdlib -mcmodel=kernel)
|
|
|
|
if("${ARCH}" MATCHES "x86_64")
|
|
target_compile_options(moon PRIVATE -mno-red-zone)
|
|
target_compile_options(moon PRIVATE -mno-80387 -mno-mmx -mno-sse -mno-sse2)
|
|
target_link_options(moon PRIVATE -mno-red-zone)
|
|
endif()
|
|
|
|
target_link_options(moon PRIVATE -lgcc -Wl,--build-id=none -z max-page-size=0x1000 -mcmodel=kernel)
|
|
|
|
set_target_properties(moon PROPERTIES CXX_STANDARD 20)
|
|
|
|
target_include_directories(moon PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src)
|
|
|
|
target_link_options(moon PRIVATE LINKER:-T ${CMAKE_CURRENT_LIST_DIR}/moon.ld -nostdlib -nodefaultlibs)
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/moon" DESTINATION ${LUNA_ROOT}/initrd/boot) |