Refactor builds to use target profiles and discovery; remove architecture checker

This commit is contained in:
Aaron committed 2026-11-07 20:50:04 +00:00
1 parent 6a1eb5e2ac
commit 7a6be7f66e
15 files changed
+238 -232

No files matched your search

-43
View File
@@ -1,43 +0,0 @@
#!/usr/bin/env python3
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Prevent shared Pascal units from selecting architecture implementations."""
from pathlib import Path
import re
import sys
cpu_directive = re.compile(r"\{\$\s*if(?:def|ndef)?\b[^}]*\bCPU\w*", re.I)
arch_import = re.compile(r"\barch\.(?:x86|x86_64)\.", re.I)
errors = []
for path in sorted(Path("src").rglob("*")):
if path.suffix not in (".pas", ".inc"):
continue
if path.parts[1] == "arch" and path.parts[2] != "common":
continue
source = path.read_text(encoding="utf-8")
# Ignore prose comments but retain compiler directives.
source = re.sub(r"\{(?!\$).*?\}|\(\*.*?\*\)|//[^\n]*", "", source, flags=re.S)
if cpu_directive.search(source):
errors.append(f"{path}: CPU conditional belongs in build selection")
# Existing i386-only services outside the port still import their drivers.
# The migrated units must depend on stable platform names instead.
migrated = path.as_posix() in {
"src/core/core.util.pas", "src/core/strings/core.strings.pas",
"src/io/io.stdio.pas", "src/proc/proc.mgr.pas",
"src/memory/memory.heap.pas", "src/memory/memory.raw.pas",
} or path.parts[1:3] == ("arch", "common")
if migrated and arch_import.search(source):
errors.append(f"{path}: shared unit imports an architecture implementation")
if errors:
print("\n".join(errors), file=sys.stderr)
sys.exit(1)
print("Shared architecture boundaries verified.")
+23 -66
View File
@@ -1,73 +1,30 @@
#!/usr/bin/env bash
# Multi-architecture build updates: Copyright 2026 Aaron Hance.
ERRCOUNT=0
echo " "
echo "======================="
echo " "
echo "Asuro Compilation"
echo " "
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
TOOLCHAIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$TOOLCHAIN_DIR/target.sh"
mkdir -p "$OBJ_DIR" "$BIN_DIR"
# Clean only this target's generated objects; preserve other architectures.
# Preserve generated objects belonging to other targets.
find "$OBJ_DIR" -maxdepth 1 -type f \( -name '*.o' -o -name '*.ppu' -o -name '*.a' \) -delete
runOrFail() {
local binary=$1
local errorText=$2
if $binary; then
echo "Success."
else
echo "$errorText"
ERRCOUNT=$((ERRCOUNT+1))
fi
}
declare -a run_steps=(
"compile_stub.sh" "Failed to compile stub!"
"compile_vergen.sh" "Versions failed to compile"
"compile_lvgl.sh" "Failed to compile LVGL!"
"compile_icons.sh" "Failed to generate icons!"
"compile_wasuro.sh" "Failed to pull Wasuro!"
"compile_sources.sh" "Failed to compile FPC Sources!"
"compile_initcalls.sh" "Failed to generate INITFINAL table!"
"compile_link.sh" "Failed linking!"
"compile_isogen.sh" "Failed to create ISO!"
"compile_docs.sh" "Failed to generate documentation!"
)
if [ "$ASURO_ARCH" = x86_64 ]; then
# Bootstrap milestone: no desktop/runtime dependencies until they are ported.
run_steps=(
"compile_stub.sh" "Failed to compile stub!"
"compile_sources.sh" "Failed to compile FPC Sources!"
"compile_link.sh" "Failed linking!"
"compile_isogen.sh" "Failed to create ISO!"
)
fi
for ((i=0; i<${#run_steps[@]}; i+=2))
do
if [ "$ERRCOUNT" -eq "0" ]
then
script="${TOOLCHAIN_DIR}/${run_steps[$i]}"
message="${run_steps[$i+1]}"
runOrFail "$script" "$message"
fi
for step in "${BUILD_STEPS[@]}"; do
if bash "$TOOLCHAIN_DIR/compile_$step.sh"; then
echo "Success."
else
echo "Failed build step: $step" >&2
if [ -n "$FINISH_SCRIPT" ]; then bash "$TOOLCHAIN_DIR/$FINISH_SCRIPT" failed; fi
exit 1
fi
done
#Call generate final artifacts based on failure or success of the above.
if [ "$ASURO_ARCH" = x86_64 ]; then
if [ "$ERRCOUNT" -ne 0 ]; then exit 1; fi
echo "No errors. Bootstrap image: $ISO_FILE"
exit 0
fi
if [ "$ERRCOUNT" -ne "0" ]
then
. "${TOOLCHAIN_DIR}/compile_finish.sh" "failed"
else
. "${TOOLCHAIN_DIR}/compile_finish.sh" "success"
fi
cd ..
if [ -n "$FINISH_SCRIPT" ]; then bash "$TOOLCHAIN_DIR/$FINISH_SCRIPT" success; fi
echo "No errors. Image: $ISO_FILE"
+6 -4
View File
@@ -3,10 +3,12 @@
# Runs gen_file_icons.py to produce asuro_icons_{32,64,128}.c in lvglh/,
# then compiles each into a .o in lib/ for linking.
set -e
# Target configuration updates: Copyright 2026 Aaron Hance.
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
TOOLCHAIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONF_DIR="$(pwd)/lvglh"
OUT_DIR="$(pwd)/lib"
OUT_DIR="$(pwd)/$OBJ_DIR"
FONT_CACHE="$(pwd)/img"
LVGL_DIR="/tmp/lvgl"
CACHE_DIR="/code/lvgl"
@@ -20,8 +22,8 @@ else
LVGL_INC="${CACHE_DIR}"
fi
CC="gcc"
CFLAGS="-m32 -march=i686 -ffreestanding \
CC="$C_COMPILER"
CFLAGS="-ffreestanding \
-fno-builtin -fno-stack-protector -fno-pic -fno-pie \
-O2 -Wall -Wno-unused-function -Wno-unused-variable \
-I${CONF_DIR} \
@@ -44,7 +46,7 @@ for src in "${CONF_DIR}"/asuro_icons_*.c; do
[ -f "$src" ] || continue
base="$(basename "${src%.c}")"
echo " Compiling ${base}.c ..."
if ! $CC $CFLAGS -c "$src" -o "${OUT_DIR}/${base}.o" 2>&1; then
if ! "$CC" "${C_TARGET_OPTIONS[@]}" $CFLAGS -c "$src" -o "${OUT_DIR}/${base}.o" 2>&1; then
echo " FAILED: ${base}.c"
ERRORS=$((ERRORS + 1))
fi
+10 -9
View File
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
# Target configuration updates: Copyright 2026 Aaron Hance.
set -e
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
echo " "
echo "======================="
echo " "
@@ -18,11 +21,9 @@ echo " "
INIT_SYMBOLS=()
for obj in lib/*.o; do
# Skip non-FPC objects that will never contain Pascal init sections
case "$(basename "$obj")" in
stub.o|splash_tga.o|initcalls.o) continue ;;
esac
for obj in "$OBJ_DIR/"*.o; do
[ -f "$obj" ] || continue
[ "$obj" = "$OBJ_DIR/initcalls.o" ] && continue
# nm --defined-only: only symbols defined in this object (not extern refs)
# grep ' T INIT\$_\$': global text symbols matching FPC's naming convention
@@ -35,7 +36,7 @@ done
COUNT=${#INIT_SYMBOLS[@]}
echo "Found $COUNT unit initialization section(s)."
CFILE="/tmp/initcalls.c"
CFILE="$BIN_DIR/initcalls.c"
# ---- Generate the C source file ----
@@ -99,6 +100,6 @@ cat "$CFILE"
echo "--- End of generated C source ---"
echo " "
# Compile to a 32-bit ELF object file
gcc -m32 -c -fno-pic -ffreestanding -o lib/initcalls.o "$CFILE"
echo "Compiled lib/initcalls.o"
# Compile for the selected target
"$C_COMPILER" "${C_TARGET_OPTIONS[@]}" -c -fno-pic -ffreestanding -o "$OBJ_DIR/initcalls.o" "$CFILE"
echo "Compiled $OBJ_DIR/initcalls.o"
+13 -7
View File
@@ -1,15 +1,21 @@
#!/usr/bin/env bash
# Multi-architecture build updates: Copyright 2026 Aaron Hance.
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
echo " "
echo "======================="
echo " "
echo "Creating ISO..."
echo " "
mkdir -p "$ISO_ROOT/boot/grub"
if [ "$ASURO_ARCH" != x86 ]; then
cp iso/boot/grub/grub.cfg "$ISO_ROOT/boot/grub/grub.cfg"
if [ "$(realpath "$GRUB_CONFIG")" != "$(realpath "$ISO_ROOT/boot/grub/grub.cfg")" ]; then
cp "$GRUB_CONFIG" "$ISO_ROOT/boot/grub/grub.cfg"
fi
cp "$BIN_DIR/kernel.bin" "$ISO_ROOT/boot/asuro.bin"
grub-mkrescue -o "$ISO_FILE" "$ISO_ROOT"
+27 -26
View File
@@ -1,31 +1,32 @@
#!/usr/bin/env bash
# Multi-architecture build updates: Copyright 2026 Aaron Hance.
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
echo " "
echo "======================="
echo " "
echo "Linking..."
echo " "
if [ "$ASURO_ARCH" = x86_64 ]; then
ld -m "$LD_FORMAT" --gc-sections --no-warn-execstack \
-T"$LINKER_SCRIPT" -o "$BIN_DIR/kernel.bin" "$OBJ_DIR/"*.o
grub-file --is-x86-multiboot "$BIN_DIR/kernel.bin"
exit
objects=()
boot_object="$OBJ_DIR/${ASM_ENTRY//\//_}"
boot_object="${boot_object%.asm}.o"
objects+=("$boot_object")
while IFS= read -r -d '' object; do
if [ "$object" != "$boot_object" ]; then objects+=("$object"); fi
done < <(find "$OBJ_DIR" -maxdepth 1 -type f -name '*.o' -print0 | LC_ALL=C sort -z)
libraries=()
while IFS= read -r -d '' library; do libraries+=("$library"); done \
< <(find "$OBJ_DIR" -maxdepth 1 -type f -name '*.a' -print0 | LC_ALL=C sort -z)
if "$LINK_COMPILER_RUNTIME"; then
libraries+=("$("$C_COMPILER" "${C_TARGET_OPTIONS[@]}" -print-libgcc-file-name)")
fi
objstring="";
for object in `find lib/ -maxdepth 1 -name "*.o"`; do
if [ "$object" != "lib/stub.o" ]
then
objstring=$objstring$object" ";
fi
done;
objstring=lib/stub.o" "$objstring
echo "Object Files: "$objstring
echo " "
# Find libgcc for i386 (needed by LVGL compiled with gcc)
LIBGCC=$(gcc -m32 -print-libgcc-file-name)
echo "libgcc: ${LIBGCC}"
ld -m elf_i386 -s --gc-sections --no-warn-execstack -Ttoolchain/linker.script -o bin/kernel.bin $objstring --start-group lib/liblvgl.a ${LIBGCC} --end-group
ld -m "$LD_FORMAT" "${LINK_OPTIONS[@]}" --gc-sections --no-warn-execstack \
-T"$LINKER_SCRIPT" -o "$BIN_DIR/kernel.bin" "${objects[@]}" \
--start-group "${libraries[@]}" --end-group
"${KERNEL_VALIDATOR[@]}" "$BIN_DIR/kernel.bin"
+16 -14
View File
@@ -3,17 +3,19 @@
# Clone & compile in /tmp (fast container-local fs).
# Cache liblvgl.a on host mount (/code/lvgl/) to skip rebuild.
set -e
# Target configuration updates: Copyright 2026 Aaron Hance.
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
LVGL_VERSION="v9.2.2"
LVGL_REPO="https://github.com/lvgl/lvgl.git"
LVGL_DIR="/tmp/lvgl"
OBJ_DIR="/tmp/lvgl_obj"
LVGL_OBJ_DIR="/tmp/lvgl_obj_$ASURO_ARCH"
CONF_DIR="$(pwd)/lvglh"
OUT_DIR="$(pwd)/lib"
OUT_DIR="$(pwd)/$OBJ_DIR"
CACHE_DIR="/code/lvgl"
CC="gcc"
CFLAGS="-m32 -march=i686 -ffreestanding \
CC="$C_COMPILER"
CFLAGS="-ffreestanding \
-fno-builtin -fno-stack-protector -fno-pic -fno-pie \
-O2 -Wall -Wno-unused-function -Wno-unused-variable \
-I${CONF_DIR} \
@@ -28,9 +30,9 @@ echo "Compiling LVGL..."
echo " "
# If cached liblvgl.a exists on host mount, just copy it and skip everything
if [ -f "${CACHE_DIR}/liblvgl.a" ]; then
if [ -f "${CACHE_DIR}/${LVGL_CACHE_NAME}" ]; then
echo "Found cached liblvgl.a in ${CACHE_DIR}, copying to ${OUT_DIR}..."
cp "${CACHE_DIR}/liblvgl.a" "${OUT_DIR}/liblvgl.a"
cp "${CACHE_DIR}/${LVGL_CACHE_NAME}" "${OUT_DIR}/liblvgl.a"
echo "(Delete lvgl/liblvgl.a to force a full rebuild.)"
echo " "
echo "LVGL compilation complete (cached)."
@@ -50,18 +52,18 @@ TOTAL=$(echo "$SOURCES" | wc -l)
echo "Found ${TOTAL} LVGL source files."
# Compile each .c file to .o (container-local)
rm -rf "$OBJ_DIR"
mkdir -p "$OBJ_DIR"
rm -rf "$LVGL_OBJ_DIR"
mkdir -p "$LVGL_OBJ_DIR"
COUNT=0
ERRORS=0
for src in $SOURCES; do
COUNT=$((COUNT + 1))
rel="${src#${LVGL_DIR}/src/}"
obj_path="${OBJ_DIR}/${rel%.c}.o"
obj_path="${LVGL_OBJ_DIR}/${rel%.c}.o"
mkdir -p "$(dirname "$obj_path")"
if ! $CC $CFLAGS -c "$src" -o "$obj_path" 2>&1; then
if ! "$CC" "${C_TARGET_OPTIONS[@]}" $CFLAGS -c "$src" -o "$obj_path" 2>&1; then
echo "FAILED: $rel"
ERRORS=$((ERRORS + 1))
fi
@@ -79,7 +81,7 @@ if [ "$ERRORS" -ne 0 ]; then
fi
# Archive into static library
OBJECTS=$(find "$OBJ_DIR" -name '*.o')
OBJECTS=$(find "$LVGL_OBJ_DIR" -name '*.o')
ar rcs "${OUT_DIR}/liblvgl.a" $OBJECTS
echo "Created ${OUT_DIR}/liblvgl.a"
@@ -99,7 +101,7 @@ if [ -n "$LVGLH_SOURCES" ]; then
obj_path="${LVGLH_OBJ_DIR}/${rel%.c}.o"
mkdir -p "$(dirname "$obj_path")"
echo " [lvglh] $rel"
if ! $CC $CFLAGS -c "$src" -o "$obj_path" 2>&1; then
if ! "$CC" "${C_TARGET_OPTIONS[@]}" $CFLAGS -c "$src" -o "$obj_path" 2>&1; then
echo " FAILED: $rel"
HERRORS=$((HERRORS + 1))
fi
@@ -121,10 +123,10 @@ fi
echo "Caching LVGL to host mount..."
mkdir -p "$CACHE_DIR"
rm -rf ${CACHE_DIR}/* ${CACHE_DIR}/.[!.]* ${CACHE_DIR}/..?* 2>/dev/null || true
cp "${OUT_DIR}/liblvgl.a" "${CACHE_DIR}/liblvgl.a"
cp "${OUT_DIR}/liblvgl.a" "${CACHE_DIR}/${LVGL_CACHE_NAME}"
cp -a "$LVGL_DIR/src" "${CACHE_DIR}/src"
cp -a "$LVGL_DIR"/*.h "${CACHE_DIR}/" 2>/dev/null || true
cp -a "$OBJ_DIR" "${CACHE_DIR}/obj"
cp -a "$LVGL_OBJ_DIR" "${CACHE_DIR}/obj"
echo "Done."
echo " "
+17 -22
View File
@@ -7,27 +7,22 @@ echo "======================="
echo " "
echo "Compiling FPC Sources..."
echo " "
# The build selects one platform implementation; shared units cannot select CPUs.
python3 toolchain/check_arch_boundaries.py
# Build -Fu flags for the selected architecture and shared sources.
if [ "$ASURO_ARCH" = x86_64 ]; then
test_flags=()
case "${ASURO_BOOT_TEST:-none}" in
none) ;;
ud) test_flags=(-dASURO_TEST_UD) ;;
pf) test_flags=(-dASURO_TEST_PF) ;;
df) test_flags=(-dASURO_TEST_DF) ;;
*) echo "Unknown ASURO_BOOT_TEST" >&2; exit 1 ;;
# Discover unit directories using the existing source roots. Architecture
# filtering follows the namespace convention; no unit directory is added by hand.
source_paths=()
while IFS= read -r -d '' dir; do
case "$dir" in
src/arch/*)
namespace="${dir#src/arch/}"
namespace="${namespace%%/*}"
if [[ "$namespace" != "$ASURO_ARCH" && "$namespace" != common ]]; then
continue
fi
;;
esac
# Restrict search paths: never accidentally select the i386 system unit.
exec ppcx64 -n -O2 -Si -Sc -Sg -Xd -CX -Rintel -Tlinux \
-Fu"src/arch/$ASURO_ARCH/platform" -Fusrc/core -Fusrc/core/strings -Fusrc/driver/storage -Fusrc/arch/x86_64/proc -Fusrc/core/ds -Fusrc/proc -Fusrc/io -Fusrc/arch/common -Fusrc/debug -Fusrc/boot -Fusrc/memory -Fusrc/arch/x86_64/memory -Fu"src/arch/x86_64" -FU"$OBJ_DIR" -FE"$BIN_DIR" "${test_flags[@]}" \
src/arch/x86_64/arch.x86_64.boot.pas
fi
FU_PATHS="-Fusrc/arch/$ASURO_ARCH/platform -Fusrc -Fuwasuro -Fucompat"
for dir in $(find src wasuro compat -type d -not -path 'src/arch/*' 2>/dev/null) \
$(find "src/arch/$ASURO_ARCH" src/arch/common -type d -not -path '*/platform*'); do
FU_PATHS="$FU_PATHS -Fu$dir"
done
source_paths+=("-Fu$dir")
done < <(find src wasuro compat -type d -print0 | LC_ALL=C sort -zu)
fpc -Aelf -gw -g -gl -n -v0e -O3 -OpPENTIUM3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ $FU_PATHS src/asuro.pas
exec "$PASCAL_COMPILER" -n -Si -Sc -Sg -Xd -CX -Rintel -Tlinux \
"${PASCAL_OPTIONS[@]}" "${source_paths[@]}" \
-FU"$OBJ_DIR" -FE"$BIN_DIR" "$PASCAL_ENTRY"
+18 -12
View File
@@ -1,15 +1,21 @@
#!/usr/bin/env bash
# Multi-architecture build updates: Copyright 2026 Aaron Hance.
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
echo " "
echo "======================="
echo " "
echo "Compiling Stub..."
echo " "
nasm -f "$NASM_FORMAT" "src/arch/$ASURO_ARCH/boot/stub.asm" -o "$OBJ_DIR/stub.o"
if [ "$ASURO_ARCH" = x86 ]; then
nasm -f "$NASM_FORMAT" src/boot/splash_tga.asm -o "$OBJ_DIR/splash_tga.o"
else
nasm -f "$NASM_FORMAT" src/arch/x86_64/isr/entry.asm -o "$OBJ_DIR/isr_entry.o"
fi
echo "Compiling assembly..."
# Include only standalone assembly under the target and enabled shared roots.
# Relative source paths keep equal basenames in separate directories distinct.
while IFS= read -r -d '' source_file; do
object="$OBJ_DIR/${source_file//\//_}"
nasm -f "$NASM_FORMAT" "$source_file" -o "${object%.asm}.o"
done < <(find "$ARCH_SOURCE_ROOT" "${ASM_SHARED_ROOTS[@]}" -type f -name '*.asm' -print0 | LC_ALL=C sort -z)
+3 -1
View File
@@ -1,8 +1,10 @@
#!/usr/bin/env bash
# Target configuration updates: Copyright 2026 Aaron Hance.
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
echo " "
echo "======================="
echo " "
echo "Generating Checksum Badge..."
echo " "
checksum=$(md5sum Asuro.iso | awk '{print $1}')
checksum=$(md5sum "$ISO_FILE" | awk '{print $1}')
wget -q https://img.shields.io/badge/checksum-$checksum-important.svg -O release/checksum.svg 2>/dev/null
+5 -3
View File
@@ -1,5 +1,7 @@
#!/usr/bin/env bash
set -e
# Target configuration updates: Copyright 2026 Aaron Hance.
source "$(dirname "${BASH_SOURCE[0]}")/target.sh"
TOOLCHAIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo " "
echo "======================="
@@ -12,8 +14,8 @@ outfile="src/core/core.version.pas"
file="toolchain/version"
{
# this script requires semver tool
wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver
export PATH="$(pwd)/bin:$PATH"
wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O "$BIN_DIR/semver" && chmod +x "$BIN_DIR/semver"
export PATH="$(pwd)/$BIN_DIR:$PATH"
}
tagref=$(git describe --tags)
revision=$(git rev-parse --short=8 HEAD)
@@ -26,7 +28,7 @@ build=$(semver get build $tagref)
linecount=$("${TOOLCHAIN_DIR}/loc.sh" | awk '{print $1}')
sourcecount=$(find src -type f | wc -l)
drivercount=$(find src/driver -type f | wc -l)
fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}')
fpcversion=$("$PASCAL_COMPILER" -h | grep -m 1 version | awk '{print $5}')
makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU)
nasmversion=$(nasm -v | awk '{print $3'})
compiledate=$(date +"%d/%m/%y")
+22 -23
View File
@@ -10,27 +10,26 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Shared target selection. Source this file from build steps.
# Load a target profile by convention rather than branching in build steps.
ASURO_ARCH="${ASURO_ARCH:-x86}"
case "$ASURO_ARCH" in
x86)
OBJ_DIR=lib
BIN_DIR=bin
ISO_ROOT=iso
ISO_FILE=Asuro.iso
NASM_FORMAT=elf
LD_FORMAT=elf_i386
LINKER_SCRIPT=toolchain/linker.script
;;
x86_64)
OBJ_DIR=lib/x86_64
BIN_DIR=bin/x86_64
ISO_ROOT=bin/x86_64/iso
ISO_FILE=Asuro-x86_64.iso
NASM_FORMAT=elf64
LD_FORMAT=elf_x86_64
LINKER_SCRIPT=toolchain/x86_64/linker.script
;;
*) echo "Unsupported ASURO_ARCH: $ASURO_ARCH" >&2; exit 1 ;;
esac
export ASURO_ARCH OBJ_DIR BIN_DIR ISO_ROOT ISO_FILE NASM_FORMAT LD_FORMAT LINKER_SCRIPT
if [[ ! "$ASURO_ARCH" =~ ^[a-zA-Z0-9_]+$ ]]; then
echo "Invalid ASURO_ARCH" >&2; exit 1
fi
profile="$(dirname "${BASH_SOURCE[0]}")/targets/$ASURO_ARCH.sh"
if [ ! -f "$profile" ]; then echo "Unsupported ASURO_ARCH: $ASURO_ARCH" >&2; exit 1; fi
ARCH_SOURCE_ROOT="src/arch/$ASURO_ARCH"
TARGET_TOOLCHAIN_DIR="toolchain/$ASURO_ARCH"
OBJ_DIR="lib/$ASURO_ARCH"
BIN_DIR="bin/$ASURO_ARCH"
ISO_ROOT="$BIN_DIR/iso"
ISO_FILE="Asuro-$ASURO_ARCH.iso"
GRUB_CONFIG=iso/boot/grub/grub.cfg
ASM_ENTRY="$ARCH_SOURCE_ROOT/boot/stub.asm"
C_COMPILER=gcc
LINK_OPTIONS=()
LINK_COMPILER_RUNTIME=false
ASM_SHARED_ROOTS=()
FINISH_SCRIPT=
LVGL_CACHE_NAME="liblvgl-$ASURO_ARCH.a"
source "$profile"
export ASURO_ARCH OBJ_DIR BIN_DIR ISO_ROOT ISO_FILE
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Legacy output locations are retained for the existing VirtualBox workflow.
OBJ_DIR=lib
BIN_DIR=bin
ISO_ROOT=iso
ISO_FILE=Asuro.iso
PASCAL_COMPILER=fpc
PASCAL_ENTRY=src/asuro.pas
PASCAL_OPTIONS=(-Aelf -gw -g -gl -v0e -O3 -OpPENTIUM3 -XXs -CfSSE -CfSSE2 -Pi386)
C_TARGET_OPTIONS=(-m32 -march=i686)
NASM_FORMAT=elf
LD_FORMAT=elf_i386
LINKER_SCRIPT=toolchain/linker.script
LINK_OPTIONS=(-s)
LINK_COMPILER_RUNTIME=true
ASM_SHARED_ROOTS=(src/boot)
BUILD_STEPS=(stub vergen lvgl icons wasuro sources initcalls link isogen docs)
FINISH_SCRIPT=compile_finish.sh
LVGL_CACHE_NAME=liblvgl.a
KERNEL_VALIDATOR=(grub-file --is-x86-multiboot)
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Copyright 2026 Aaron Hance
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PASCAL_COMPILER=ppcx64
PASCAL_ENTRY="$ARCH_SOURCE_ROOT/arch.$ASURO_ARCH.boot.pas"
PASCAL_OPTIONS=(-O2)
C_TARGET_OPTIONS=(-m64)
NASM_FORMAT=elf64
LD_FORMAT=elf_x86_64
LINKER_SCRIPT="$TARGET_TOOLCHAIN_DIR/linker.script"
# The bootstrap does not depend on the desktop or hosted runtime.
BUILD_STEPS=(stub sources link isogen)
case "${ASURO_BOOT_TEST:-none}" in
none) ;;
ud|pf|df) PASCAL_OPTIONS+=("-dASURO_TEST_${ASURO_BOOT_TEST^^}") ;;
*) echo "Unknown ASURO_BOOT_TEST" >&2; exit 1 ;;
esac
KERNEL_VALIDATOR=(grub-file --is-x86-multiboot)