feat: Makefile instead of .sh
This commit is contained in:
parent
f5aa2d3467
commit
3e4d9a6a4e
52
Makefile
Normal file
52
Makefile
Normal 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
|
56
build.sh
56
build.sh
@ -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
5
gdb.sh
@ -1,5 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
. etc/common.sh
|
||||
|
||||
gdb-multiarch -x etc/gdbrc target/${ARCH}-${MACH}/${PROFILE}/kernel
|
36
qemu.sh
36
qemu.sh
@ -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} $@
|
Loading…
x
Reference in New Issue
Block a user