build: add build script to configure kernel and tools build systems

This commit is contained in:
2025-05-19 22:01:12 +01:00
parent 4d12cab7f7
commit 675a6de47e
5 changed files with 55 additions and 8 deletions

View File

@@ -1,10 +1,16 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
project(magenta C ASM) project(mango C ASM)
if (NOT BUILD_TOOLS_DIR)
message(FATAL_ERROR "No build tools directory specified. Please run build.sh")
endif ()
set(CMAKE_C_STANDARD 17) set(CMAKE_C_STANDARD 17)
set(kernel_name "Magenta") set(kernel_arch x86_64)
set(kernel_exe_name "magenta_kernel")
set(kernel_name "Mango")
set(kernel_exe_name "mango_kernel")
set(generic_src_dirs ds init kernel libc obj sched util vm) set(generic_src_dirs ds init kernel libc obj sched util vm)
set(kernel_sources "") set(kernel_sources "")
@@ -19,7 +25,6 @@ foreach (dir ${generic_src_dirs})
set(kernel_headers ${kernel_headers} ${dir_headers}) set(kernel_headers ${kernel_headers} ${dir_headers})
endforeach (dir) endforeach (dir)
set(kernel_arch x86_64)
file(GLOB_RECURSE arch_sources_c arch/${kernel_arch}/*.c) file(GLOB_RECURSE arch_sources_c arch/${kernel_arch}/*.c)
file(GLOB_RECURSE arch_sources_asm arch/${kernel_arch}/*.S) file(GLOB_RECURSE arch_sources_asm arch/${kernel_arch}/*.S)
file(GLOB_RECURSE arch_headers arch/${kernel_arch}/*.h) file(GLOB_RECURSE arch_headers arch/${kernel_arch}/*.h)
@@ -33,8 +38,8 @@ add_executable(${kernel_exe_name}
${arch_sources_asm} ${arch_sources_asm}
${arch_headers}) ${arch_headers})
target_include_directories(${kernel_exe_name} PRIVATE target_include_directories(${kernel_exe_name} PRIVATE
include include
libc/include libc/include
arch/${kernel_arch}/include) arch/${kernel_arch}/include)
target_compile_options(${kernel_exe_name} PRIVATE target_compile_options(${kernel_exe_name} PRIVATE

View File

@@ -3,3 +3,8 @@ target_compile_options(${kernel_exe_name} PRIVATE
-mno-sse -mno-sse2 -D_64BIT -DBYTE_ORDER=1234) -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") target_link_libraries(${kernel_exe_name} "-z max-page-size=0x1000" "-T ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86_64/layout.ld")
add_custom_command(TARGET ${kernel_exe_name} POST_BUILD
COMMAND ${BUILD_TOOLS_DIR}/e64patch $<TARGET_FILE:${kernel_exe_name}>
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Patching kernel elf64 image"
)

View File

@@ -1,5 +1,5 @@
# the name of the target operating system # the name of the target operating system
set(CMAKE_SYSTEM_NAME Magenta) set(CMAKE_SYSTEM_NAME Mango)
# which compilers to use for C and C++ # which compilers to use for C and C++
set(CMAKE_C_COMPILER x86_64-elf-gcc) set(CMAKE_C_COMPILER x86_64-elf-gcc)

37
build.sh Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
arch=$1
tools_src_dir="$(pwd)/tools"
kernel_src_dir="$(pwd)"
tools_build_dir="$(pwd)/build/tools"
kernel_build_dir="$(pwd)/build"
bin_dir="$kernel_build_dir/bin"
lib_dir="$kernel_build_dir/lib"
if [[ -z "$arch" ]]; then
echo "No architecture specified."
exit -1
fi
rm -rf $kernel_build_dir
mkdir -p $tools_build_dir
mkdir -p $kernel_build_dir
pushd $tools_build_dir
cmake \
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY="$bin_dir" \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY="$lib_dir" \
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY="$lib_dir" \
$tools_src_dir
ninja
popd
pushd $kernel_build_dir
cmake \
-DBUILD_TOOLS_DIR="$bin_dir" \
-DCMAKE_TOOLCHAIN_FILE="$kernel_src_dir/arch/$arch/toolchain.cmake" \
$kernel_src_dir
ninja
popd

View File

@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
project(magenta-tools C) project(mango-tools C)
set(tool_dirs e64patch) set(tool_dirs e64patch)