cmake_minimum_required(VERSION 3.2) project(kernel) set(CMAKE_ASM_NASM_OBJECT_FORMAT elf) enable_language(ASM_NASM) if (CMAKE_HOST_APPLE) set(CMAKE_C_COMPILER i386-elf-gcc) set(CMAKE_AR i386-elf-ar) set(CMAKE_RANLIB i386-elf-ranlib) endif() set(CMAKE_C_FLAGS "-m32 -std=c11 -ffreestanding -fno-pie -fshort-enums -Wall -Werror -Wno-error=unused-variable -Wno-error=attributes") # if clang: -Wno-error=unused-command-line-argument -nobuiltininc set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fno-builtin -nostdlib -nodefaultlibs") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-stack-protector") # FIXME generates bad code using `mov eax, large gs:14h`? set(CMAKE_C_FLAGS_DEBUG "-gdwarf-4 -DENABLE_DWARF") if (NOT CMAKE_HOST_APPLE) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=undefined") endif() set(CMAKE_C_FLAGS_RELEASE "-Os") include_directories(${CMAKE_SOURCE_DIR}/libc) set(SOURCE_FILES console descriptor_tables gdt.asm interrupt.asm isr main shell multiboot div64 elf dwarf stdio_impl bmp psf kmalloc arch/x86/mmu drivers/ports drivers/timer drivers/keyboard drivers/acpi drivers/serial drivers/vga drivers/ata drivers/pci drivers/pci_registry # drivers/i825xx fatfs/diskio fatfs/ff fatfs/ffconf.h fatfs/ffsystem fatfs/ffunicode fatfs/integer.h tests/tests.h tests/vector tests/fatfs tests/stdio tests/path tests/pages) if (${CMAKE_BUILD_TYPE} MATCHES "Debug") set(SOURCE_FILES ${SOURCE_FILES} debug/ubsan) endif () add_library(kernel STATIC ${SOURCE_FILES})