build: convert build system to CMake
This commit is contained in:
48
CMakeLists.txt
Normal file
48
CMakeLists.txt
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(magenta C ASM)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 17)
|
||||||
|
|
||||||
|
set(kernel_name "Magenta")
|
||||||
|
set(kernel_exe_name "magenta_kernel")
|
||||||
|
|
||||||
|
set(generic_src_dirs ds init kernel libc obj sched util vm)
|
||||||
|
set(kernel_sources "")
|
||||||
|
set(kernel_headers "")
|
||||||
|
|
||||||
|
foreach (dir ${generic_src_dirs})
|
||||||
|
message(STATUS ${dir})
|
||||||
|
file(GLOB_RECURSE dir_sources ${dir}/*.c)
|
||||||
|
file(GLOB_RECURSE dir_headers ${dir}/*.h)
|
||||||
|
|
||||||
|
set(kernel_sources ${kernel_sources} ${dir_sources})
|
||||||
|
set(kernel_headers ${kernel_headers} ${dir_headers})
|
||||||
|
endforeach (dir)
|
||||||
|
|
||||||
|
set(kernel_arch x86_64)
|
||||||
|
file(GLOB_RECURSE arch_sources_c arch/${kernel_arch}/*.c)
|
||||||
|
file(GLOB_RECURSE arch_sources_asm arch/${kernel_arch}/*.S)
|
||||||
|
file(GLOB_RECURSE arch_headers arch/${kernel_arch}/*.h)
|
||||||
|
|
||||||
|
set_property(SOURCE ${arch_sources_asm} PROPERTY LANGUAGE C)
|
||||||
|
|
||||||
|
add_executable(${kernel_exe_name}
|
||||||
|
${kernel_sources}
|
||||||
|
${kernel_headers}
|
||||||
|
${arch_sources_c}
|
||||||
|
${arch_sources_asm}
|
||||||
|
${arch_headers})
|
||||||
|
|
||||||
|
target_include_directories(${kernel_exe_name} PRIVATE
|
||||||
|
include
|
||||||
|
libc/include
|
||||||
|
arch/${kernel_arch}/include)
|
||||||
|
target_compile_options(${kernel_exe_name} PRIVATE
|
||||||
|
-nostdlib -ffreestanding
|
||||||
|
-Wall -Werror -pedantic -Wno-language-extension-token -Wno-unused-function -Wno-gnu-statement-expression
|
||||||
|
-O2 -g -fPIC -Iinclude -Iarch/${kernel_arch}/include -Ilibc/include)
|
||||||
|
target_link_libraries(${kernel_exe_name} -nostdlib -ffreestanding -lgcc)
|
||||||
|
target_compile_definitions(${kernel_exe_name} PRIVATE BUILD_ID="0")
|
||||||
|
|
||||||
|
include(arch/${kernel_arch}/config.cmake)
|
||||||
|
include(arch/${kernel_arch}/targets.cmake)
|
||||||
7
Makefile
7
Makefile
@@ -41,6 +41,13 @@ LIBC_SRC_DIRS := stdio string ctype
|
|||||||
LIBC_C_FILES := $(foreach dir,$(LIBC_SRC_DIRS),$(shell find libc/$(dir) -type f -name *.c))
|
LIBC_C_FILES := $(foreach dir,$(LIBC_SRC_DIRS),$(shell find libc/$(dir) -type f -name *.c))
|
||||||
LIBC_OBJ := $(addprefix $(BUILD_DIR)/,$(LIBC_C_FILES:.c=.o))
|
LIBC_OBJ := $(addprefix $(BUILD_DIR)/,$(LIBC_C_FILES:.c=.o))
|
||||||
|
|
||||||
|
####################################
|
||||||
|
# Userboot source files
|
||||||
|
####################################
|
||||||
|
|
||||||
|
USERBOOT_C_FILES := $(shell find userboot -type f -name *.c)
|
||||||
|
USERBOOT_OBJ := $(addprefix $(BUILD_DIR)/,$(USERBOOT_C_FILES:.c=.o))
|
||||||
|
|
||||||
BUILD_ID := $(shell tools/socks.buildid --arch $(SOCKS_ARCH))
|
BUILD_ID := $(shell tools/socks.buildid --arch $(SOCKS_ARCH))
|
||||||
|
|
||||||
CWARNINGS := -Wall -Werror -pedantic -Wno-language-extension-token -Wno-unused-function -Wno-gnu-statement-expression
|
CWARNINGS := -Wall -Werror -pedantic -Wno-language-extension-token -Wno-unused-function -Wno-gnu-statement-expression
|
||||||
|
|||||||
5
arch/x86_64/config.cmake
Normal file
5
arch/x86_64/config.cmake
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
target_compile_options(${kernel_exe_name} PRIVATE
|
||||||
|
-z max-page-size=0x1000 -m64 -mcmodel=large -mno-red-zone -mno-mmx
|
||||||
|
-mno-sse -mno-sse2 -D_64BIT -DBYTE_ORDER=1234)
|
||||||
|
target_link_libraries(${kernel_exe_name} "-z max-page-size=0x1000" "-T ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86_64/layout.ld")
|
||||||
|
|
||||||
7
arch/x86_64/targets.cmake
Normal file
7
arch/x86_64/targets.cmake
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
find_program(QEMU qemu-system-x86_64)
|
||||||
|
|
||||||
|
add_custom_target(run
|
||||||
|
USES_TERMINAL
|
||||||
|
COMMAND ${QEMU}
|
||||||
|
-kernel $<TARGET_FILE:${kernel_exe_name}>
|
||||||
|
-serial stdio)
|
||||||
18
arch/x86_64/toolchain.cmake
Normal file
18
arch/x86_64/toolchain.cmake
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# the name of the target operating system
|
||||||
|
set(CMAKE_SYSTEM_NAME Magenta)
|
||||||
|
|
||||||
|
# which compilers to use for C and C++
|
||||||
|
set(CMAKE_C_COMPILER x86_64-elf-gcc)
|
||||||
|
set(CMAKE_ASM_COMPILER x86_64-elf-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER x86_64-elf-g++)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER_WORKS TRUE)
|
||||||
|
set(CMAKE_CXX_COMPILER_WORKS TRUE)
|
||||||
|
|
||||||
|
# adjust the default behavior of the FIND_XXX() commands:
|
||||||
|
# search programs in the host environment
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
|
||||||
|
# search headers and libraries in the target environment
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
8
tools/CMakeLists.txt
Normal file
8
tools/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
project(magenta-tools C)
|
||||||
|
|
||||||
|
set(tool_dirs e64patch)
|
||||||
|
|
||||||
|
foreach (dir ${tool_dirs})
|
||||||
|
add_subdirectory(${dir})
|
||||||
|
endforeach (dir)
|
||||||
3
tools/e64patch/CMakeLists.txt
Normal file
3
tools/e64patch/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
file(GLOB sources *.c *.h)
|
||||||
|
|
||||||
|
add_executable(e64patch ${sources})
|
||||||
Reference in New Issue
Block a user