From 675a6de47e67fd41cb87e274bdfb795d5864a34f Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 19 May 2025 22:01:12 +0100 Subject: [PATCH] build: add build script to configure kernel and tools build systems --- CMakeLists.txt | 17 +++++++++++------ arch/x86_64/config.cmake | 5 +++++ arch/x86_64/toolchain.cmake | 2 +- build.sh | 37 +++++++++++++++++++++++++++++++++++++ tools/CMakeLists.txt | 2 +- 5 files changed, 55 insertions(+), 8 deletions(-) create mode 100755 build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index e5bf035..239ef9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,16 @@ 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(kernel_name "Magenta") -set(kernel_exe_name "magenta_kernel") +set(kernel_arch x86_64) + +set(kernel_name "Mango") +set(kernel_exe_name "mango_kernel") set(generic_src_dirs ds init kernel libc obj sched util vm) set(kernel_sources "") @@ -19,7 +25,6 @@ foreach (dir ${generic_src_dirs}) 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) @@ -33,8 +38,8 @@ add_executable(${kernel_exe_name} ${arch_sources_asm} ${arch_headers}) -target_include_directories(${kernel_exe_name} PRIVATE - include +target_include_directories(${kernel_exe_name} PRIVATE + include libc/include arch/${kernel_arch}/include) target_compile_options(${kernel_exe_name} PRIVATE diff --git a/arch/x86_64/config.cmake b/arch/x86_64/config.cmake index d167236..3c91d6a 100644 --- a/arch/x86_64/config.cmake +++ b/arch/x86_64/config.cmake @@ -3,3 +3,8 @@ target_compile_options(${kernel_exe_name} PRIVATE -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") +add_custom_command(TARGET ${kernel_exe_name} POST_BUILD + COMMAND ${BUILD_TOOLS_DIR}/e64patch $ + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Patching kernel elf64 image" +) diff --git a/arch/x86_64/toolchain.cmake b/arch/x86_64/toolchain.cmake index 33e0c39..e6818cd 100644 --- a/arch/x86_64/toolchain.cmake +++ b/arch/x86_64/toolchain.cmake @@ -1,5 +1,5 @@ # 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++ set(CMAKE_C_COMPILER x86_64-elf-gcc) diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..0a657c9 --- /dev/null +++ b/build.sh @@ -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 diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index a473217..b4562a4 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.13) -project(magenta-tools C) +project(mango-tools C) set(tool_dirs e64patch)