From 2f903041495c942e4b32bf32656c4ddef1daca0c Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Fri, 12 Mar 2021 23:44:10 +0100 Subject: [PATCH] Add color and verbosity to Makefile --- 01_wait_forever/Cargo.toml | 1 - 01_wait_forever/Makefile | 37 ++++++++---- 01_wait_forever/build.rs | 1 + 02_runtime_init/Cargo.toml | 1 - 02_runtime_init/Makefile | 37 ++++++++---- 02_runtime_init/README.md | 2 +- 02_runtime_init/build.rs | 1 + 03_hacky_hello_world/Cargo.toml | 1 - 03_hacky_hello_world/Makefile | 37 ++++++++---- 03_hacky_hello_world/README.md | 8 +-- 03_hacky_hello_world/build.rs | 1 + 04_zero_overhead_abstraction/Cargo.toml | 1 - 04_zero_overhead_abstraction/Makefile | 37 ++++++++---- 04_zero_overhead_abstraction/README.md | 2 +- 04_zero_overhead_abstraction/build.rs | 1 + 05_safe_globals/Cargo.toml | 1 - 05_safe_globals/Makefile | 37 ++++++++---- 05_safe_globals/build.rs | 1 + 06_drivers_gpio_uart/Cargo.toml | 1 - 06_drivers_gpio_uart/Makefile | 37 ++++++++---- 06_drivers_gpio_uart/README.md | 18 +++--- 06_drivers_gpio_uart/build.rs | 1 + 07_uart_chainloader/Cargo.toml | 1 - 07_uart_chainloader/Makefile | 42 ++++++++----- 07_uart_chainloader/README.md | 39 +++++-------- 07_uart_chainloader/build.rs | 1 + 07_uart_chainloader/demo_payload_rpi3.img | Bin 6800 -> 6808 bytes 08_timestamps/Cargo.toml | 1 - 08_timestamps/Makefile | 37 ++++++++---- 08_timestamps/README.md | 39 +++++-------- 08_timestamps/build.rs | 1 + 09_hw_debug_JTAG/Cargo.toml | 1 - 09_hw_debug_JTAG/Makefile | 55 +++++++++++------- 09_hw_debug_JTAG/README.md | 38 ++++++------ 09_hw_debug_JTAG/build.rs | 1 + 10_privilege_level/Cargo.toml | 1 - 10_privilege_level/Makefile | 55 +++++++++++------- 10_privilege_level/build.rs | 1 + .../Cargo.toml | 1 - .../Makefile | 55 +++++++++++------- .../build.rs | 1 + 12_exceptions_part1_groundwork/Cargo.toml | 1 - 12_exceptions_part1_groundwork/Makefile | 55 +++++++++++------- 12_exceptions_part1_groundwork/build.rs | 1 + 13_integrated_testing/Makefile | 54 ++++++++++------- 13_integrated_testing/README.md | 55 +++++++----------- 13_integrated_testing/build.rs | 1 + 14_exceptions_part2_peripheral_IRQs/Makefile | 54 ++++++++++------- 14_exceptions_part2_peripheral_IRQs/build.rs | 1 + 15_virtual_mem_part2_mmio_remap/Makefile | 54 ++++++++++------- 15_virtual_mem_part2_mmio_remap/build.rs | 1 + X1_JTAG_boot/Cargo.toml | 1 - X1_JTAG_boot/Makefile | 37 ++++++++---- X1_JTAG_boot/build.rs | 1 + utils/color.mk.in | 5 ++ utils/minipush.rb | 1 + utils/miniterm.rb | 1 + 57 files changed, 570 insertions(+), 387 deletions(-) create mode 100644 utils/color.mk.in diff --git a/01_wait_forever/Cargo.toml b/01_wait_forever/Cargo.toml index 0595aa57..8a0187c4 100644 --- a/01_wait_forever/Cargo.toml +++ b/01_wait_forever/Cargo.toml @@ -4,7 +4,6 @@ version = "0.1.0" authors = ["Andre Richter "] edition = "2018" -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = [] diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index abecc406..eb2cc732 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -14,6 +16,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -d in_asm -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -24,6 +27,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -d in_asm -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -31,12 +35,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -53,8 +59,8 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -63,36 +69,45 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/01_wait_forever/build.rs b/01_wait_forever/build.rs index 40ee0284..3f0a2911 100644 --- a/01_wait_forever/build.rs +++ b/01_wait_forever/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/02_runtime_init/Cargo.toml b/02_runtime_init/Cargo.toml index 0f798fcb..a7580996 100644 --- a/02_runtime_init/Cargo.toml +++ b/02_runtime_init/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = [] diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index abecc406..eb2cc732 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -14,6 +16,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -d in_asm -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -24,6 +27,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -d in_asm -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -31,12 +35,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -53,8 +59,8 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -63,36 +69,45 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/02_runtime_init/README.md b/02_runtime_init/README.md index 50cce879..9241a195 100644 --- a/02_runtime_init/README.md +++ b/02_runtime_init/README.md @@ -33,9 +33,9 @@ diff -uNr 01_wait_forever/Cargo.toml 02_runtime_init/Cargo.toml +[profile.release] +lto = true + - # The features section is used to select the target board. [features] default = [] + bsp_rpi3 = [] diff -uNr 01_wait_forever/src/_arch/aarch64/cpu/boot.S 02_runtime_init/src/_arch/aarch64/cpu/boot.S --- 01_wait_forever/src/_arch/aarch64/cpu/boot.S diff --git a/02_runtime_init/build.rs b/02_runtime_init/build.rs index 40ee0284..3f0a2911 100644 --- a/02_runtime_init/build.rs +++ b/02_runtime_init/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/03_hacky_hello_world/Cargo.toml b/03_hacky_hello_world/Cargo.toml index 0f798fcb..a7580996 100644 --- a/03_hacky_hello_world/Cargo.toml +++ b/03_hacky_hello_world/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = [] diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index 9d5a8f78..75158b5b 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -14,6 +16,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -24,6 +27,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -31,12 +35,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -53,8 +59,8 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -63,36 +69,45 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/03_hacky_hello_world/README.md b/03_hacky_hello_world/README.md index c8dc66cc..753aa048 100644 --- a/03_hacky_hello_world/README.md +++ b/03_hacky_hello_world/README.md @@ -31,7 +31,7 @@ Kernel panic: Stopping here. diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile --- 02_runtime_init/Makefile +++ 03_hacky_hello_world/Makefile -@@ -11,7 +11,7 @@ +@@ -13,7 +13,7 @@ KERNEL_BIN = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 @@ -39,8 +39,8 @@ diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile + QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm - LINKER_FILE = src/bsp/raspberrypi/link.ld -@@ -21,7 +21,7 @@ + READELF_BINARY = aarch64-none-elf-readelf +@@ -24,7 +24,7 @@ KERNEL_BIN = kernel8.img QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = @@ -48,7 +48,7 @@ diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile + QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm - LINKER_FILE = src/bsp/raspberrypi/link.ld + READELF_BINARY = aarch64-none-elf-readelf diff -uNr 02_runtime_init/src/bsp/raspberrypi/console.rs 03_hacky_hello_world/src/bsp/raspberrypi/console.rs --- 02_runtime_init/src/bsp/raspberrypi/console.rs diff --git a/03_hacky_hello_world/build.rs b/03_hacky_hello_world/build.rs index 40ee0284..3f0a2911 100644 --- a/03_hacky_hello_world/build.rs +++ b/03_hacky_hello_world/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/04_zero_overhead_abstraction/Cargo.toml b/04_zero_overhead_abstraction/Cargo.toml index 51745543..5deb7010 100644 --- a/04_zero_overhead_abstraction/Cargo.toml +++ b/04_zero_overhead_abstraction/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = [] diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index 9d5a8f78..75158b5b 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -14,6 +16,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -24,6 +27,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -31,12 +35,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -53,8 +59,8 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -63,36 +69,45 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/04_zero_overhead_abstraction/README.md b/04_zero_overhead_abstraction/README.md index d20758d1..aeb3bfb8 100644 --- a/04_zero_overhead_abstraction/README.md +++ b/04_zero_overhead_abstraction/README.md @@ -13,7 +13,7 @@ diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.toml --- 03_hacky_hello_world/Cargo.toml +++ 04_zero_overhead_abstraction/Cargo.toml -@@ -18,3 +18,8 @@ +@@ -17,3 +17,8 @@ ##-------------------------------------------------------------------------------------------------- [dependencies] diff --git a/04_zero_overhead_abstraction/build.rs b/04_zero_overhead_abstraction/build.rs index 40ee0284..3f0a2911 100644 --- a/04_zero_overhead_abstraction/build.rs +++ b/04_zero_overhead_abstraction/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/05_safe_globals/Cargo.toml b/05_safe_globals/Cargo.toml index 51745543..5deb7010 100644 --- a/05_safe_globals/Cargo.toml +++ b/05_safe_globals/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = [] diff --git a/05_safe_globals/Makefile b/05_safe_globals/Makefile index 9d5a8f78..75158b5b 100644 --- a/05_safe_globals/Makefile +++ b/05_safe_globals/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -14,6 +16,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -24,6 +27,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -31,12 +35,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -53,8 +59,8 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) @@ -63,36 +69,45 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/05_safe_globals/build.rs b/05_safe_globals/build.rs index 40ee0284..3f0a2911 100644 --- a/05_safe_globals/build.rs +++ b/05_safe_globals/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/06_drivers_gpio_uart/Cargo.toml b/06_drivers_gpio_uart/Cargo.toml index b8906da1..df5f7f97 100644 --- a/06_drivers_gpio_uart/Cargo.toml +++ b/06_drivers_gpio_uart/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index ee7ebe38..07eb97b2 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -30,6 +33,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -37,12 +41,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -61,8 +67,8 @@ DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -79,19 +85,22 @@ EXEC_MINITERM = ruby ../utils/miniterm.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -99,19 +108,25 @@ miniterm: @$(DOCKER_MINITERM) $(EXEC_MINITERM) $(DEV_SERIAL) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/06_drivers_gpio_uart/README.md b/06_drivers_gpio_uart/README.md index a4176ca5..8b8e076d 100644 --- a/06_drivers_gpio_uart/README.md +++ b/06_drivers_gpio_uart/README.md @@ -110,8 +110,8 @@ Miniterm 1.0 diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml --- 05_safe_globals/Cargo.toml +++ 06_drivers_gpio_uart/Cargo.toml -@@ -10,8 +10,8 @@ - # The features section is used to select the target board. +@@ -9,8 +9,8 @@ + [features] default = [] -bsp_rpi3 = [] @@ -121,7 +121,7 @@ diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml ##-------------------------------------------------------------------------------------------------- ## Dependencies -@@ -19,6 +19,9 @@ +@@ -18,6 +18,9 @@ [dependencies] @@ -135,7 +135,7 @@ diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml diff -uNr 05_safe_globals/Makefile 06_drivers_gpio_uart/Makefile --- 05_safe_globals/Makefile +++ 06_drivers_gpio_uart/Makefile -@@ -5,6 +5,12 @@ +@@ -7,6 +7,12 @@ # Default to the RPi3 BSP ?= rpi3 @@ -148,15 +148,15 @@ diff -uNr 05_safe_globals/Makefile 06_drivers_gpio_uart/Makefile # BSP-specific arguments ifeq ($(BSP),rpi3) TARGET = aarch64-unknown-none-softfloat -@@ -52,13 +58,23 @@ +@@ -58,13 +64,23 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t +DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils +DOCKER_ARG_DEV = --privileged -v /dev:/dev - DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) - DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) + DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) -EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) +# Dockerize commands that require USB device passthrough only on Linux @@ -174,7 +174,7 @@ diff -uNr 05_safe_globals/Makefile 06_drivers_gpio_uart/Makefile all: $(KERNEL_BIN) -@@ -79,6 +95,9 @@ +@@ -88,6 +104,9 @@ @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -182,7 +182,7 @@ diff -uNr 05_safe_globals/Makefile 06_drivers_gpio_uart/Makefile + @$(DOCKER_MINITERM) $(EXEC_MINITERM) $(DEV_SERIAL) + clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) diff -uNr 05_safe_globals/src/_arch/aarch64/cpu.rs 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs diff --git a/06_drivers_gpio_uart/build.rs b/06_drivers_gpio_uart/build.rs index 40ee0284..3f0a2911 100644 --- a/06_drivers_gpio_uart/build.rs +++ b/06_drivers_gpio_uart/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/07_uart_chainloader/Cargo.toml b/07_uart_chainloader/Cargo.toml index b8906da1..df5f7f97 100644 --- a/07_uart_chainloader/Cargo.toml +++ b/07_uart_chainloader/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/07_uart_chainloader/Makefile b/07_uart_chainloader/Makefile index d32147d6..4fc73f55 100644 --- a/07_uart_chainloader/Makefile +++ b/07_uart_chainloader/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img @@ -31,6 +34,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img @@ -39,12 +43,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -63,8 +69,8 @@ DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -82,22 +88,26 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) -qemu qemuasm: - @echo "This board is not yet supported for QEMU." +qemu: + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) qemuasm: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU with ASM output") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) -d in_asm endif @@ -105,22 +115,26 @@ chainboot: @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(CHAINBOOT_DEMO_PAYLOAD) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ - --section .text \ - --section .got \ + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + --section .got \ $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/07_uart_chainloader/README.md b/07_uart_chainloader/README.md index 91242143..e67c7810 100644 --- a/07_uart_chainloader/README.md +++ b/07_uart_chainloader/README.md @@ -110,9 +110,9 @@ Binary files 06_drivers_gpio_uart/demo_payload_rpi4.img and 07_uart_chainloader/ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile --- 06_drivers_gpio_uart/Makefile +++ 07_uart_chainloader/Makefile -@@ -21,7 +21,8 @@ - OBJDUMP_BINARY = aarch64-none-elf-objdump +@@ -24,7 +24,8 @@ NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic @@ -120,9 +120,9 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile else ifeq ($(BSP),rpi4) TARGET = aarch64-unknown-none-softfloat KERNEL_BIN = kernel8.img -@@ -31,7 +32,8 @@ - OBJDUMP_BINARY = aarch64-none-elf-objdump +@@ -35,7 +36,8 @@ NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic @@ -130,7 +130,7 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile endif # Export for build.rs -@@ -68,13 +70,14 @@ +@@ -74,13 +76,14 @@ ifeq ($(UNAME_S),Linux) DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) @@ -148,18 +148,13 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile all: $(KERNEL_BIN) -@@ -88,15 +91,18 @@ - $(DOC_CMD) --document-private-items --open - - ifeq ($(QEMU_MACHINE_TYPE),) --qemu: -+qemu qemuasm: - @echo "This board is not yet supported for QEMU." - else +@@ -102,10 +105,14 @@ qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) + +qemuasm: $(KERNEL_BIN) ++ $(call colorecho, "\nLaunching QEMU with ASM output") + @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) -d in_asm endif @@ -169,19 +164,15 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile + @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(CHAINBOOT_DEMO_PAYLOAD) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) -@@ -108,7 +114,10 @@ - readelf --headers $(KERNEL_ELF) - - objdump: $(KERNEL_ELF) -- @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt -+ @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ -+ --section .text \ -+ --section .got \ -+ $(KERNEL_ELF) | rustfilt + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) +@@ -122,6 +129,7 @@ + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ ++ --section .got \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt diff -uNr 06_drivers_gpio_uart/src/_arch/aarch64/cpu/boot.rs 07_uart_chainloader/src/_arch/aarch64/cpu/boot.rs --- 06_drivers_gpio_uart/src/_arch/aarch64/cpu/boot.rs diff --git a/07_uart_chainloader/build.rs b/07_uart_chainloader/build.rs index 40ee0284..3f0a2911 100644 --- a/07_uart_chainloader/build.rs +++ b/07_uart_chainloader/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/07_uart_chainloader/demo_payload_rpi3.img b/07_uart_chainloader/demo_payload_rpi3.img index 13cf8aa1ed21d4896c05b5c25caf8d17c69289fa..a46c0d4149a22954048d876138fda7825a398700 100755 GIT binary patch delta 2141 zcmZ8iZA?>F7=BN03%%v5EiIIa&=wF{@Uvp6i|Iuq6VQy5ZvNO5a9_&D3@%yr!|fJz zKU`hXlS8K2A4UJHjV4QwWn|fgnk-o|Gf6i8Ef%(HrNu3aS;BRbyZ78)jPoY9H}8F( z_j%v*ocG)&+b^~!Yvpf^Fy#TykMqLdJ+%uK%pfTdFifZwFn1at=7)InoC#)60yrYz znK(-D-KnC1!0YZECDwSf2k}-11Q!KMAQyyiJ_KRW2(xc+z9dcD()gtVf#VxAekta( zwiN~2FbDZ^_&5siWS+S49EAM_m_3BaA`%0q>;wLNrNQ3u+W#dlBbN)D({r`Ln7b0e z;v(F@nD!7c!Jh|AK&PQ2loLwRr9@I%Yr!5w{Yym5UpB}P>oZB=UJ>Z16YOnPuy01f zH5h;Kn`-02S9zbQ;y)$t5I`w-{(P87}y^?{rqrk~cj^;nH1 zZ0;a$z=50xI%kXgl;9O4ePnZJq`XiTu;^mv#qxn`o87?#DGA7(`z8Pjav=la^&a7; zk7}g3JL=X@g1{VaxWptWqqyo46DXH)3pr_7!rAbq{p1|9UpE4 z`*~OmEea*+5^QiAHYj65L)dVuQ3`v_K*!OgJ{#Bv(cvxw$gv2B`8X2V98$-51h1jJ zgJ>_epJVg*3?SBv*t&I#Xz#j+VNH#VqqV$X4qdCnqAR#U&RN&u_K%^n1x~5vYz{f2 zVt@HS0<9e(mcSrd8^>woq;+e@(Aw|O+7YytH)BC-d(lb@T06X|#<-Q-MnJc2l6Vw6 z?5J>tc-e14A6cB)VSIrQ@62h_^9F~viTa0KG~4`jDpO2S-0$U?pNrc}BsgO!yG6*C z>`wW%D(?7ja0a0UJB;Dl*EDl4lwl)&6f?32P4GH zjZ(@X0rlG?B_o*A9um2i6(F4v9O>+udLvs5skl#0nad;v5ED@=dxlW|WEIU}Lz&{D z6yJESXCuvE^=z{-wI9z|uGy4AZqh$pYp1GgNG&&z)G|)OGEPgLm05RMXd^}ElW!XW ztk3Eey>;~7=_;Ha_Lg;%Z*5Jz5Vt}**T5r^#2U#K)b&r-(OF*;r+seq*&iTns2tjH zn>Bc9iRG-VPM?)Nx(amaNJsK$HbT1@bHvVWg+Bv0DLL?jB1D?A^mG@dq=)UcZ*^ic%1;K)joc0seI(&7 z?P2fRLt#%7eKp=dhfVS5S!mR1nN{@y{~mMAgfSi!_jD@(lQcKtbOZw?m=hnxqvk#A z4|`XCd$-~bcPkNM&Wkv=I2cKs+a!2e=rCsPoo}HV|1GF#i|5=AV3qT~Q`H#gmDJm0 zVJ!&CpKP+yMHbj6m6vRI=v!*A7|QYe_upi_4j(bIamT0fQ<%1gi;XnX05n$&iYgm% zG=vmy-i!mEMZ=bE16_EGCM)Vr-lBlF5pUp&&omVlKeUN*-VrpGFP`%VKTgo1eQfZU zr5Ew$M~zK6t>UpYwHo+86}#@NXLp@0f4>2X;?)9$r%R9bb{+KeAK12iyXVEuD0-A- zwyJ8f!u(Y~^z5%GaJ5AInXE3v=%RLYpFDX2|My^2e_y4)f0j4II;$h{VOJsBsNr)})uZDMJ>I3qcx<%mS-wZd*Q>hpxJc*M>9O9e0q!&6db8$TccG1>4#)NQ3pVMh z7tcBi=oCv~^omf3#@GTzuT>Nx7gJmz@)z4)bLh#t45KyGw!8Y0D%M+Ob2TT(e&%jUA4ThamLztoYnba}pLRBSdQg#TW!3Yc@i00w5EHTzWAE zi5>v&AcV4A1Z}4sqq04)&FRXehY^o@A-0U1avTzEoTn(+i7KytRF>PSyfw(}+vtdK z?l}4&Urnr_L-|oiG@w)Xv}aUClC-w{Plw3v`q-*d2@{;ij-I6_v&1jxuXRY`yZw9f|~*$tlH z88JJA01uMG+38hw?nUgFFAxjPiP=dDo5fi|OhU|y0awIeR2NBMHHJ_zGkxwrj3+FK zYoblaDO;S?So06eOjLDyEs`_pL{bS!5xHS>&!#{uOr&TqxjUOf8F?T9@nA^&ChAv; zUz%IuVFE>7=(s~MBsd% zRn@;o>68|_gy6dZOjp_z!xTx?u`+T^E8(vAedq*XN*AR<{9jA_P=(e1U*d-oH(?2potmnkEq4>Awv0Dp8L!Vz%V34mDe%qZ$I*W0hN%65<)O=jyQ||G&mlp49J_~?6PfFvoVpjOybSk- zXFo!U;($1ZIaIAQ8LajTKf@(dd-Eu&m|iSNXVBTOBsCT4O@m# ze2^$bXDVgv#b$M;*yElpK3pBg2kJap)B(uuBU6F;6g%gMC!mKO9qXn??78%7dUrLK z6V>ByHIF%E%cbQ+%81&P;xV5$7PUiBzK2g|g5C2B9q3OPk%5#kNTd}RpAWpFd3-+d z0AYFrJ$GFS(;(`@qg6N0xv#@r&i}$RGlG@LyiOJ>F)(hkx0_nYW%gmydv1Iz!hTGK z;f7JG$YplO+eMu0l=q7I7pyAQ+|l8XM1X!S2j@28$)4vxtvFMyXn2vM+#f9u!tXTMRv*Ol8;r)7Qh!P$%?)p zJKx%#+%8~J9ASLw`M6JN^RA&MLkIS6?e7mAOr}wzAL?rMDhYph=G9SR{moyw760GS zQ_S7c(s{I{X2k}mj#Jhe)vk`iY){Leda$*|a#_|}R;<+wNelN{_-1R3?NuHBu xV8kCM%Pir4x_{O7t+g4qm7LECexF +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -30,6 +33,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -37,12 +41,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -61,8 +67,8 @@ DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -79,19 +85,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -99,19 +108,25 @@ chainboot: $(KERNEL_BIN) @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(KERNEL_BIN) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/08_timestamps/README.md b/08_timestamps/README.md index 43c16538..55c12a7f 100644 --- a/08_timestamps/README.md +++ b/08_timestamps/README.md @@ -49,9 +49,9 @@ Binary files 07_uart_chainloader/demo_payload_rpi4.img and 08_timestamps/demo_pa diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile --- 07_uart_chainloader/Makefile +++ 08_timestamps/Makefile -@@ -21,8 +21,7 @@ - OBJDUMP_BINARY = aarch64-none-elf-objdump +@@ -24,8 +24,7 @@ NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 -C relocation-model=pic - CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img @@ -59,9 +59,9 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile else ifeq ($(BSP),rpi4) TARGET = aarch64-unknown-none-softfloat KERNEL_BIN = kernel8.img -@@ -32,8 +31,7 @@ - OBJDUMP_BINARY = aarch64-none-elf-objdump +@@ -36,8 +35,7 @@ NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld - RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 -C relocation-model=pic - CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img @@ -69,7 +69,7 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile endif # Export for build.rs -@@ -76,8 +74,7 @@ +@@ -82,8 +80,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -79,18 +79,13 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile all: $(KERNEL_BIN) -@@ -91,18 +88,15 @@ - $(DOC_CMD) --document-private-items --open - - ifeq ($(QEMU_MACHINE_TYPE),) --qemu qemuasm: -+qemu: - @echo "This board is not yet supported for QEMU." - else +@@ -105,14 +102,10 @@ qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) - -qemuasm: $(KERNEL_BIN) +- $(call colorecho, "\nLaunching QEMU with ASM output") - @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) -d in_asm endif @@ -100,19 +95,15 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile + @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(KERNEL_BIN) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) -@@ -114,10 +108,7 @@ - readelf --headers $(KERNEL_ELF) - - objdump: $(KERNEL_ELF) -- @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ -- --section .text \ -- --section .got \ -- $(KERNEL_ELF) | rustfilt -+ @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) +@@ -129,7 +122,6 @@ + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ +- --section .got \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt diff -uNr 07_uart_chainloader/src/_arch/aarch64/cpu/boot.rs 08_timestamps/src/_arch/aarch64/cpu/boot.rs --- 07_uart_chainloader/src/_arch/aarch64/cpu/boot.rs diff --git a/08_timestamps/build.rs b/08_timestamps/build.rs index 40ee0284..3f0a2911 100644 --- a/08_timestamps/build.rs +++ b/08_timestamps/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/09_hw_debug_JTAG/Cargo.toml b/09_hw_debug_JTAG/Cargo.toml index b8906da1..df5f7f97 100644 --- a/09_hw_debug_JTAG/Cargo.toml +++ b/09_hw_debug_JTAG/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/09_hw_debug_JTAG/Makefile b/09_hw_debug_JTAG/Makefile index 9105d297..038244e7 100644 --- a/09_hw_debug_JTAG/Makefile +++ b/09_hw_debug_JTAG/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -32,6 +35,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -41,12 +45,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -67,9 +73,9 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -91,19 +97,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -114,33 +123,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/09_hw_debug_JTAG/README.md b/09_hw_debug_JTAG/README.md index 918f7258..b13e1fa7 100644 --- a/09_hw_debug_JTAG/README.md +++ b/09_hw_debug_JTAG/README.md @@ -306,25 +306,25 @@ Thanks to [@naotaco](https://github.com/naotaco) for laying the groundwork for t diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile --- 08_timestamps/Makefile +++ 09_hw_debug_JTAG/Makefile -@@ -20,6 +20,8 @@ - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -23,6 +23,8 @@ OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf + OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg + JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) -@@ -30,6 +32,8 @@ - QEMU_RELEASE_ARGS = -serial stdio -display none +@@ -34,6 +36,8 @@ OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf + OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg + JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -@@ -59,9 +63,12 @@ +@@ -65,9 +69,12 @@ DOCKER_CMD = docker run --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils @@ -332,12 +332,12 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile DOCKER_ARG_DEV = --privileged -v /dev:/dev +DOCKER_ARG_NET = --network host - DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -+DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) - DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) ++DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) + DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux -@@ -69,12 +76,17 @@ +@@ -75,12 +82,17 @@ DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV) DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) @@ -356,7 +356,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile all: $(KERNEL_BIN) -@@ -98,6 +110,23 @@ +@@ -107,6 +119,19 @@ chainboot: $(KERNEL_BIN) @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(KERNEL_BIN) @@ -364,20 +364,16 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile + @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) + +openocd: ++ $(call colorecho, "\nLaunching OpenOCD") + @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) + -+define gen_gdb -+ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) -+ @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -+endef -+ -+gdb: -+ $(call gen_gdb,-C debuginfo=2) -+ -+gdb-opt0: -+ $(call gen_gdb,-C debuginfo=2 -C opt-level=0) ++gdb: RUSTC_MISC_ARGS += -C debuginfo=2 ++gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 ++gdb gdb-opt0: $(KERNEL_ELF) ++ $(call colorecho, "\nLaunching GDB") ++ @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) + clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) ``` diff --git a/09_hw_debug_JTAG/build.rs b/09_hw_debug_JTAG/build.rs index 40ee0284..3f0a2911 100644 --- a/09_hw_debug_JTAG/build.rs +++ b/09_hw_debug_JTAG/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/10_privilege_level/Cargo.toml b/10_privilege_level/Cargo.toml index b8906da1..df5f7f97 100644 --- a/10_privilege_level/Cargo.toml +++ b/10_privilege_level/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/10_privilege_level/Makefile b/10_privilege_level/Makefile index 9105d297..038244e7 100644 --- a/10_privilege_level/Makefile +++ b/10_privilege_level/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -32,6 +35,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -41,12 +45,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -67,9 +73,9 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -91,19 +97,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -114,33 +123,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/10_privilege_level/build.rs b/10_privilege_level/build.rs index 40ee0284..3f0a2911 100644 --- a/10_privilege_level/build.rs +++ b/10_privilege_level/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/11_virtual_mem_part1_identity_mapping/Cargo.toml b/11_virtual_mem_part1_identity_mapping/Cargo.toml index b8906da1..df5f7f97 100644 --- a/11_virtual_mem_part1_identity_mapping/Cargo.toml +++ b/11_virtual_mem_part1_identity_mapping/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/11_virtual_mem_part1_identity_mapping/Makefile b/11_virtual_mem_part1_identity_mapping/Makefile index 9105d297..038244e7 100644 --- a/11_virtual_mem_part1_identity_mapping/Makefile +++ b/11_virtual_mem_part1_identity_mapping/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -32,6 +35,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -41,12 +45,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -67,9 +73,9 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -91,19 +97,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -114,33 +123,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/11_virtual_mem_part1_identity_mapping/build.rs b/11_virtual_mem_part1_identity_mapping/build.rs index 40ee0284..3f0a2911 100644 --- a/11_virtual_mem_part1_identity_mapping/build.rs +++ b/11_virtual_mem_part1_identity_mapping/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/12_exceptions_part1_groundwork/Cargo.toml b/12_exceptions_part1_groundwork/Cargo.toml index b8906da1..df5f7f97 100644 --- a/12_exceptions_part1_groundwork/Cargo.toml +++ b/12_exceptions_part1_groundwork/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/12_exceptions_part1_groundwork/Makefile b/12_exceptions_part1_groundwork/Makefile index 9105d297..038244e7 100644 --- a/12_exceptions_part1_groundwork/Makefile +++ b/12_exceptions_part1_groundwork/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -32,6 +35,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -41,12 +45,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -67,9 +73,9 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -91,19 +97,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -114,33 +123,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/12_exceptions_part1_groundwork/build.rs b/12_exceptions_part1_groundwork/build.rs index 40ee0284..3f0a2911 100644 --- a/12_exceptions_part1_groundwork/build.rs +++ b/12_exceptions_part1_groundwork/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/13_integrated_testing/Makefile b/13_integrated_testing/Makefile index 74e67da5..32d13924 100644 --- a/13_integrated_testing/Makefile +++ b/13_integrated_testing/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -21,6 +23,7 @@ ifeq ($(BSP),rpi3) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -34,6 +37,7 @@ else ifeq ($(BSP),rpi4) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -81,10 +85,10 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -106,19 +110,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu test: - @echo $(QEMU_MISSING_STRING) + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) define KERNEL_TEST_RUNNER @@ -134,10 +141,11 @@ endef export KERNEL_TEST_RUNNER test: FEATURES += --features test_build test: + $(call colorecho, "\nCompiling test(s) - $(BSP)") @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) endif chainboot: $(KERNEL_BIN) @@ -147,33 +155,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/13_integrated_testing/README.md b/13_integrated_testing/README.md index 3f62ef6c..c0fc217b 100644 --- a/13_integrated_testing/README.md +++ b/13_integrated_testing/README.md @@ -819,12 +819,7 @@ diff -uNr 12_exceptions_part1_groundwork/.cargo/config.toml 13_integrated_testin diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo.toml --- 12_exceptions_part1_groundwork/Cargo.toml +++ 13_integrated_testing/Cargo.toml -@@ -7,22 +7,49 @@ - [profile.release] - lto = true - --# The features section is used to select the target board. - [features] +@@ -11,17 +11,45 @@ default = [] bsp_rpi3 = ["register"] bsp_rpi4 = ["register"] @@ -875,23 +870,23 @@ diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo. diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile --- 12_exceptions_part1_groundwork/Makefile +++ 13_integrated_testing/Makefile -@@ -18,6 +18,7 @@ +@@ -20,6 +20,7 @@ QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = raspi3 QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm - OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg -@@ -30,6 +31,7 @@ + READELF_BINARY = aarch64-none-elf-readelf +@@ -33,6 +34,7 @@ QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none + QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm - OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg -@@ -41,18 +43,30 @@ + READELF_BINARY = aarch64-none-elf-readelf +@@ -45,6 +47,15 @@ # Export for build.rs export LINKER_FILE @@ -904,19 +899,10 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile + endif +endif + -+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 + QEMU_MISSING_STRING = "This board is not yet supported for QEMU." --FEATURES = bsp_$(BSP) -+FEATURES = --features bsp_$(BSP) - COMPILER_ARGS = --target=$(TARGET) \ -- --features $(FEATURES) \ -+ $(FEATURES) \ - --release - - RUSTC_CMD = cargo rustc $(COMPILER_ARGS) + RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) +@@ -59,6 +70,7 @@ DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) CHECK_CMD = cargo check $(COMPILER_ARGS) @@ -924,15 +910,15 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile OBJCOPY_CMD = rust-objcopy \ --strip-all \ -O binary -@@ -69,6 +83,7 @@ +@@ -75,6 +87,7 @@ - DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) - DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -+DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) - DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) + DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) ++DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) + DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux -@@ -85,8 +100,8 @@ +@@ -91,8 +104,8 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb @@ -943,16 +929,16 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile all: $(KERNEL_BIN) -@@ -100,11 +115,29 @@ - $(DOC_CMD) --document-private-items --open +@@ -108,12 +121,31 @@ + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) -qemu: -- @echo "This board is not yet supported for QEMU." +qemu test: -+ @echo $(QEMU_MISSING_STRING) + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) + +define KERNEL_TEST_RUNNER @@ -968,10 +954,11 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile +export KERNEL_TEST_RUNNER +test: FEATURES += --features test_build +test: ++ $(call colorecho, "\nCompiling test(s) - $(BSP)") + @mkdir -p target + @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh + @chmod +x target/kernel_test_runner.sh -+ RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) ++ @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) endif chainboot: $(KERNEL_BIN) diff --git a/13_integrated_testing/build.rs b/13_integrated_testing/build.rs index 40ee0284..3f0a2911 100644 --- a/13_integrated_testing/build.rs +++ b/13_integrated_testing/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/14_exceptions_part2_peripheral_IRQs/Makefile b/14_exceptions_part2_peripheral_IRQs/Makefile index 74e67da5..32d13924 100644 --- a/14_exceptions_part2_peripheral_IRQs/Makefile +++ b/14_exceptions_part2_peripheral_IRQs/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -21,6 +23,7 @@ ifeq ($(BSP),rpi3) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -34,6 +37,7 @@ else ifeq ($(BSP),rpi4) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -81,10 +85,10 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -106,19 +110,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu test: - @echo $(QEMU_MISSING_STRING) + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) define KERNEL_TEST_RUNNER @@ -134,10 +141,11 @@ endef export KERNEL_TEST_RUNNER test: FEATURES += --features test_build test: + $(call colorecho, "\nCompiling test(s) - $(BSP)") @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) endif chainboot: $(KERNEL_BIN) @@ -147,33 +155,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/14_exceptions_part2_peripheral_IRQs/build.rs b/14_exceptions_part2_peripheral_IRQs/build.rs index 40ee0284..3f0a2911 100644 --- a/14_exceptions_part2_peripheral_IRQs/build.rs +++ b/14_exceptions_part2_peripheral_IRQs/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/15_virtual_mem_part2_mmio_remap/Makefile b/15_virtual_mem_part2_mmio_remap/Makefile index 74e67da5..32d13924 100644 --- a/15_virtual_mem_part2_mmio_remap/Makefile +++ b/15_virtual_mem_part2_mmio_remap/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -21,6 +23,7 @@ ifeq ($(BSP),rpi3) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -34,6 +37,7 @@ else ifeq ($(BSP),rpi4) QEMU_TEST_ARGS = $(QEMU_RELEASE_ARGS) -semihosting OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi4.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi4.img LINKER_FILE = src/bsp/raspberrypi/link.ld @@ -81,10 +85,10 @@ DOCKER_ARG_DIR_JTAG = -v $(shell pwd)/../X1_JTAG_boot:/work/X1_JTAG_boot DOCKER_ARG_DEV = --privileged -v /dev:/dev DOCKER_ARG_NET = --network host -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) -DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_GDB = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_NET) $(DOCKER_IMAGE) +DOCKER_TEST = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -106,19 +110,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu test: - @echo $(QEMU_MISSING_STRING) + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) define KERNEL_TEST_RUNNER @@ -134,10 +141,11 @@ endef export KERNEL_TEST_RUNNER test: FEATURES += --features test_build test: + $(call colorecho, "\nCompiling test(s) - $(BSP)") @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(TEST_CMD) $(TEST_ARG) endif chainboot: $(KERNEL_BIN) @@ -147,33 +155,35 @@ jtagboot: @$(DOCKER_JTAGBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(JTAG_BOOT_IMAGE) openocd: + $(call colorecho, "\nLaunching OpenOCD") @$(DOCKER_OPENOCD) openocd $(OPENOCD_ARG) -define gen_gdb - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC) $1" $(RUSTC_CMD) - @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) -endef - -gdb: - $(call gen_gdb,-C debuginfo=2) - -gdb-opt0: - $(call gen_gdb,-C debuginfo=2 -C opt-level=0) +gdb: RUSTC_MISC_ARGS += -C debuginfo=2 +gdb-opt0: RUSTC_MISC_ARGS += -C debuginfo=2 -C opt-level=0 +gdb gdb-opt0: $(KERNEL_ELF) + $(call colorecho, "\nLaunching GDB") + @$(DOCKER_GDB) gdb-multiarch -q $(KERNEL_ELF) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/15_virtual_mem_part2_mmio_remap/build.rs b/15_virtual_mem_part2_mmio_remap/build.rs index 40ee0284..3f0a2911 100644 --- a/15_virtual_mem_part2_mmio_remap/build.rs +++ b/15_virtual_mem_part2_mmio_remap/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/X1_JTAG_boot/Cargo.toml b/X1_JTAG_boot/Cargo.toml index b8906da1..df5f7f97 100644 --- a/X1_JTAG_boot/Cargo.toml +++ b/X1_JTAG_boot/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [profile.release] lto = true -# The features section is used to select the target board. [features] default = [] bsp_rpi3 = ["register"] diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index 27944c93..4206c528 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -2,6 +2,8 @@ ## ## Copyright (c) 2018-2021 Andre Richter +include ../utils/color.mk.in + # Default to the RPi3 BSP ?= rpi3 @@ -20,6 +22,7 @@ ifeq ($(BSP),rpi3) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a53 else ifeq ($(BSP),rpi4) @@ -30,6 +33,7 @@ else ifeq ($(BSP),rpi4) QEMU_RELEASE_ARGS = -serial stdio -display none OBJDUMP_BINARY = aarch64-none-elf-objdump NM_BINARY = aarch64-none-elf-nm + READELF_BINARY = aarch64-none-elf-readelf LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif @@ -37,12 +41,14 @@ endif # Export for build.rs export LINKER_FILE +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 -FEATURES = bsp_$(BSP) +FEATURES = --features bsp_$(BSP) COMPILER_ARGS = --target=$(TARGET) \ - --features $(FEATURES) \ + $(FEATURES) \ --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) @@ -61,8 +67,8 @@ DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i -t DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils DOCKER_ARG_DEV = --privileged -v /dev:/dev -DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) -DOCKER_ELFTOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) +DOCKER_QEMU = $(DOCKER_CMD_INTERACT) $(DOCKER_IMAGE) +DOCKER_TOOLS = $(DOCKER_CMD) $(DOCKER_IMAGE) # Dockerize commands that require USB device passthrough only on Linux ifeq ($(UNAME_S),Linux) @@ -79,19 +85,22 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb all: $(KERNEL_BIN) $(KERNEL_ELF): - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) + $(call colorecho, "\nCompiling kernel - $(BSP)") + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) $(KERNEL_BIN): $(KERNEL_ELF) @$(OBJCOPY_CMD) $(KERNEL_ELF) $(KERNEL_BIN) doc: - $(DOC_CMD) --document-private-items --open + $(call colorecho, "\nGenerating docs") + @$(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) qemu: - @echo "This board is not yet supported for QEMU." + $(call colorecho, "\n$(QEMU_MISSING_STRING)") else qemu: $(KERNEL_BIN) + $(call colorecho, "\nLaunching QEMU") @$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN) endif @@ -99,19 +108,25 @@ chainboot: $(KERNEL_BIN) @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(KERNEL_BIN) clippy: - RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) + @RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(CLIPPY_CMD) clean: rm -rf target $(KERNEL_BIN) readelf: $(KERNEL_ELF) - readelf --headers $(KERNEL_ELF) + $(call colorecho, "\nLaunching readelf") + @$(DOCKER_TOOLS) $(READELF_BINARY) --headers $(KERNEL_ELF) objdump: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(OBJDUMP_BINARY) --disassemble --demangle $(KERNEL_ELF) | rustfilt + $(call colorecho, "\nLaunching objdump") + @$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \ + --section .text \ + --section .rodata \ + $(KERNEL_ELF) | rustfilt nm: $(KERNEL_ELF) - @$(DOCKER_ELFTOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt + $(call colorecho, "\nLaunching nm") + @$(DOCKER_TOOLS) $(NM_BINARY) --demangle --print-size $(KERNEL_ELF) | sort | rustfilt # For rust-analyzer check: diff --git a/X1_JTAG_boot/build.rs b/X1_JTAG_boot/build.rs index 40ee0284..3f0a2911 100644 --- a/X1_JTAG_boot/build.rs +++ b/X1_JTAG_boot/build.rs @@ -4,4 +4,5 @@ fn main() { let linker_file = env::var("LINKER_FILE").unwrap(); println!("cargo:rerun-if-changed={}", linker_file); + println!("cargo:rerun-if-changed=build.rs"); } diff --git a/utils/color.mk.in b/utils/color.mk.in new file mode 100644 index 00000000..1945a10c --- /dev/null +++ b/utils/color.mk.in @@ -0,0 +1,5 @@ +define colorecho + @tput setaf 6 + @echo $1 + @tput sgr0 +endef diff --git a/utils/minipush.rb b/utils/minipush.rb index bda97bb1..14c1e6a5 100755 --- a/utils/minipush.rb +++ b/utils/minipush.rb @@ -112,6 +112,7 @@ class MiniPush < MiniTerm end end +puts puts 'Minipush 1.0'.cyan puts diff --git a/utils/miniterm.rb b/utils/miniterm.rb index 09156669..ff0c64fb 100755 --- a/utils/miniterm.rb +++ b/utils/miniterm.rb @@ -126,6 +126,7 @@ class MiniTerm end if __FILE__ == $PROGRAM_NAME + puts puts 'Miniterm 1.0'.cyan puts