mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: build: allow to select build mode
This commit is contained in:
parent
2f83f924b8
commit
538053fc3e
7
.github/workflows/rust.yml
vendored
7
.github/workflows/rust.yml
vendored
@ -10,6 +10,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
mode: [ debug, release ]
|
||||||
include:
|
include:
|
||||||
- arch: riscv64
|
- arch: riscv64
|
||||||
qemu-pkg: qemu-system-misc
|
qemu-pkg: qemu-system-misc
|
||||||
@ -36,10 +37,10 @@ jobs:
|
|||||||
components: clippy, rust-src
|
components: clippy, rust-src
|
||||||
|
|
||||||
- name: Run Clippy
|
- name: Run Clippy
|
||||||
run: make clippy ARCH=${{ matrix.arch }}
|
run: make clippy ARCH=${{ matrix.arch }} MODE=${{ matrix.mode }}
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: make test ARCH=${{ matrix.arch }}
|
run: make test ARCH=${{ matrix.arch }} MODE=${{ matrix.mode }}
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: make kernel ARCH=${{ matrix.arch }}
|
run: make kernel ARCH=${{ matrix.arch }} MODE=${{ matrix.mode }}
|
||||||
|
45
Makefile
45
Makefile
@ -1,4 +1,5 @@
|
|||||||
ARCH ?= riscv64
|
ARCH ?= riscv64
|
||||||
|
MODE ?= debug
|
||||||
|
|
||||||
ifeq ($(ARCH), riscv64)
|
ifeq ($(ARCH), riscv64)
|
||||||
BUILD_TARGET := riscv64imac-unknown-none-elf
|
BUILD_TARGET := riscv64imac-unknown-none-elf
|
||||||
@ -7,6 +8,12 @@ else
|
|||||||
$(error Invalid TARGET: $(ARCH))
|
$(error Invalid TARGET: $(ARCH))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(MODE), release)
|
||||||
|
CARGO_BUILD_ARGS += --release
|
||||||
|
else ifneq ($(MODE), debug)
|
||||||
|
$(error Invalid MODE: $(MODE))
|
||||||
|
endif
|
||||||
|
|
||||||
RUSTFLAGS += -Crelocation-model=static
|
RUSTFLAGS += -Crelocation-model=static
|
||||||
RUSTFLAGS += -Ccode-model=medium
|
RUSTFLAGS += -Ccode-model=medium
|
||||||
#RUSTFLAGS += -Ctarget-feature=+relax
|
#RUSTFLAGS += -Ctarget-feature=+relax
|
||||||
@ -19,6 +26,13 @@ CARGO_BUILD_ARGS += -Zbuild-std=core,compiler_builtins,alloc
|
|||||||
CARGO_BUILD_ARGS += -Zbuild-std-features=compiler-builtins-mem
|
CARGO_BUILD_ARGS += -Zbuild-std-features=compiler-builtins-mem
|
||||||
CARGO_BUILD_ARGS += $(CARGO_TARGET_ARGS)
|
CARGO_BUILD_ARGS += $(CARGO_TARGET_ARGS)
|
||||||
|
|
||||||
|
QEMU = qemu-system-$(ARCH)
|
||||||
|
|
||||||
|
QEMU_ARGS = -nographic -serial mon:stdio -smp 1
|
||||||
|
QEMU_ARGS += -machine virt # TODO: override by $(BOARD)
|
||||||
|
QEMU_ARGS += -kernel target/$(BUILD_TARGET)/$(MODE)/kernel
|
||||||
|
QEMU_ARGS += -initrd build/init.cpio
|
||||||
|
|
||||||
kernel:
|
kernel:
|
||||||
env RUSTFLAGS="$(RUSTFLAGS)" cargo build --bin kernel $(CARGO_BUILD_ARGS)
|
env RUSTFLAGS="$(RUSTFLAGS)" cargo build --bin kernel $(CARGO_BUILD_ARGS)
|
||||||
|
|
||||||
@ -36,7 +50,7 @@ kernel-test-dump:
|
|||||||
@env RUSTFLAGS="$(RUSTFLAGS)" cargo test $(CARGO_TARGET_ARGS) --bin=kernel --no-run --message-format=json
|
@env RUSTFLAGS="$(RUSTFLAGS)" cargo test $(CARGO_TARGET_ARGS) --bin=kernel --no-run --message-format=json
|
||||||
|
|
||||||
kernel-asm: kernel
|
kernel-asm: kernel
|
||||||
riscv64-elf-objdump -d target/$(BUILD_TARGET)/debug/kernel | c++filt -t > kernel.asm
|
riscv64-elf-objdump -d target/$(BUILD_TARGET)/$(MODE)/kernel | c++filt -t > kernel.asm
|
||||||
|
|
||||||
build-target:
|
build-target:
|
||||||
@echo $(BUILD_TARGET)
|
@echo $(BUILD_TARGET)
|
||||||
@ -45,32 +59,9 @@ clean:
|
|||||||
cargo clean
|
cargo clean
|
||||||
|
|
||||||
qemu: kernel
|
qemu: kernel
|
||||||
qemu-system-$(ARCH) \
|
$(QEMU) $(QEMU_ARGS)
|
||||||
-nographic -machine virt -serial mon:stdio -smp 1 \
|
|
||||||
-kernel target/$(BUILD_TARGET)/debug/kernel
|
|
||||||
|
|
||||||
qemu-gdb: kernel
|
qemu-gdb: kernel
|
||||||
qemu-system-$(ARCH) \
|
$(QEMU) $(QEMU_ARGS) -s -S
|
||||||
-nographic -machine virt -serial mon:stdio -smp 1 \
|
|
||||||
-kernel target/$(BUILD_TARGET)/debug/kernel \
|
|
||||||
-s -S
|
|
||||||
|
|
||||||
replay.qcow2:
|
.PHONY: kernel clippy test kernel-test-dump kernel-asm build-target clean qemu qemu-gdb
|
||||||
qemu-img create -f qcow2 replay.qcow2 1G
|
|
||||||
|
|
||||||
qemu-record: kernel replay.qcow2
|
|
||||||
qemu-system-$(ARCH) \
|
|
||||||
-nographic -machine virt -serial mon:stdio -smp 1 \
|
|
||||||
-kernel target/$(BUILD_TARGET)/debug/kernel \
|
|
||||||
-icount shift=auto,rr=record,rrfile=replay.bin,rrsnapshot=init \
|
|
||||||
-drive file=replay.qcow2,if=none,id=rr
|
|
||||||
|
|
||||||
qemu-replay: kernel replay.qcow2
|
|
||||||
qemu-system-$(ARCH) \
|
|
||||||
-nographic -machine virt -serial mon:stdio -smp 1 \
|
|
||||||
-kernel target/$(BUILD_TARGET)/debug/kernel \
|
|
||||||
-icount shift=auto,rr=replay,rrfile=replay.bin,rrsnapshot=init \
|
|
||||||
-drive file=replay.qcow2,if=none,id=rr \
|
|
||||||
-s -S
|
|
||||||
|
|
||||||
.PHONY: kernel clippy test kernel-test-dump kernel-asm build-target clean qemu qemu-gdb qemu-record qemu-replay
|
|
||||||
|
Loading…
Reference in New Issue
Block a user