CMakeLists.txt 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. cmake_minimum_required(VERSION 3.15)
  2. project(my_os_bootloader ASM)
  3. set(CMAKE_ASM_FLAGS "-m32")
  4. include_directories(${PROJECT_SOURCE_DIR}/include)
  5. set(EXTRACT_DIR ${PROJECT_BINARY_DIR}/extract)
  6. file(MAKE_DIRECTORY ${EXTRACT_DIR})
  7. set(BOOTLOADER_SOURCES src/boot.s
  8. src/asm/a20.s
  9. )
  10. add_library(bootloader STATIC ${BOOTLOADER_SOURCES})
  11. add_custom_command(OUTPUT extracted_bootloader
  12. DEPENDS bootloader
  13. COMMAND ar xf ${PROJECT_BINARY_DIR}/libbootloader.a --output=${EXTRACT_DIR}
  14. )
  15. project(kernel_main)
  16. set(CMAKE_C_FLAGS "-nostdinc -m32 -nostdlib -Wall -O -fverbose-asm -fno-exceptions -fno-pic")
  17. include_directories(${PROJECT_SOURCE_DIR}/include)
  18. set(KERNEL_MAIN_SOURCES src/kernel_main.c
  19. include/asm/boot.h
  20. include/types/stdint.h
  21. include/kernel_main.h
  22. )
  23. add_library(kernel_main STATIC ${KERNEL_MAIN_SOURCES})
  24. add_custom_command(OUTPUT extracted_kernel_main
  25. DEPENDS kernel_main
  26. COMMAND ar xf ${PROJECT_BINARY_DIR}/libkernel_main.a --output=${EXTRACT_DIR}
  27. )
  28. add_custom_target(boot.img
  29. DEPENDS extracted_bootloader
  30. DEPENDS extracted_kernel_main
  31. COMMAND ld -T ${CMAKE_SOURCE_DIR}/ldscript.ld ${EXTRACT_DIR}/*.o
  32. -melf_i386 --oformat=binary -o ${CMAKE_BINARY_DIR}/boot.img
  33. )
  34. add_custom_command(OUTPUT run
  35. POST_BUILD
  36. DEPENDS boot.img
  37. COMMAND bochs -f ${CMAKE_SOURCE_DIR}/bochs.conf
  38. )