feat: Makefile instead of .sh

This commit is contained in:
Mark Poliakov 2021-09-29 10:50:37 +03:00
parent f5aa2d3467
commit 3e4d9a6a4e
4 changed files with 52 additions and 97 deletions

52
Makefile Normal file
View File

@ -0,0 +1,52 @@
ARCH?=aarch64
ifeq ($(ARCH),aarch64)
MACH?=qemu
endif
GDB?=gdb-multiarch
LLVM_BASE=$(shell llvm-config --bindir)
OBJCOPY=$(LLVM_BASE)/llvm-objcopy
PROFILE?=debug
O=target/$(ARCH)-$(MACH)/$(PROFILE)
CARGO_BUILD_OPTS=--target=../etc/$(ARCH)-$(MACH).json
ifneq ($(MACH),)
CARGO_BUILD_OPTS+=--features mach_$(MACH)
endif
ifeq ($(PROFILE),release)
CARGO_BUILD_OPTS+=--release
endif
QEMU_OPTS=-s \
-chardev stdio,id=serial0,mux=on
ifeq ($(ARCH),x86_64)
$(error TODO)
else
ifeq ($(MACH),qemu)
QEMU_OPTS+=-kernel $(O)/kernel.bin \
-M virt,virtualization=on \
-cpu cortex-a72 \
-m 512 \
-serial chardev:serial0
endif
endif
.PHONY: address error etc kernel src
all: kernel
kernel:
cd kernel && cargo build $(CARGO_BUILD_OPTS)
ifeq ($(ARCH),aarch64)
$(OBJCOPY) -O binary $(O)/kernel $(O)/kernel.bin
endif
clean:
cargo clean
qemu:
qemu-system-$(ARCH) $(QEMU_OPTS)
gdb:
$(GDB) -x etc/gdbrc $(O)/kernel

View File

@ -1,56 +0,0 @@
#!/bin/sh
set -e
. etc/common.sh
CARGO_OPTS="--target ../etc/${ARCH}-${MACH}.json"
CARGO_FEATURES=""
LLVM_BIN=$(llvm-config --bindir)
if [ ! "$MACH" = "none" ]; then
CARGO_FEATURES="${CARGO_FEATURES}mach_${MACH},"
fi
CARGO_OPTS="$CARGO_OPTS --features=$CARGO_FEATURES"
if [ "$PROFILE" = "release" ]; then
CARGO_OPTS="$CARGO_OPTS --release"
fi
case $1 in
""|build)
CARGO_CMD=build
;;
clean)
CARGO_CMD=clean
;;
clippy)
CARGO_CMD=clippy
;;
doc)
shift
if [ x$1 = xopen ]; then
CARGO_OPTS="$CARGO_OPTS --open"
fi
CARGO_CMD=doc
;;
esac
cd kernel
cargo ${CARGO_CMD} ${CARGO_OPTS}
cd ..
if [ ${CARGO_CMD} = "build" ]; then
case $ARCH in
aarch64)
${LLVM_BIN}/llvm-objcopy -O binary ${OUT_DIR}/kernel ${OUT_DIR}/kernel.bin
;;
x86_64)
mkdir -p ${OUT_DIR}/cdrom/boot/grub
cp etc/x86_64-none.grub ${OUT_DIR}/cdrom/boot/grub/grub.cfg
cp ${OUT_DIR}/kernel ${OUT_DIR}/cdrom/boot/kernel.elf
grub-mkrescue -o ${OUT_DIR}/cdrom.iso ${OUT_DIR}/cdrom
;;
esac
fi

5
gdb.sh
View File

@ -1,5 +0,0 @@
#!/bin/sh
. etc/common.sh
gdb-multiarch -x etc/gdbrc target/${ARCH}-${MACH}/${PROFILE}/kernel

36
qemu.sh
View File

@ -1,36 +0,0 @@
#!/bin/sh
set -e
. etc/common.sh
./build.sh
QEMU_OPTS="-chardev id=char0,mux=on,backend=stdio \
-s"
case $ARCH in
aarch64)
case $MACH in
qemu)
QEMU_OPTS="$QEMU_OPTS \
-M virt,virtualization=on \
-m 512 \
-serial chardev:char0 \
-cpu cortex-a72 \
-kernel target/${ARCH}-${MACH}/${PROFILE}/kernel.bin"
;;
esac
;;
x86_64)
QEMU_OPTS="$QEMU_OPTS \
-M q35 \
-m 512 \
-serial chardev:char0 \
-cpu host \
-enable-kvm \
-cdrom target/${ARCH}-${MACH}/${PROFILE}/cdrom.iso"
;;
esac
${QEMU_PREFIX}qemu-system-${ARCH} ${QEMU_OPTS} $@