CMakeLists.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. cmake_minimum_required(VERSION 3.15)
  2. project(my_os_bootloader ASM)
  3. set(CMAKE_ASM_FLAGS "-m32")
  4. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  5. include_directories(${PROJECT_SOURCE_DIR}/include)
  6. set(EXTRACT_DIR ${PROJECT_BINARY_DIR}/extract)
  7. file(MAKE_DIRECTORY ${EXTRACT_DIR})
  8. set(BOOTLOADER_SOURCES src/boot.s
  9. src/asm/a20.s
  10. src/asm/interrupt.s
  11. src/asm/port_io.s
  12. src/asm/sys.s
  13. )
  14. add_library(bootloader STATIC ${BOOTLOADER_SOURCES})
  15. add_custom_command(OUTPUT extracted_bootloader
  16. DEPENDS bootloader
  17. COMMAND ${CMAKE_AR} xf ${PROJECT_BINARY_DIR}/libbootloader.a --output=${EXTRACT_DIR}
  18. )
  19. project(kernel_main)
  20. set(CMAKE_C_FLAGS "-nostdinc -m32 -nostdlib -Wall -Wextra -Wno-builtin-declaration-mismatch -Wno-format -fverbose-asm -fno-exceptions -fno-pic -fno-stack-protector")
  21. set(CMAKE_CXX_FLAGS "-nostdinc -m32 -nostdlib -Wall -Wextra -Wno-builtin-declaration-mismatch -Wno-format -fverbose-asm -fno-use-cxa-atexit -fno-exceptions -fno-pic -fno-stack-protector")
  22. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  23. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g")
  24. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g")
  25. elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
  26. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O")
  27. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O")
  28. endif()
  29. include_directories(${PROJECT_SOURCE_DIR}/include)
  30. set(KERNEL_MAIN_SOURCES src/kernel_main.c
  31. src/kernel/errno.c
  32. src/kernel/interrupt.c
  33. src/kernel/process.c
  34. src/kernel/tty.c
  35. src/kernel/stdio.c
  36. src/kernel/mem.c
  37. src/kernel/vga.c
  38. src/kernel/hw/keyboard.cpp
  39. src/kernel/hw/serial.c
  40. src/kernel/hw/timer.c
  41. src/kernel/event/event.cpp
  42. src/types/bitmap.c
  43. src/types/buffer.c
  44. include/asm/boot.h
  45. include/asm/port_io.h
  46. include/asm/sys.h
  47. include/kernel/event/event.h
  48. include/kernel/errno.h
  49. include/kernel/tty.h
  50. include/kernel/interrupt.h
  51. include/kernel/process.h
  52. include/kernel/stdio.h
  53. include/kernel/mem.h
  54. include/kernel/vga.h
  55. include/kernel/hw/keyboard.h
  56. include/kernel/hw/serial.h
  57. include/kernel/hw/timer.h
  58. include/kernel/input/keycodes.h
  59. include/kernel/input/input_event.h
  60. include/types/bitmap.h
  61. include/types/buffer.h
  62. include/types/types.h
  63. include/types/size.h
  64. include/types/status.h
  65. include/types/stdint.h
  66. include/types/list.h
  67. include/types/list.hpp
  68. include/kernel_main.h
  69. )
  70. add_library(kernel_main STATIC ${KERNEL_MAIN_SOURCES})
  71. add_custom_command(OUTPUT extracted_kernel_main
  72. DEPENDS kernel_main
  73. COMMAND ${CMAKE_AR} xf ${PROJECT_BINARY_DIR}/libkernel_main.a --output=${EXTRACT_DIR}
  74. )
  75. add_custom_target(kernel.out
  76. DEPENDS extracted_bootloader
  77. DEPENDS extracted_kernel_main
  78. DEPENDS ${CMAKE_SOURCE_DIR}/ldscript.ld
  79. COMMAND ${CMAKE_LINKER} -T ${CMAKE_SOURCE_DIR}/ldscript.ld ${EXTRACT_DIR}/*.o
  80. -melf_i386 -o ${CMAKE_BINARY_DIR}/kernel.out
  81. )
  82. add_custom_target(boot.img
  83. DEPENDS kernel.out
  84. COMMAND ${CMAKE_OBJCOPY} --strip-debug -O binary
  85. ${CMAKE_BINARY_DIR}/kernel.out boot.img)
  86. add_custom_command(OUTPUT run
  87. POST_BUILD
  88. DEPENDS boot.img
  89. COMMAND bochs -f ${CMAKE_SOURCE_DIR}/bochs.conf
  90. )