CMakeLists.txt 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. src/asm/interrupt.s
  10. src/asm/port_io.s
  11. )
  12. add_library(bootloader STATIC ${BOOTLOADER_SOURCES})
  13. add_custom_command(OUTPUT extracted_bootloader
  14. DEPENDS bootloader
  15. COMMAND ar xf ${PROJECT_BINARY_DIR}/libbootloader.a --output=${EXTRACT_DIR}
  16. )
  17. project(kernel_main)
  18. set(CMAKE_C_FLAGS "-nostdinc -m32 -nostdlib -Wall -Wextra -fverbose-asm -fno-exceptions -fno-pic -fno-stack-protector")
  19. set(CMAKE_CXX_FLAGS "-nostdinc -m32 -nostdlib -Wall -Wextra -fverbose-asm -fno-exceptions -fno-pic -fno-stack-protector")
  20. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  21. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g")
  22. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g")
  23. elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
  24. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O")
  25. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O")
  26. endif()
  27. include_directories(${PROJECT_SOURCE_DIR}/include)
  28. set(KERNEL_MAIN_SOURCES src/kernel_main.c
  29. src/kernel/errno.c
  30. src/kernel/interrupt.c
  31. src/kernel/stdio.c
  32. src/kernel/mem.c
  33. src/kernel/vga.c
  34. src/kernel/hw/keyboard.c
  35. src/types/buffer.c
  36. include/asm/boot.h
  37. include/asm/port_io.h
  38. include/kernel/errno.h
  39. include/kernel/interrupt.h
  40. include/kernel/stdio.h
  41. include/kernel/mem.h
  42. include/kernel/vga.h
  43. include/kernel/hw/keyboard.h
  44. include/types/buffer.h
  45. include/types/types.h
  46. include/types/size.h
  47. include/types/stdint.h
  48. include/types/list.hpp
  49. include/kernel_main.h
  50. )
  51. add_library(kernel_main STATIC ${KERNEL_MAIN_SOURCES})
  52. add_custom_command(OUTPUT extracted_kernel_main
  53. DEPENDS kernel_main
  54. COMMAND ar xf ${PROJECT_BINARY_DIR}/libkernel_main.a --output=${EXTRACT_DIR}
  55. )
  56. add_custom_target(kernel.out
  57. DEPENDS extracted_bootloader
  58. DEPENDS extracted_kernel_main
  59. COMMAND ld -T ${CMAKE_SOURCE_DIR}/ldscript.ld ${EXTRACT_DIR}/*.o
  60. -melf_i386 -o ${CMAKE_BINARY_DIR}/kernel.out
  61. )
  62. add_custom_target(boot.img
  63. DEPENDS kernel.out
  64. COMMAND objcopy --strip-debug -O binary
  65. ${CMAKE_BINARY_DIR}/kernel.out boot.img)
  66. add_custom_command(OUTPUT run
  67. POST_BUILD
  68. DEPENDS boot.img
  69. COMMAND bochs -f ${CMAKE_SOURCE_DIR}/bochs.conf
  70. )