add arch=aarch64 & board=raspi3 to Makefile

master
equation314 6 years ago
parent 70abc9ec2e
commit 1140d32aaa

@ -8,6 +8,8 @@ use_apic = []
link_user_program = [] link_user_program = []
no_bbl = [] no_bbl = []
board_raspi3 = []
[profile.dev] [profile.dev]
# MUST >= 1 : Enable RVO to avoid stack overflow # MUST >= 1 : Enable RVO to avoid stack overflow
# MUST <= 1 : Avoid double fault at -O2 T_T # MUST <= 1 : Avoid double fault at -O2 T_T

@ -8,13 +8,16 @@
# make clean Clean # make clean Clean
# #
# Options: # Options:
# arch = x86_64 | riscv32 # arch = x86_64 | riscv32 | aarch64
# d = int | in_asm | ... QEMU debug info # d = int | in_asm | ... QEMU debug info
# mode = debug | release # mode = debug | release
# LOG = off | error | warn | info | debug | trace # LOG = off | error | warn | info | debug | trace
# board Only available on riscv32, build without bbl, run on board # board = fpga Only available on riscv32, build without bbl, run on board
# | raspi3 Only available on aarch64, run on Raspberry Pi 3 Model B/B+
arch ?= riscv32 arch ?= aarch64
board ?= raspi3
prefix ?= $(arch)-none-elf
mode ?= debug mode ?= debug
LOG ?= debug LOG ?= debug
@ -27,21 +30,41 @@ user_bin_path := ../user/target/$(arch)-ucore/debug
user_bins := $(patsubst $(user_bin_path)/%.d, $(user_bin_path)/%, $(wildcard $(user_bin_path)/*.d)) user_bins := $(patsubst $(user_bin_path)/%.d, $(user_bin_path)/%, $(wildcard $(user_bin_path)/*.d))
user_obj := build/$(arch)/user.o user_obj := build/$(arch)/user.o
SFSIMG := ../user/ucore32.img SFSIMG := ../user/ucore32.img
### qemu options ###
ifeq ($(arch), x86_64) ifeq ($(arch), x86_64)
qemu_opts := \ qemu_opts := \
-drive format=raw,file=$(bootimage) \ -drive format=raw,file=$(bootimage) \
-drive format=raw,file=$(SFSIMG),media=disk,cache=writeback \ -drive format=raw,file=$(SFSIMG),media=disk,cache=writeback \
-smp 4 \ -smp 4 \
-serial mon:stdio \ -serial mon:stdio \
-device isa-debug-exit -device isa-debug-exit \
-nographic
else ifeq ($(arch), riscv32)
qemu_opts := \
-machine virt \
-nographic \
-kernel $(bin)
else ifeq ($(arch), aarch64)
qemu_opts := \
-machine $(board) \
-serial null -serial mon:stdio \
-nographic \
-kernel $(bin)
endif endif
ifeq ($(arch), riscv32)
qemu_opts := -machine virt -kernel $(bin) -nographic ifdef d
qemu_opts := $(qemu_opts) -d $(d)
endif endif
ifdef board
### build args ###
ifeq ($(arch), riscv32)
ifeq ($(board), fpga)
features := $(features) no_bbl features := $(features) no_bbl
endif endif
endif
# Link user binaries at ../user # Link user binaries at ../user
ifdef link_user ifdef link_user
@ -49,37 +72,25 @@ features := $(features) link_user_program
assembly_object_files := $(assembly_object_files) $(user_obj) assembly_object_files := $(assembly_object_files) $(user_obj)
endif endif
ifdef d features := $(features) board_$(board)
qemu_opts := $(qemu_opts) -d $(d)
endif
build_args := --target $(target).json --features "$(features)" build_args := --target $(target).json --features "$(features)"
ifeq ($(mode), release) ifeq ($(mode), release)
build_args := $(build_args) --release build_args := $(build_args) --release
endif endif
ifeq ($(OS),Windows_NT)
uname := Win32
else
uname := $(shell uname)
endif
ifeq ($(uname), Darwin)
prefix := x86_64-elf-
endif
ifeq ($(arch), riscv32)
prefix := riscv64-unknown-elf-
endif
ld := $(prefix)ld ### prefix ###
objdump := $(prefix)objdump ld := $(prefix)-ld
cc := $(prefix)gcc objdump := $(prefix)-objdump
as := $(prefix)as objcopy := $(prefix)-objcopy
cc := $(prefix)-gcc
as := $(prefix)-as
.PHONY: all clean run build asm doc justrun kernel .PHONY: all clean run build asm doc justrun kernel
all: $(kernel) all: kernel
clean: clean:
@cargo clean @cargo clean
@ -108,20 +119,24 @@ elf-h:
@$(objdump) -h $(kernel) @$(objdump) -h $(kernel)
$(bin): kernel $(bin): kernel
ifdef board ifeq ($(arch), riscv32)
ifeq ($(board), fpga)
@cp $(kernel) $@ @cp $(kernel) $@
else else
@cd ../riscv-pk && \ @cd ../riscv-pk && \
mkdir -p build && \ mkdir -p build && \
cd build && \ cd build && \
../configure \ ../configure \
--enable-32bit \ --enable-32bit \
--enable-logo \ --enable-logo \
--disable-fp-emulation \ --disable-fp-emulation \
--host=riscv64-unknown-elf \ --host=riscv64-unknown-elf \
--with-payload=$(abspath $(kernel)) && \ --with-payload=$(abspath $(kernel)) && \
make && \ make && \
cp bbl ../../kernel/$@ cp bbl ../../kernel/$@
endif
else ifeq ($(arch), aarch64)
$(objcopy) $(kernel) -O binary $@
endif endif
kernel: kernel:

@ -0,0 +1,29 @@
{
"abi-blacklist": [
"stdcall",
"fastcall",
"vectorcall",
"thiscall",
"win64",
"sysv64"
],
"arch": "aarch64",
"data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128",
"executables": true,
"linker": "aarch64-none-elf-ld",
"linker-flavor": "ld",
"linker-is-gnu": true,
"llvm-target": "aarch64-unknown-none",
"no-compiler-rt": true,
"features": "+a53,+strict-align",
"max-atomic-width": 128,
"os": "none",
"panic": "abort",
"panic-strategy": "abort",
"position-independent-executables": true,
"target-c-int-width": "32",
"target-endian": "little",
"target-pointer-width": "64",
"target-family": "unix",
"disable-redzone": true
}
Loading…
Cancel
Save