Add docker build system

This commit is contained in:
2025-11-19 16:44:19 +01:00
parent 78177c0a07
commit f4b474f0b9
10 changed files with 27 additions and 244 deletions

View File

@@ -72,6 +72,4 @@ echo "=== Build complete! ==="
echo ""
echo "Running kernel in QEMU..."
echo "(Press Ctrl+A then X to exit)"
echo ""
qemu-system-i386 -kernel "$OUT_DIR/kernel"
echo ""

55
scripts/build-picolibc.sh Executable file
View File

@@ -0,0 +1,55 @@
#!/bin/bash
# Script to build picolibc for i686 freestanding environment
set -e
PICOLIBC_DIR="picolibc"
BUILD_DIR="build/picolibc"
INSTALL_DIR="$(pwd)/picolibc-install"
echo "=== Building Picolibc for i686 freestanding ==="
# Check if picolibc exists
if [ ! -d "$PICOLIBC_DIR" ]; then
echo "Error: Picolibc source not found at $PICOLIBC_DIR"
echo "Cloning..."
git clone --branch 1.8.10 https://github.com/picolibc/picolibc.git "$PICOLIBC_DIR"
fi
# Get current version
cd "$PICOLIBC_DIR"
CURRENT_VERSION=$(git describe --tags 2>/dev/null || echo "unknown")
echo "Using picolibc version: $CURRENT_VERSION"
cd ..
# Create build directory
mkdir -p "$BUILD_DIR"
echo "Configuring picolibc with meson..."
meson setup "$BUILD_DIR" "$PICOLIBC_DIR" \
--cross-file picolibc-i686.txt \
--prefix="$INSTALL_DIR" \
--wipe \
-Dmultilib=false \
-Dpicocrt=false \
-Dsemihost=false \
-Dspecsdir=none \
-Dtinystdio=true \
-Dio-long-long=true \
-Dformat-default=double \
-Dtests=false
echo "Building picolibc..."
meson compile -C "$BUILD_DIR"
echo "Installing picolibc..."
meson install -C "$BUILD_DIR"
echo ""
echo "=== Picolibc build complete! ==="
echo "Installation directory: $INSTALL_DIR"
echo ""
echo "To use picolibc in your kernel:"
echo " Include path: -I$INSTALL_DIR/include"
echo " Library path: -L$INSTALL_DIR/lib"
echo " Link with: -lc"

View File

@@ -1,59 +0,0 @@
#!/bin/bash
# Build script for kernel with picolibc
set -e
# Paths
PICOLIBC_INSTALL="$(pwd)/picolibc-install"
BUILD_DIR="build"
OUT_DIR="$BUILD_DIR/out"
# Check if picolibc is installed
if [ ! -d "$PICOLIBC_INSTALL" ]; then
echo "Error: Picolibc not found at $PICOLIBC_INSTALL"
echo "Please run ./build-picolibc.sh first"
exit 1
fi
# Create build directories
mkdir -p "$BUILD_DIR"
mkdir -p "$OUT_DIR"
# Compiler flags
CFLAGS="-m32 -march=i686 -ffreestanding -nostdlib -fno-builtin"
CFLAGS="$CFLAGS -I$PICOLIBC_INSTALL/include"
CFLAGS="$CFLAGS -I./src/lib"
CFLAGS="$CFLAGS -I./src"
CFLAGS="$CFLAGS -Wall -Wextra"
LDFLAGS="-m elf_i386 -nostdlib"
LDFLAGS="$LDFLAGS -L$PICOLIBC_INSTALL/lib"
echo "=== Building kernel with picolibc ==="
# Build boot assembly
echo "Assembling boot code..."
nasm -f elf32 src/boot/kernel.asm -o "$BUILD_DIR/kasm.o"
# Build duktape with picolibc
echo "Building Duktape..."
gcc $CFLAGS -c src/lib/duktape.c -o "$BUILD_DIR/duktape.o"
# Build kernel
echo "Building kernel..."
gcc $CFLAGS -c src/kernel/kernel.c -o "$BUILD_DIR/kc.o"
# Link everything together
echo "Linking kernel..."
ld $LDFLAGS -T src/link.ld -o "$OUT_DIR/kernel" \
"$BUILD_DIR/kasm.o" \
"$BUILD_DIR/kc.o" \
"$BUILD_DIR/duktape.o" \
-lc
echo ""
echo "=== Build complete! ==="
echo "Kernel binary: $OUT_DIR/kernel"
echo ""
echo "To run the kernel:"
echo " qemu-system-i386 -kernel $OUT_DIR/kernel"

2
scripts/build.sh Executable file
View File

@@ -0,0 +1,2 @@
docker build -t lints-dev -f docker/Dockerfile .
docker run -it --rm -v "$(pwd)":/workspace -w /workspace lints-dev

3
scripts/run-kernel.sh Executable file
View File

@@ -0,0 +1,3 @@
./scripts/build.sh
qemu-system-i386 -kernel "build/out/kernel"