diff --git a/config/riscv64 b/config/riscv64 new file mode 100755 index 0000000..69a98c3 --- /dev/null +++ b/config/riscv64 @@ -0,0 +1,19 @@ +#!/bin/sh + +set -e + +ARCH='riscv64' +HOST="$ARCH-elf" +REPO="$(realpath "$(dirname "$(realpath "$0")")/..")" +PREFIX="$REPO/vendor/cross" +BIN="$PREFIX/bin" + +if [ -f "$REPO/Makefile" ]; then make -C "$REPO" distclean; fi + +export AR="$BIN/$HOST-ar" +export CC="$BIN/$HOST-gcc" +export RANLIB="$BIN/$HOST-ranlib" + +export CFLAGS='-ffreestanding -nostdlib -fno-builtin -fno-stack-protector' + +"$REPO/configure" --host="$HOST" --enable-assert --enable-guard --with-libc diff --git a/examples/arch-riscv64-min/.gitignore b/examples/arch-riscv64-min/.gitignore index 96302b7..2262964 100644 --- a/examples/arch-riscv64-min/.gitignore +++ b/examples/arch-riscv64-min/.gitignore @@ -1 +1,4 @@ +/build-libkernaux/* +!/build-libkernaux/.keep + /kernel.elf diff --git a/examples/arch-riscv64-min/Makefile b/examples/arch-riscv64-min/Makefile index 7ae55f6..870f8b1 100644 --- a/examples/arch-riscv64-min/Makefile +++ b/examples/arch-riscv64-min/Makefile @@ -5,8 +5,10 @@ CCPREFIX = ../../vendor/cross/bin/riscv64-elf- AS = $(CCPREFIX)as CC = $(CCPREFIX)gcc +CONFIG_LIBKERNAUX = ../../config/riscv64 QEMU = qemu-system-riscv64 +BUILD_LIBKERNAUX = build-libkernaux KERNEL = kernel.elf LINKERSCR = linker.ld @@ -25,10 +27,15 @@ run: $(KERNEL) $(QEMU) -machine virt -bios $< -serial stdio -display none clean: + make -C $(BUILD_LIBKERNAUX) distclean || true rm -f $(KERNEL) $(OBJS) -$(KERNEL): $(LINKERSCR) $(OBJS) - $(CC) -T $(LINKERSCR) -o $@ $(OBJS) -nostdlib -lgcc +$(KERNEL): $(LINKERSCR) $(OBJS) build-libkernaux.a + $(CC) -T $(LINKERSCR) -o $@ $(OBJS) -nostdlib -lgcc -lkernaux -Wl,-L$(BUILD_LIBKERNAUX) + +build-libkernaux.a: + cd $(BUILD_LIBKERNAUX) && ../$(CONFIG_LIBKERNAUX) + cd $(BUILD_LIBKERNAUX) && make libkernaux.a %.c.o: %.c $(CC) -c $< -o $@ $(CFLAGS) diff --git a/examples/arch-riscv64-min/build-libkernaux/.keep b/examples/arch-riscv64-min/build-libkernaux/.keep new file mode 100644 index 0000000..e69de29