Use cargo-xbuild

Also, have a config where the individual projects can reuse the same
sysroot.
pull/9/head
Andre Richter 6 years ago
parent 8175639399
commit c19993934c
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -5,3 +5,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
panic-abort = "0.2.0"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)

@ -60,11 +60,11 @@ Raspberry Pi 3, so that the compiler can optimize for it.
Since the `aarch64-unknown-none` target is not shipped with an associated
precompiled standard library, and since we anyways modify the target via the
`.cargo/config` file, we are using [Xargo][xargo] to compile our own standard
library. This way, we can ensure that our bare-metal code is optimized
`.cargo/config` file, we are using [cargo-xbuild][xbuild] to compile our own
standard library. This way, we can ensure that our bare-metal code is optimized
throughout.
[xargo]: https://github.com/japaric/xargo
[xbuild]: https://github.com/rust-osdev/cargo-xbuild
## Linker script `link.ld`

@ -5,3 +5,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
raspi3_boot = { path = "raspi3_boot" }
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -54,7 +54,7 @@ qemu:
$(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -d in_asm
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -6,3 +6,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
raspi3_boot = { path = "raspi3_boot" }
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -54,7 +54,7 @@ qemu:
$(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -6,3 +6,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
raspi3_boot = { path = "raspi3_boot" }
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -54,7 +54,7 @@ qemu:
$(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -6,3 +6,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
raspi3_boot = { path = "raspi3_boot" }
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -54,7 +54,7 @@ qemu:
$(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -6,3 +6,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
[dependencies]
raspi3_boot = { path = "raspi3_boot" }
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot/pic"

@ -34,11 +34,11 @@ QEMU_CMD = qemu-system-aarch64 -M raspi3 -kernel kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -54,7 +54,7 @@ qemu:
$(DOCKER_CMD) $(UTILS_CONTAINER) $(QEMU_CMD) -serial stdio
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -7,3 +7,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
raspi3_boot = { path = "raspi3_boot" }
cortex-a = "1.0.0"
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -36,11 +36,11 @@ RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -59,7 +59,7 @@ raspboot:
$(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD)
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -7,3 +7,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
raspi3_boot = { path = "raspi3_boot" }
cortex-a = "1.0.0"
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -36,11 +36,11 @@ RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -59,7 +59,7 @@ raspboot:
$(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD)
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -7,3 +7,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
raspi3_boot = { path = "raspi3_boot" }
cortex-a = "1.0.0"
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -36,11 +36,11 @@ RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -59,7 +59,7 @@ raspboot:
$(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD)
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -7,3 +7,6 @@ authors = ["Andre Richter <andre.o.richter@gmail.com>"]
raspi3_boot = { path = "raspi3_boot" }
cortex-a = "1.0.0"
register = "0.1.1"
[package.metadata.cargo-xbuild]
sysroot_path = "../xbuild_sysroot"

@ -36,11 +36,11 @@ RASPBOOT_CMD = raspbootcom /dev/ttyUSB0 kernel8.img
all: clean kernel8.img
target/$(TARGET)/debug/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET)
cargo xbuild --target=$(TARGET)
cp $@ .
target/$(TARGET)/release/kernel8: src/main.rs
RUST_TARGET_PATH=$(shell pwd) xargo build --target=$(TARGET) --release
cargo xbuild --target=$(TARGET) --release
cp $@ .
ifeq ($(DEBUG),1)
@ -59,7 +59,7 @@ raspboot:
$(DOCKER_CMD) $(DOCKER_TTY) $(UTILS_CONTAINER) $(RASPBOOT_CMD)
clippy:
RUSTFLAGS="-C panic=abort" cargo clippy
cargo xclippy --target=$(TARGET)
clean:
cargo clean

@ -58,7 +58,7 @@ Before you can start, you'll need a suitable Rust toolchain.
```bash
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly
rustup component add rust-src llvm-tools-preview
cargo install xargo cargo-binutils
cargo install cargo-xbuild cargo-binutils
rustup component add clippy-preview --toolchain=nightly
```

@ -1,5 +1,7 @@
#!/usr/bin/env ruby
require 'fileutils'
crates = Dir["**/Cargo.toml"].sort!
crates.each do |x|
@ -14,3 +16,5 @@ crates.each do |x|
end
end
end
FileUtils.rm_rf('xbuild_sysroot')

Loading…
Cancel
Save