build: add build script to configure kernel and tools build systems
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
)
|
||||||
|
|||||||
@@ -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
37
build.sh
Executable 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
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user