|
@@ -1,35 +1,12 @@
|
|
|
cmake_minimum_required(VERSION 3.15)
|
|
|
-project(my_os_bootloader ASM)
|
|
|
-
|
|
|
-set(CMAKE_ASM_FLAGS "-m32")
|
|
|
+project(kernel_main C CXX ASM)
|
|
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
|
-set(EXTRACT_DIR ${PROJECT_BINARY_DIR}/extract)
|
|
|
-file(MAKE_DIRECTORY ${EXTRACT_DIR})
|
|
|
-
|
|
|
-set(BOOTLOADER_SOURCES src/boot.s
|
|
|
- src/asm/a20.s
|
|
|
- src/asm/interrupt.s
|
|
|
- src/asm/port_io.s
|
|
|
- src/asm/sys.s
|
|
|
- )
|
|
|
-
|
|
|
-add_library(bootloader STATIC ${BOOTLOADER_SOURCES})
|
|
|
-
|
|
|
-add_custom_command(OUTPUT mbr.bin
|
|
|
- DEPENDS ${PROJECT_SOURCE_DIR}/src/mbr.S ${PROJECT_SOURCE_DIR}/src/mbr.ld
|
|
|
- COMMAND ${CMAKE_ASM_COMPILER} -m32 -c ${PROJECT_SOURCE_DIR}/src/mbr.S -o mbr.o
|
|
|
- COMMAND ${CMAKE_LINKER} -T ${PROJECT_SOURCE_DIR}/src/mbr.ld mbr.o -o mbr.bin
|
|
|
-)
|
|
|
-
|
|
|
-add_custom_command(OUTPUT extracted_bootloader
|
|
|
- DEPENDS bootloader
|
|
|
- COMMAND ${CMAKE_AR} xf ${PROJECT_BINARY_DIR}/libbootloader.a --output=${EXTRACT_DIR}
|
|
|
-)
|
|
|
-
|
|
|
-project(kernel_main)
|
|
|
+set(CMAKE_CXX_LINK_EXECUTABLE
|
|
|
+ "<CMAKE_LINKER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
|
|
|
|
|
+set(CMAKE_ASM_FLAGS "-m32")
|
|
|
set(CMAKE_C_FLAGS "-nostdinc -m32 -nostdlib -W -Wall -Wextra -Wno-builtin-declaration-mismatch -Wno-format -Werror=implicit-int -Werror=implicit-function-declaration -Werror=strict-aliasing -fverbose-asm -fno-exceptions -fno-pic -ffreestanding -mstack-protector-guard=global")
|
|
|
set(CMAKE_CXX_FLAGS "-nostdinc -m32 -nostdlib -W -Wall -Wextra -Wno-builtin-declaration-mismatch -Wno-format -fverbose-asm -fno-use-cxa-atexit -fno-exceptions -fno-pic -ffreestanding -fno-rtti -mstack-protector-guard=global")
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
@@ -46,6 +23,15 @@ if (NOT DEFINED FDISK_BIN)
|
|
|
set(FDISK_BIN fdisk)
|
|
|
endif()
|
|
|
|
|
|
+add_subdirectory(gblibc)
|
|
|
+
|
|
|
+set(BOOTLOADER_SOURCES src/boot.s
|
|
|
+ src/asm/a20.s
|
|
|
+ src/asm/interrupt.s
|
|
|
+ src/asm/port_io.s
|
|
|
+ src/asm/sys.s
|
|
|
+ )
|
|
|
+
|
|
|
set(KERNEL_MAIN_SOURCES src/fs/fat.cpp
|
|
|
src/kernel_main.cpp
|
|
|
src/kernel/errno.c
|
|
@@ -106,31 +92,27 @@ set(KERNEL_MAIN_SOURCES src/fs/fat.cpp
|
|
|
include/kernel/log.hpp
|
|
|
include/kernel_main.hpp
|
|
|
)
|
|
|
-add_library(kernel_main STATIC ${KERNEL_MAIN_SOURCES})
|
|
|
-target_link_libraries(kernel_main gblibc)
|
|
|
-target_include_directories(kernel_main PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
|
|
-add_subdirectory(gblibc)
|
|
|
-
|
|
|
-add_custom_command(OUTPUT extracted_kernel_main
|
|
|
- DEPENDS kernel_main
|
|
|
- COMMAND ${CMAKE_AR} xf ${PROJECT_BINARY_DIR}/libkernel_main.a --output=${EXTRACT_DIR}
|
|
|
-)
|
|
|
|
|
|
add_custom_target(user_space_programs
|
|
|
COMMAND cp ${CMAKE_SOURCE_DIR}/user-space-program/Makefile.src ${CMAKE_SOURCE_DIR}/user-space-program/Makefile
|
|
|
COMMAND make -C ${CMAKE_SOURCE_DIR}/user-space-program CROSS_COMPILE=${TOOLCHAIN_PATH_AND_PREFIX} all
|
|
|
)
|
|
|
|
|
|
-add_custom_target(kernel.out
|
|
|
- DEPENDS extracted_bootloader
|
|
|
- DEPENDS extracted_kernel_main
|
|
|
- DEPENDS user_space_programs
|
|
|
- DEPENDS ${CMAKE_SOURCE_DIR}/src/kernel.ld
|
|
|
- COMMAND ${CMAKE_LINKER} -T ${CMAKE_SOURCE_DIR}/src/kernel.ld ${EXTRACT_DIR}/*.o
|
|
|
- -melf_i386 -o ${CMAKE_BINARY_DIR}/kernel.out -lgblibc -L${CMAKE_BINARY_DIR}/gblibc
|
|
|
+add_executable(kernel.out ${KERNEL_MAIN_SOURCES} ${BOOTLOADER_SOURCES})
|
|
|
+add_dependencies(kernel.out user_space_programs)
|
|
|
+target_link_libraries(kernel.out gblibc)
|
|
|
+target_include_directories(kernel.out PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
|
|
+target_link_options(kernel.out PRIVATE
|
|
|
+ -T ${CMAKE_SOURCE_DIR}/src/kernel.ld -melf_i386 -lgblibc -L${CMAKE_BINARY_DIR}/gblibc)
|
|
|
+set_target_properties(kernel.out PROPERTIES LINK_DEPENDS ${CMAKE_SOURCE_DIR}/src/kernel.ld)
|
|
|
+
|
|
|
+add_custom_command(OUTPUT mbr.bin
|
|
|
+ DEPENDS ${PROJECT_SOURCE_DIR}/src/mbr.S ${PROJECT_SOURCE_DIR}/src/mbr.ld
|
|
|
+ COMMAND ${CMAKE_ASM_COMPILER} -m32 -c ${PROJECT_SOURCE_DIR}/src/mbr.S -o mbr.o
|
|
|
+ COMMAND ${CMAKE_LINKER} -T ${PROJECT_SOURCE_DIR}/src/mbr.ld mbr.o -o mbr.bin
|
|
|
)
|
|
|
|
|
|
-add_custom_target(mbr_hole.bin
|
|
|
+add_custom_command(OUTPUT mbr_hole.bin
|
|
|
DEPENDS kernel.out
|
|
|
COMMAND ${CMAKE_OBJCOPY} --strip-debug -O binary ${CMAKE_BINARY_DIR}/kernel.out mbr_hole.bin
|
|
|
)
|