meta: replace cmake mono-build system with a custom build co-ordinator

every system component now has its own self-contained build system, and a
seed file describing the component and its build system and dependencies.

a new tool, meadow, collects and uses these seed files to build the
components into a full system. meadow also manages the target system root
and a host prefix where toolchain tools are installed to.

the build system has also been updated to use a new $ARCH-rosetta-gcc
compiler, and the patches files necessary to build it have been
added to toolchain/cross-compiler.
This commit is contained in:
2026-07-19 13:34:32 +01:00
parent 59034be9e6
commit 1ec33767ab
104 changed files with 7111 additions and 257 deletions
+35 -5
View File
@@ -1,10 +1,12 @@
set(CMAKE_SYSTEM_NAME Rosetta)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
#set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
set(CMAKE_C_COMPILER_WORKS TRUE)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
find_program(C_COMPILER x86_64-elf-gcc REQUIRED)
find_program(CXX_COMPILER x86_64-elf-g++ REQUIRED)
find_program(C_COMPILER x86_64-rosetta-gcc REQUIRED)
find_program(CXX_COMPILER x86_64-rosetta-g++ REQUIRED)
#find_program(ASM_COMPILER x86_64-elf-as REQUIRED)
add_compile_definitions(__magenta__=1 __rosetta__=1)
@@ -13,17 +15,45 @@ set(CMAKE_C_COMPILER ${C_COMPILER})
set(CMAKE_CXX_COMPILER ${CXX_COMPILER})
#set(CMAKE_ASM_COMPILER ${ASM_COMPILER})
SET(CMAKE_C_FLAGS "-ffreestanding -nostdlib -z max-page-size=0x1000 -m64 -mcmodel=large -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -D_64BIT -DBYTE_ORDER=1234" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-shared" CACHE STRING "" FORCE)
SET(CMAKE_C_FLAGS "-z max-page-size=0x1000 -m64 -mcmodel=large -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -D_64BIT -DBYTE_ORDER=1234" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "-shared" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--unresolved-symbols=report-all,--dynamic-linker=/lib/ld64.so" CACHE STRING "" FORCE)
set(CMAKE_C_LINK_OPTIONS_PIE "-pie")
set(CMAKE_C_LINK_PIE_SUPPORTED TRUE)
set(CMAKE_C_LINK_NO_PIE_SUPPORTED TRUE)
SET(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")
if ("$ENV{ROSETTA_SYSROOT}" STREQUAL "")
message(FATAL_ERROR "No system root has been specified. Please define the $ROSETTA_SYSROOT environment variable")
endif ()
set(CMAKE_SYSROOT $ENV{ROSETTA_SYSROOT})
set(CMAKE_SYSTEM_LIBRARY_PATH
$ENV{ROSETTA_SYSROOT}/lib
$ENV{ROSETTA_SYSROOT}/usr/lib)
set(CMAKE_C_OUTPUT_EXTENSION .o)
set(CMAKE_CXX_OUTPUT_EXTENSION .o)
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set(CMAKE_DL_LIBS "dl")
set(CMAKE_INSTALL_RPATH \$ORIGIN/../lib)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
#set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
#set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN")
set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
set(CMAKE_C_LINK_GROUP_USING_cross_refs_SUPPORTED TRUE)
set(CMAKE_C_LINK_GROUP_USING_cross_refs
"LINKER:--start-group"
"LINKER:--end-group"
)
set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
link_libraries(-lgcc)
+7
View File
@@ -0,0 +1,7 @@
[seed]
name = 'cdrom'
[build]
build_system = 'cmake'
# vim: ft=toml
+5
View File
@@ -0,0 +1,5 @@
[command]
name = 'debug'
description = 'Run the system under a debugger'
# vim: ft=toml
+12
View File
@@ -0,0 +1,12 @@
[command]
name = 'run-kernel'
description = 'Run the kernel image directly under QEMU'
[dependency]
commands = [ 'qemu-system-x86_64' ]
seeds = [ 'magenta', 'bsp' ]
[exec]
args = [ 'src:run-kernel.py']
# vim: ft=toml
+30
View File
@@ -0,0 +1,30 @@
import os
import shutil
import subprocess
sysroot = os.environ['MEADOW_SYSROOT']
native_root = os.environ['MEADOW_NATIVE_ROOT']
tmp = os.environ['MEADOW_TEMP']
bsp = os.path.join(sysroot, 'boot', 'rosetta-system.bsp')
kernel_exe = os.path.join(sysroot, 'boot', 'magenta_kernel')
kernel_exe_elf32 = os.path.join(tmp, 'magenta_kernel.elf32')
e64patch = os.path.join(native_root, 'bin', 'e64patch')
shutil.copyfile(kernel_exe, kernel_exe_elf32)
subprocess.run([ e64patch, kernel_exe_elf32 ])
qemu_args = [
'qemu-system-x86_64',
'-m', '128M',
'-cpu', 'qemu64,+rdrand',
'-kernel', kernel_exe_elf32,
'-initrd', bsp,
'-serial', 'stdio',
'--append', 'kernel.early-console=ttyS0'
]
try:
subprocess.run(qemu_args)
except KeyboardInterrupt:
pass
+19
View File
@@ -0,0 +1,19 @@
[platform]
name = 'x86_64-pc'
arch = 'x86_64'
[cmake]
module_paths = [ '.' ]
system_name = 'Rosetta'
toolchain_file = 'Platform/Rosetta.cmake'
[extension]
commands = [
'command/run-kernel.command',
]
seeds = [
'cdrom.seed'
]
# vim: ft=toml