Remove xbuild. Use upstream aarch64 rust-std 🎉 🦀

`rustup target add aarch64-unknown-none-softfloat` is now a thing.
It is no longer required to build rust-std on-demand with `xbuild`.

This reduces compile-times significantly.
pull/54/head
Andre Richter 4 years ago
parent 1d34a4e42e
commit c4f9432e13
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -32,9 +32,10 @@ jobs:
- name: Set up Rust nightly - name: Set up Rust nightly
run: | run: |
rustup self update rustup self update
rustup toolchain install nightly --component rust-src llvm-tools-preview rustup toolchain install nightly --component llvm-tools-preview
rustup default nightly rustup default nightly
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
- name: Set up Ruby - name: Set up Ruby
run: | run: |
gem install bundler gem install bundler

@ -32,9 +32,10 @@ jobs:
- name: Set up Rust nightly - name: Set up Rust nightly
run: | run: |
rustup self update rustup self update
rustup toolchain install nightly --component rust-src llvm-tools-preview rustup toolchain install nightly --component llvm-tools-preview
rustup default nightly rustup default nightly
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
- name: Set up Ruby - name: Set up Ruby
run: | run: |
gem install bundler gem install bundler

@ -22,9 +22,9 @@ jobs:
- name: Set up Rust nightly - name: Set up Rust nightly
run: | run: |
rustup self update rustup self update
rustup toolchain install nightly --component rustfmt clippy rust-src rustup toolchain install nightly --component rustfmt clippy
rustup default nightly rustup default nightly
cargo install cargo-xbuild rustup target add aarch64-unknown-none-softfloat
- name: Set up Ruby - name: Set up Ruby
run: | run: |
gem install bundler gem install bundler

@ -32,9 +32,10 @@ jobs:
- name: Set up Rust nightly - name: Set up Rust nightly
run: | run: |
rustup self update rustup self update
rustup toolchain install nightly --component rust-src llvm-tools-preview rustup toolchain install nightly --component llvm-tools-preview
rustup default nightly rustup default nightly
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
- name: Set up Ruby - name: Set up Ruby
run: | run: |
gem install bundler gem install bundler

@ -32,9 +32,10 @@ jobs:
- name: Set up Rust nightly - name: Set up Rust nightly
run: | run: |
rustup self update rustup self update
rustup toolchain install nightly --component rust-src llvm-tools-preview rustup toolchain install nightly --component llvm-tools-preview
rustup default nightly rustup default nightly
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
- name: Set up Ruby - name: Set up Ruby
run: | run: |
gem install bundler gem install bundler
@ -42,4 +43,3 @@ jobs:
- name: Make all - name: Make all
run: | run: |
bundle exec ruby utils/devtool.rb test_unit bundle exec ruby utils/devtool.rb test_unit

1
.gitignore vendored

@ -1,5 +1,4 @@
Gemfile.lock Gemfile.lock
xbuild_sysroot
**/target/* **/target/*
**/.gdb_history **/.gdb_history

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -4,7 +4,6 @@
项目框架已经构建完成目前代码做的仅仅是挂起CPU核心执行内核代码。 项目框架已经构建完成目前代码做的仅仅是挂起CPU核心执行内核代码。
- 工具链: `cargo xbuild` 工具 (包括 `xrustc` `xclippy` 以及用于构建 `AArch64` 裸机代码的 `aarch64-unknown-none-softfloat` 目标平台。
- `Makefile` 目标项: - `Makefile` 目标项:
- `doc`: 生成文档。 - `doc`: 生成文档。
- `qemu`: 在 QEMU 中运行 `kernel` - `qemu`: 在 QEMU 中运行 `kernel`

@ -7,8 +7,6 @@ executing the kernel code.
## Building ## Building
- Toolchain: `cargo xbuild` tools (`xrustc`, `xclippy`) and the `aarch64-unknown-none-softfloat`
target are used for building `AArch64` bare-metal code.
- `Makefile` targets: - `Makefile` targets:
- `doc`: Generate documentation. - `doc`: Generate documentation.
- `qemu`: Run the `kernel` in QEMU - `qemu`: Run the `kernel` in QEMU

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -13,7 +13,7 @@ zero-overhead abstractions and wraps the `unsafe` parts.
diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.toml diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.toml
--- 03_hacky_hello_world/Cargo.toml --- 03_hacky_hello_world/Cargo.toml
+++ 04_zero_overhead_abstraction/Cargo.toml +++ 04_zero_overhead_abstraction/Cargo.toml
@@ -10,7 +10,10 @@ @@ -7,7 +7,10 @@
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -26,16 +26,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -53,7 +55,7 @@ DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -73,7 +75,7 @@ qemu: all
endif endif
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -90,7 +90,7 @@ sudo screen /dev/ttyUSB0 230400
diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml
--- 05_safe_globals/Cargo.toml --- 05_safe_globals/Cargo.toml
+++ 06_drivers_gpio_uart/Cargo.toml +++ 06_drivers_gpio_uart/Cargo.toml
@@ -10,10 +10,11 @@ @@ -7,10 +7,11 @@
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -33,16 +33,18 @@ else ifeq ($(BSP),rpi4)
CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -63,7 +65,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -96,7 +98,7 @@ chainboot:
$(CHAINBOOT_DEMO_PAYLOAD) $(CHAINBOOT_DEMO_PAYLOAD)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -118,8 +118,8 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile
+ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img + CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
endif endif
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
@@ -46,9 +53,12 @@ @@ -48,9 +55,12 @@
DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_IMAGE = rustembedded/osdev-utils
DOCKER_CMD = docker run -it --rm DOCKER_CMD = docker run -it --rm
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
@ -133,7 +133,7 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile
all: clean $(OUTPUT) all: clean $(OUTPUT)
@@ -65,13 +75,26 @@ @@ -67,13 +77,26 @@
ifeq ($(QEMU_MACHINE_TYPE),) ifeq ($(QEMU_MACHINE_TYPE),)
qemu: qemu:
@echo "This board is not yet supported for QEMU." @echo "This board is not yet supported for QEMU."
@ -158,7 +158,7 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile
+ $(CHAINBOOT_DEMO_PAYLOAD) + $(CHAINBOOT_DEMO_PAYLOAD)
+ +
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
diff -uNr 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs 07_uart_chainloader/src/_arch/aarch64/cpu.rs diff -uNr 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs 07_uart_chainloader/src/_arch/aarch64/cpu.rs

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -31,16 +31,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -61,7 +63,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -86,7 +88,7 @@ chainboot: all
$(OUTPUT) $(OUTPUT)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -65,8 +65,8 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile
+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
@@ -58,7 +56,7 @@ @@ -60,7 +58,7 @@
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
@ -75,7 +75,7 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile
all: clean $(OUTPUT) all: clean $(OUTPUT)
@@ -75,25 +73,17 @@ @@ -77,25 +75,17 @@
ifeq ($(QEMU_MACHINE_TYPE),) ifeq ($(QEMU_MACHINE_TYPE),)
qemu: qemu:
@echo "This board is not yet supported for QEMU." @echo "This board is not yet supported for QEMU."
@ -102,7 +102,7 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile
+ $(OUTPUT) + $(OUTPUT)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
diff -uNr 07_uart_chainloader/src/_arch/aarch64/cpu.rs 08_timestamps/src/_arch/aarch64/cpu.rs diff -uNr 07_uart_chainloader/src/_arch/aarch64/cpu.rs 08_timestamps/src/_arch/aarch64/cpu.rs
--- 07_uart_chainloader/src/_arch/aarch64/cpu.rs --- 07_uart_chainloader/src/_arch/aarch64/cpu.rs

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -35,16 +35,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -67,7 +69,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -101,7 +103,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -114,7 +116,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -323,7 +323,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile
LINKER_FILE = src/bsp/raspberrypi/link.ld LINKER_FILE = src/bsp/raspberrypi/link.ld
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
@@ -52,11 +56,13 @@ @@ -54,11 +58,13 @@
DOCKER_CMD = docker run -it --rm DOCKER_CMD = docker run -it --rm
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/utils DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/utils
@ -338,7 +338,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile
all: clean $(OUTPUT) all: clean $(OUTPUT)
@@ -85,6 +91,28 @@ @@ -87,6 +93,28 @@
$(DOCKER_IMAGE) $(DOCKER_EXEC_MINIPUSH) $(DEV_SERIAL) \ $(DOCKER_IMAGE) $(DOCKER_EXEC_MINIPUSH) $(DEV_SERIAL) \
$(OUTPUT) $(OUTPUT)
@ -352,7 +352,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile
+ openocd $(OPENOCD_ARG) + openocd $(OPENOCD_ARG)
+ +
+define gen_gdb +define gen_gdb
+ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
+ cp $(CARGO_OUTPUT) kernel_for_jtag + cp $(CARGO_OUTPUT) kernel_for_jtag
+ @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ + @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
+ gdb-multiarch -q kernel_for_jtag + gdb-multiarch -q kernel_for_jtag
@ -365,6 +365,6 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile
+ $(call gen_gdb,-C debuginfo=2 -C opt-level=0) + $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
+ +
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
``` ```

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -35,16 +35,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -67,7 +69,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -101,7 +103,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -114,7 +116,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -35,16 +35,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -67,7 +69,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -101,7 +103,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -114,7 +116,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -35,16 +35,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -67,7 +69,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -101,7 +103,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -114,7 +116,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -48,16 +48,18 @@ endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU." QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
X_CMD_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
XRUSTC_CMD = cargo xrustc $(X_CMD_ARGS)
XTEST_CMD = cargo xtest $(X_CMD_ARGS) RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
TEST_CMD = cargo test $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
@ -82,7 +84,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -117,7 +119,7 @@ test: $(SOURCES)
@mkdir -p target @mkdir -p target
@echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh
@chmod +x target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XTEST_CMD) $(TEST_ARG) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG)
endif endif
chainboot: all chainboot: all
@ -135,7 +137,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -148,7 +150,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -54,8 +54,8 @@ testing facilities:
Testing Rust `#![no_std]` code like our kernel is, at the point of writing this tutorial, not an Testing Rust `#![no_std]` code like our kernel is, at the point of writing this tutorial, not an
easy endeavor. The short version is: We cannot use Rust's [native testing framework] straight away. easy endeavor. The short version is: We cannot use Rust's [native testing framework] straight away.
Utilizing the `#[test]` attribute macro and running `cargo test` (`xtest` in our case) would throw Utilizing the `#[test]` attribute macro and running `cargo test` would throw compilation errors,
compilation errors, because there are dependencies on the standard library. because there are dependencies on the standard library.
[native testing framework]: https://doc.rust-lang.org/book/ch11-00-testing.html [native testing framework]: https://doc.rust-lang.org/book/ch11-00-testing.html
@ -88,9 +88,9 @@ We introduce a new `Makefile` target:
$ make test $ make test
``` ```
In essence, `make test` will execute `cargo xtest` instead of `cargo xrustc`. The details will be In essence, `make test` will execute `cargo test` instead of `cargo rustc`. The details will be
explained in due course. The rest of the tutorial will explain as chronologically as possible what explained in due course. The rest of the tutorial will explain as chronologically as possible what
happens when `make test` aka `cargo xtest` runs. happens when `make test` aka `cargo test` runs.
### Test Organization ### Test Organization
@ -116,7 +116,7 @@ of the kernel code. The `main.rs` file is stripped down to the minimum. It only
`use` statements. `use` statements.
Since it is not possible to use `kernel` as the name for both the library and the binary part of the Since it is not possible to use `kernel` as the name for both the library and the binary part of the
crate, new entries in `Cargo.toml` are needed to differentiate the names. What's more, `cargo xtest` crate, new entries in `Cargo.toml` are needed to differentiate the names. What's more, `cargo test`
would try to compile and run `unit tests` for both. In our case, it will be sufficient to have all would try to compile and run `unit tests` for both. In our case, it will be sufficient to have all
the unit test code in `lib.rs`, so test generation for `main.rs` can be disabled in `Cargo.toml` as the unit test code in `lib.rs`, so test generation for `main.rs` can be disabled in `Cargo.toml` as
well through the `test` flag: well through the `test` flag:
@ -145,22 +145,22 @@ In `lib.rs`, we add the following headers to get started with `custom_test_frame
Since this is a library now, we do not keep the `#![no_main]` inner attribute that `main.rs` has, Since this is a library now, we do not keep the `#![no_main]` inner attribute that `main.rs` has,
because a library has no `main()` entry function, so the attribute does not apply. When compiling because a library has no `main()` entry function, so the attribute does not apply. When compiling
for testing, though, it is still needed. The reason is that `cargo xtest` basically turns `lib.rs` for testing, though, it is still needed. The reason is that `cargo test` basically turns `lib.rs`
into a binary again by inserting a generated `main()` function (which is then calling a function into a binary again by inserting a generated `main()` function (which is then calling a function
that runs all the unit tests, but more about that in a second...). that runs all the unit tests, but more about that in a second...).
However, since our kernel code [overrides the compiler-inserted `main` shim] by way of using However, since our kernel code [overrides the compiler-inserted `main` shim] by way of using
`#![no_main]`, we need the same when `cargo xtest` is producing its test kernel binary. After all, `#![no_main]`, we need the same when `cargo test` is producing its test kernel binary. After all,
what we want is a minimal kernel that boots on the target and runs its own unit tests. Therefore, we what we want is a minimal kernel that boots on the target and runs its own unit tests. Therefore, we
conditionally set this attribute (`#![cfg_attr(test, no_main)]`) when the `test` flag is set, which conditionally set this attribute (`#![cfg_attr(test, no_main)]`) when the `test` flag is set, which
it is when `cargo xtest` runs. it is when `cargo test` runs.
[overrides the compiler-inserted `main` shim]: https://doc.rust-lang.org/unstable-book/language-features/lang-items.html?highlight=no_main#writing-an-executable-without-stdlib [overrides the compiler-inserted `main` shim]: https://doc.rust-lang.org/unstable-book/language-features/lang-items.html?highlight=no_main#writing-an-executable-without-stdlib
#### The Unit Test Runner #### The Unit Test Runner
The `#![test_runner(crate::test_runner)]` attribute declares the path of the test runner function The `#![test_runner(crate::test_runner)]` attribute declares the path of the test runner function
that we are supposed to provide. This is the one that will be called by the `cargo xtest` generated that we are supposed to provide. This is the one that will be called by the `cargo test` generated
`main()` function. Here is the implementation in `lib.rs`: `main()` function. Here is the implementation in `lib.rs`:
```rust ```rust
@ -221,12 +221,12 @@ call chain during kernel boot:
| 4. | `kernel_init()` | `main.rs` | | 4. | `kernel_init()` | `main.rs` |
| 5. | `kernel_main()` | `main.rs` | | 5. | `kernel_main()` | `main.rs` |
A function named `main` is never called. Hence, the `main()` function generated by `cargo xtest` A function named `main` is never called. Hence, the `main()` function generated by `cargo test`
would be silently dropped, and therefore the tests would never be executed. As you can see, would be silently dropped, and therefore the tests would never be executed. As you can see,
`runtime_init()` is the last function residing in our carved-out `lib.rs`, and it calls into `runtime_init()` is the last function residing in our carved-out `lib.rs`, and it calls into
`kernel_init()`. So in order to get the tests to execute, we add a test-environment version of `kernel_init()`. So in order to get the tests to execute, we add a test-environment version of
`kernel_init()` to `lib.rs` as well (conditional compilation ensures it is only present when the `kernel_init()` to `lib.rs` as well (conditional compilation ensures it is only present when the
test flag is set), and call the `cargo xtest` generated `main()` function from there. test flag is set), and call the `cargo test` generated `main()` function from there.
This is where `#![reexport_test_harness_main = "test_main"]` finally comes into picture. It declares This is where `#![reexport_test_harness_main = "test_main"]` finally comes into picture. It declares
the name of the generated main function so that we can manually call it. Here is the final the name of the generated main function so that we can manually call it. Here is the final
@ -359,7 +359,7 @@ test: $(SOURCES)
@mkdir -p target @mkdir -p target
@echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh
@chmod +x target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XTEST_CMD) $(TEST_ARG) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG)
``` ```
It first does the standard `objcopy` step to strip the `ELF` down to a raw binary. Just like in all It first does the standard `objcopy` step to strip the `ELF` down to a raw binary. Just like in all
@ -404,7 +404,7 @@ def exec
### Writing Unit Tests ### Writing Unit Tests
Alright, that's a wrap for the whole chain from `make test` all the way to reporting the test exit Alright, that's a wrap for the whole chain from `make test` all the way to reporting the test exit
status back to `cargo xtest`. It is a lot to digest already, but we haven't even learned to write status back to `cargo test`. It is a lot to digest already, but we haven't even learned to write
`Unit Tests` yet. `Unit Tests` yet.
In essence, it is almost like in `std` environments, with the difference that `#[test]` can't be In essence, it is almost like in `std` environments, with the difference that `#[test]` can't be
@ -490,7 +490,7 @@ We are still not done with the tutorial, though :scream:.
Integration tests need some special attention here and there too. As you already learned, they live Integration tests need some special attention here and there too. As you already learned, they live
in `$CRATE/tests/`. Each `.rs` file in there gets compiled into its own test kernel binary and in `$CRATE/tests/`. Each `.rs` file in there gets compiled into its own test kernel binary and
executed separately by `cargo xtest`. The code in the integration tests includes the library part of executed separately by `cargo test`. The code in the integration tests includes the library part of
our kernel (`libkernel`) through `use` statements. our kernel (`libkernel`) through `use` statements.
Also note that the entry point for each `integration test` must be the `kernel_init()` function Also note that the entry point for each `integration test` must be the `kernel_init()` function
@ -498,7 +498,7 @@ again, just like in the `unit test` case.
#### Test Harness #### Test Harness
By default, `cargo xtest` will pull in the test harness (that's the official name for the generated By default, `cargo test` will pull in the test harness (that's the official name for the generated
`main()` function) into integration tests as well. This gives you a further means of partitioning `main()` function) into integration tests as well. This gives you a further means of partitioning
your test code into individual chunks. For example, take a look at `tests/01_timer_sanity.rs`: your test code into individual chunks. For example, take a look at `tests/01_timer_sanity.rs`:
@ -701,7 +701,7 @@ Believe it or not, that is all. There are three ways you can run tests:
```console ```console
$ make test $ make test
[...] [...]
RUSTFLAGS="-C link-arg=-Tsrc/bsp/raspberrypi/link.ld -C target-cpu=cortex-a53 -D warnings -D missing_docs" cargo xtest --target=aarch64-unknown-none-softfloat --features bsp_rpi3 --release RUSTFLAGS="-C link-arg=-Tsrc/bsp/raspberrypi/link.ld -C target-cpu=cortex-a53 -D warnings -D missing_docs" cargo test --target=aarch64-unknown-none-softfloat --features bsp_rpi3 --release
Finished release [optimized] target(s) in 0.01s Finished release [optimized] target(s) in 0.01s
Running target/aarch64-unknown-none-softfloat/release/deps/libkernel-4cc6412ddf631982 Running target/aarch64-unknown-none-softfloat/release/deps/libkernel-4cc6412ddf631982
------------------------------------------------------------------- -------------------------------------------------------------------
@ -779,7 +779,7 @@ diff -uNr 12_exceptions_part1_groundwork/.cargo/config 13_integrated_testing/.ca
diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo.toml diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo.toml
--- 12_exceptions_part1_groundwork/Cargo.toml --- 12_exceptions_part1_groundwork/Cargo.toml
+++ 13_integrated_testing/Cargo.toml +++ 13_integrated_testing/Cargo.toml
@@ -14,7 +14,35 @@ @@ -11,7 +11,35 @@
bsp_rpi4 = ["cortex-a", "register"] bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
@ -828,7 +828,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg
JTAG_BOOT_IMAGE = jtag_boot_rpi3.img JTAG_BOOT_IMAGE = jtag_boot_rpi3.img
LINKER_FILE = src/bsp/raspberrypi/link.ld LINKER_FILE = src/bsp/raspberrypi/link.ld
@@ -29,21 +30,34 @@ @@ -29,12 +30,24 @@
# QEMU_BINARY = qemu-system-aarch64 # QEMU_BINARY = qemu-system-aarch64
# QEMU_MACHINE_TYPE = # QEMU_MACHINE_TYPE =
# QEMU_RELEASE_ARGS = -serial stdio -display none # QEMU_RELEASE_ARGS = -serial stdio -display none
@ -850,23 +850,18 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
+ +
+QEMU_MISSING_STRING = "This board is not yet supported for QEMU." +QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
+ +
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
-XRUSTC_CMD = cargo xrustc \ RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
- --target=$(TARGET) \ @@ -46,6 +59,7 @@
- --features bsp_$(BSP) \
+X_CMD_ARGS = --target=$(TARGET) \ RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
+ --features bsp_$(BSP) \ CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
--release +TEST_CMD = cargo test $(COMPILER_ARGS)
+XRUSTC_CMD = cargo xrustc $(X_CMD_ARGS)
+XTEST_CMD = cargo xtest $(X_CMD_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
@@ -53,7 +67,8 @@ @@ -55,7 +69,8 @@
-O binary -O binary
DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_IMAGE = rustembedded/osdev-utils
@ -876,7 +871,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work DOCKER_ARG_DIR_TUT = -v $(shell pwd):/work -w /work
DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/utils DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/utils
DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/jtag
@@ -62,7 +77,7 @@ @@ -64,7 +79,7 @@
DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) DOCKER_EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
@ -885,7 +880,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
all: clean $(OUTPUT) all: clean $(OUTPUT)
@@ -78,32 +93,51 @@ @@ -80,32 +95,51 @@
ifeq ($(QEMU_MACHINE_TYPE),) ifeq ($(QEMU_MACHINE_TYPE),)
qemu: qemu:
@ -916,7 +911,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
+ @mkdir -p target + @mkdir -p target
+ @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh + @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh
+ @chmod +x target/kernel_test_runner.sh + @chmod +x target/kernel_test_runner.sh
+ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XTEST_CMD) $(TEST_ARG) + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG)
endif endif
chainboot: all chainboot: all
@ -939,7 +934,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
- @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ - @$(DOCKER_CMD) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
+ @$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ + @$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \

Binary file not shown.

Binary file not shown.

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -48,17 +48,19 @@ endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU." QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
FEATURES = bsp_$(BSP) FEATURES = bsp_$(BSP)
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features $(FEATURES) \
X_CMD_ARGS = --target=$(TARGET) \
--features $(FEATURES) \
--release --release
XRUSTC_CMD = cargo xrustc $(X_CMD_ARGS)
XTEST_CMD = cargo xtest $(X_CMD_ARGS) RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
TEST_CMD = cargo test $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
@ -83,7 +85,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -120,7 +122,7 @@ test: $(SOURCES)
@mkdir -p target @mkdir -p target
@echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh
@chmod +x target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XTEST_CMD) $(TEST_ARG) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG)
endif endif
chainboot: all chainboot: all
@ -138,7 +140,7 @@ openocd:
openocd $(OPENOCD_ARG) openocd $(OPENOCD_ARG)
define gen_gdb define gen_gdb
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD)
cp $(CARGO_OUTPUT) kernel_for_jtag cp $(CARGO_OUTPUT) kernel_for_jtag
@$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \ @$(DOCKER_CMD_USER) $(DOCKER_ARG_DIR_TUT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) \
gdb-multiarch -q kernel_for_jtag gdb-multiarch -q kernel_for_jtag
@ -151,7 +153,7 @@ gdb-opt0: clean $(SOURCES)
$(call gen_gdb,-C debuginfo=2 -C opt-level=0) $(call gen_gdb,-C debuginfo=2 -C opt-level=0)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

@ -750,7 +750,7 @@ Minipush 1.0
diff -uNr 13_integrated_testing/Cargo.toml 14_exceptions_part2_peripheral_IRQs/Cargo.toml diff -uNr 13_integrated_testing/Cargo.toml 14_exceptions_part2_peripheral_IRQs/Cargo.toml
--- 13_integrated_testing/Cargo.toml --- 13_integrated_testing/Cargo.toml
+++ 14_exceptions_part2_peripheral_IRQs/Cargo.toml +++ 14_exceptions_part2_peripheral_IRQs/Cargo.toml
@@ -12,6 +12,7 @@ @@ -9,6 +9,7 @@
default = [] default = []
bsp_rpi3 = ["cortex-a", "register"] bsp_rpi3 = ["cortex-a", "register"]
bsp_rpi4 = ["cortex-a", "register"] bsp_rpi4 = ["cortex-a", "register"]
@ -762,21 +762,19 @@ diff -uNr 13_integrated_testing/Cargo.toml 14_exceptions_part2_peripheral_IRQs/C
diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Makefile diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Makefile
--- 13_integrated_testing/Makefile --- 13_integrated_testing/Makefile
+++ 14_exceptions_part2_peripheral_IRQs/Makefile +++ 14_exceptions_part2_peripheral_IRQs/Makefile
@@ -50,11 +50,12 @@ @@ -52,9 +52,10 @@
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
+FEATURES = bsp_$(BSP) +FEATURES = bsp_$(BSP)
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
- --features bsp_$(BSP) \
X_CMD_ARGS = --target=$(TARGET) \ + --features $(FEATURES) \
- --features bsp_$(BSP) \
+ --features $(FEATURES) \
--release --release
XRUSTC_CMD = cargo xrustc $(X_CMD_ARGS)
XTEST_CMD = cargo xtest $(X_CMD_ARGS) RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
@@ -91,6 +92,7 @@ @@ -93,6 +94,7 @@
doc: doc:
cargo xdoc --target=$(TARGET) --features bsp_$(BSP) --document-private-items --open cargo xdoc --target=$(TARGET) --features bsp_$(BSP) --document-private-items --open
@ -784,7 +782,7 @@ diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Mak
ifeq ($(QEMU_MACHINE_TYPE),) ifeq ($(QEMU_MACHINE_TYPE),)
qemu: qemu:
@echo $(QEMU_MISSING_STRING) @echo $(QEMU_MISSING_STRING)
@@ -113,6 +115,7 @@ @@ -115,6 +117,7 @@
endef endef
export KERNEL_TEST_RUNNER export KERNEL_TEST_RUNNER

@ -58,11 +58,12 @@ _Cheers,
curl https://sh.rustup.rs -sSf \ curl https://sh.rustup.rs -sSf \
| \ | \
sh -s -- \ sh -s -- \
--default-toolchain nightly-2019-12-20 \ --default-toolchain nightly-2020-04-07 \
--component rust-src llvm-tools-preview rustfmt --component llvm-tools-preview rustfmt
source $HOME/.cargo/env source $HOME/.cargo/env
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
``` ```
如果你使用 `Visual Studio Code`,我强烈推荐你安装[Rust Analyzer 扩展]。 如果你使用 `Visual Studio Code`,我强烈推荐你安装[Rust Analyzer 扩展]。

@ -87,11 +87,12 @@ Before you can start, you must install a suitable Rust toolchain:
curl https://sh.rustup.rs -sSf \ curl https://sh.rustup.rs -sSf \
| \ | \
sh -s -- \ sh -s -- \
--default-toolchain nightly-2020-03-19 \ --default-toolchain nightly-2020-04-07 \
--component rust-src llvm-tools-preview rustfmt --component llvm-tools-preview rustfmt
source $HOME/.cargo/env source $HOME/.cargo/env
cargo install cargo-xbuild cargo-binutils rustup target add aarch64-unknown-none-softfloat
cargo install cargo-binutils
``` ```
In case you use `Visual Studio Code`, I strongly recommend installing the In case you use `Visual Studio Code`, I strongly recommend installing the

@ -4,9 +4,6 @@ version = "0.1.0"
authors = ["Andre Richter <andre.o.richter@gmail.com>"] authors = ["Andre Richter <andre.o.richter@gmail.com>"]
edition = "2018" edition = "2018"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"
# The features section is used to select the target board. # The features section is used to select the target board.
[features] [features]
default = [] default = []

@ -31,16 +31,18 @@ else ifeq ($(BSP),rpi4)
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif endif
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld)
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
SOURCES = $(wildcard **/*.rs) $(wildcard **/*.S) $(wildcard **/*.ld) COMPILER_ARGS = --target=$(TARGET) \
--features bsp_$(BSP) \
XRUSTC_CMD = cargo xrustc \
--target=$(TARGET) \
--features bsp_$(BSP) \
--release --release
RUSTC_CMD = cargo rustc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CARGO_OUTPUT = target/$(TARGET)/release/kernel CARGO_OUTPUT = target/$(TARGET)/release/kernel
OBJCOPY_CMD = cargo objcopy \ OBJCOPY_CMD = cargo objcopy \
@ -61,7 +63,7 @@ DOCKER_EXEC_MINIPUSH = ruby /utils/minipush.rb
all: clean $(OUTPUT) all: clean $(OUTPUT)
$(CARGO_OUTPUT): $(SOURCES) $(CARGO_OUTPUT): $(SOURCES)
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(XRUSTC_CMD) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
$(OUTPUT): $(CARGO_OUTPUT) $(OUTPUT): $(CARGO_OUTPUT)
cp $< . cp $< .
@ -86,7 +88,7 @@ chainboot: all
$(OUTPUT) $(OUTPUT)
clippy: clippy:
RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" cargo xclippy --target=$(TARGET) --features bsp_$(BSP) RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD)
clean: clean:
rm -rf target rm -rf target

Binary file not shown.

Binary file not shown.

@ -88,7 +88,6 @@ class DevTool
def clean def clean
@crates.each(&:clean) @crates.each(&:clean)
FileUtils.rm_rf('xbuild_sysroot')
end end
def clippy(bsp = nil) def clippy(bsp = nil)

Loading…
Cancel
Save