diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 9f1da522..64502afd 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -13,6 +13,8 @@ source_files_exts = ['.S', '.rs', '.rb'] staged_files = `git --no-pager diff --name-only --cached --diff-filter=d`.split(/\n/) staged_files.select! do |f| + next if f.include?('build.rs') + f.include?('Makefile') || f.include?('Dockerfile') || source_files_exts.include?(File.extname(f)) diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index ffb3c79d..8abfde11 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/01_wait_forever/build.rs b/01_wait_forever/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/01_wait_forever/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index ffb3c79d..8abfde11 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/02_runtime_init/build.rs b/02_runtime_init/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/02_runtime_init/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/02_runtime_init/kernel8.img b/02_runtime_init/kernel8.img old mode 100755 new mode 100644 diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index dd6aaab5..da24d662 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/03_hacky_hello_world/build.rs b/03_hacky_hello_world/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/03_hacky_hello_world/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index dd6aaab5..da24d662 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/04_zero_overhead_abstraction/build.rs b/04_zero_overhead_abstraction/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/04_zero_overhead_abstraction/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/05_safe_globals/Makefile b/05_safe_globals/Makefile index dd6aaab5..da24d662 100644 --- a/05_safe_globals/Makefile +++ b/05_safe_globals/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/05_safe_globals/build.rs b/05_safe_globals/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/05_safe_globals/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index dd6aaab5..da24d662 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -24,7 +24,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -51,14 +52,12 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) .PHONY: all doc qemu clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -77,11 +76,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/06_drivers_gpio_uart/build.rs b/06_drivers_gpio_uart/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/06_drivers_gpio_uart/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/07_uart_chainloader/Makefile b/07_uart_chainloader/Makefile index 46d7ae53..f9caa6a1 100644 --- a/07_uart_chainloader/Makefile +++ b/07_uart_chainloader/Makefile @@ -32,7 +32,8 @@ else ifeq ($(BSP),rpi4) CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -69,14 +70,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu qemuasm chainboot clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -101,11 +100,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/07_uart_chainloader/README.md b/07_uart_chainloader/README.md index 51544dfa..99be098d 100644 --- a/07_uart_chainloader/README.md +++ b/07_uart_chainloader/README.md @@ -126,8 +126,8 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile + CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img endif - SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') -@@ -44,12 +52,22 @@ + # Export for build.rs +@@ -45,12 +53,22 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial @@ -150,9 +150,9 @@ diff -uNr 06_drivers_gpio_uart/Makefile 07_uart_chainloader/Makefile + +.PHONY: all doc qemu qemuasm chainboot clippy clean readelf objdump nm - all: clean $(OUTPUT) - -@@ -64,13 +82,19 @@ + all: + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) +@@ -63,13 +81,19 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) diff --git a/07_uart_chainloader/build.rs b/07_uart_chainloader/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/07_uart_chainloader/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/08_timestamps/Makefile b/08_timestamps/Makefile index 4b18773a..a765953e 100644 --- a/08_timestamps/Makefile +++ b/08_timestamps/Makefile @@ -30,7 +30,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -67,14 +68,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -96,11 +95,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/08_timestamps/README.md b/08_timestamps/README.md index bcbb663f..ace4428a 100644 --- a/08_timestamps/README.md +++ b/08_timestamps/README.md @@ -65,17 +65,17 @@ diff -uNr 07_uart_chainloader/Makefile 08_timestamps/Makefile + RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif - SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') -@@ -67,7 +65,7 @@ + # Export for build.rs +@@ -68,7 +66,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb -.PHONY: all doc qemu qemuasm chainboot clippy clean readelf objdump nm +.PHONY: all doc qemu chainboot clippy clean readelf objdump nm - all: clean $(OUTPUT) - -@@ -82,18 +80,15 @@ + all: + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) +@@ -81,18 +79,15 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) diff --git a/08_timestamps/build.rs b/08_timestamps/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/08_timestamps/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/09_hw_debug_JTAG/Makefile b/09_hw_debug_JTAG/Makefile index 24dd68c2..681f90f9 100644 --- a/09_hw_debug_JTAG/Makefile +++ b/09_hw_debug_JTAG/Makefile @@ -34,7 +34,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -78,14 +79,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -113,10 +112,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -125,11 +124,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/09_hw_debug_JTAG/README.md b/09_hw_debug_JTAG/README.md index 16d1fe3c..66dedfe3 100644 --- a/09_hw_debug_JTAG/README.md +++ b/09_hw_debug_JTAG/README.md @@ -323,7 +323,7 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile LINKER_FILE = src/bsp/raspberrypi/link.ld RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -@@ -51,21 +55,28 @@ +@@ -52,21 +56,28 @@ DOCKER_IMAGE = rustembedded/osdev-utils DOCKER_CMD = docker run -it --rm -v $(shell pwd):/work/tutorial -w /work/tutorial DOCKER_ARG_DIR_UTILS = -v $(shell pwd)/../utils:/work/utils @@ -351,9 +351,9 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile -.PHONY: all doc qemu chainboot clippy clean readelf objdump nm +.PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm - all: clean $(OUTPUT) - -@@ -90,6 +101,24 @@ + all: + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) +@@ -89,6 +100,24 @@ chainboot: all @$(DOCKER_CHAINBOOT) $(EXEC_MINIPUSH) $(DEV_SERIAL) $(OUTPUT) @@ -369,10 +369,10 @@ diff -uNr 08_timestamps/Makefile 09_hw_debug_JTAG/Makefile + @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag +endef + -+gdb: clean $(SOURCES) ++gdb: + $(call gen_gdb,-C debuginfo=2) + -+gdb-opt0: clean $(SOURCES) ++gdb-opt0: + $(call gen_gdb,-C debuginfo=2 -C opt-level=0) + clippy: diff --git a/09_hw_debug_JTAG/build.rs b/09_hw_debug_JTAG/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/09_hw_debug_JTAG/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/10_privilege_level/Makefile b/10_privilege_level/Makefile index 24dd68c2..681f90f9 100644 --- a/10_privilege_level/Makefile +++ b/10_privilege_level/Makefile @@ -34,7 +34,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -78,14 +79,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -113,10 +112,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -125,11 +124,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/10_privilege_level/build.rs b/10_privilege_level/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/10_privilege_level/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/11_virtual_memory/Makefile b/11_virtual_memory/Makefile index 24dd68c2..681f90f9 100644 --- a/11_virtual_memory/Makefile +++ b/11_virtual_memory/Makefile @@ -34,7 +34,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -78,14 +79,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -113,10 +112,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -125,11 +124,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/11_virtual_memory/build.rs b/11_virtual_memory/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/11_virtual_memory/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/12_exceptions_part1_groundwork/Makefile b/12_exceptions_part1_groundwork/Makefile index 24dd68c2..681f90f9 100644 --- a/12_exceptions_part1_groundwork/Makefile +++ b/12_exceptions_part1_groundwork/Makefile @@ -34,7 +34,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -78,14 +79,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -113,10 +112,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -125,11 +124,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/12_exceptions_part1_groundwork/build.rs b/12_exceptions_part1_groundwork/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/12_exceptions_part1_groundwork/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/13_integrated_testing/Makefile b/13_integrated_testing/Makefile index d2800434..5e25ab07 100644 --- a/13_integrated_testing/Makefile +++ b/13_integrated_testing/Makefile @@ -36,6 +36,9 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif +# Export for build.rs +export LINKER_FILE + # Testing-specific arguments ifdef TEST ifeq ($(TEST),unit) @@ -47,8 +50,6 @@ endif QEMU_MISSING_STRING = "This board is not yet supported for QEMU." -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') - RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -94,14 +95,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm test -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -122,7 +121,7 @@ define KERNEL_TEST_RUNNER endef export KERNEL_TEST_RUNNER -test: $(SOURCES) +test: @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh @@ -144,10 +143,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -156,11 +155,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/13_integrated_testing/README.md b/13_integrated_testing/README.md index 5acc833c..4e157a59 100644 --- a/13_integrated_testing/README.md +++ b/13_integrated_testing/README.md @@ -354,7 +354,7 @@ define KERNEL_TEST_RUNNER endef export KERNEL_TEST_RUNNER -test: $(SOURCES) +test: @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh @@ -827,7 +827,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/rpi3.cfg JTAG_BOOT_IMAGE = ../X1_JTAG_boot/jtag_boot_rpi3.img LINKER_FILE = src/bsp/raspberrypi/link.ld -@@ -28,12 +29,24 @@ +@@ -28,6 +29,7 @@ QEMU_BINARY = qemu-system-aarch64 QEMU_MACHINE_TYPE = QEMU_RELEASE_ARGS = -serial stdio -display none @@ -835,8 +835,9 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile OPENOCD_ARG = -f /openocd/tcl/interface/ftdi/olimex-arm-usb-tiny-h.cfg -f /openocd/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 +@@ -37,6 +39,17 @@ + # Export for build.rs + export LINKER_FILE +# Testing-specific arguments +ifdef TEST @@ -849,10 +850,10 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile + +QEMU_MISSING_STRING = "This board is not yet supported for QEMU." + - SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') - RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) -@@ -46,6 +59,7 @@ + RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs + +@@ -47,6 +60,7 @@ RUSTC_CMD = cargo rustc $(COMPILER_ARGS) DOC_CMD = cargo doc $(COMPILER_ARGS) CLIPPY_CMD = cargo clippy $(COMPILER_ARGS) @@ -860,7 +861,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile OBJCOPY_CMD = rust-objcopy \ --strip-all \ -O binary -@@ -53,18 +67,20 @@ +@@ -54,18 +68,20 @@ KERNEL_ELF = target/$(TARGET)/release/kernel DOCKER_IMAGE = rustembedded/osdev-utils @@ -885,16 +886,16 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile DOCKER_CHAINBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_IMAGE) DOCKER_JTAGBOOT = $(DOCKER_CMD_DEV) $(DOCKER_ARG_DIR_UTILS) $(DOCKER_ARG_DIR_JTAG) $(DOCKER_IMAGE) -@@ -76,7 +92,7 @@ +@@ -77,7 +93,7 @@ EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE) EXEC_MINIPUSH = ruby ../utils/minipush.rb -.PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm +.PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm test - all: clean $(OUTPUT) - -@@ -91,11 +107,26 @@ + all: + RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) +@@ -90,11 +106,26 @@ $(DOC_CMD) --document-private-items --open ifeq ($(QEMU_MACHINE_TYPE),) @@ -915,7 +916,7 @@ diff -uNr 12_exceptions_part1_groundwork/Makefile 13_integrated_testing/Makefile +endef + +export KERNEL_TEST_RUNNER -+test: $(SOURCES) ++test: + @mkdir -p target + @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh + @chmod +x target/kernel_test_runner.sh diff --git a/13_integrated_testing/build.rs b/13_integrated_testing/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/13_integrated_testing/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/14_exceptions_part2_peripheral_IRQs/Makefile b/14_exceptions_part2_peripheral_IRQs/Makefile index 49930b0d..7f6d75c7 100644 --- a/14_exceptions_part2_peripheral_IRQs/Makefile +++ b/14_exceptions_part2_peripheral_IRQs/Makefile @@ -36,6 +36,9 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif +# Export for build.rs +export LINKER_FILE + # Testing-specific arguments ifdef TEST ifeq ($(TEST),unit) @@ -47,8 +50,6 @@ endif QEMU_MISSING_STRING = "This board is not yet supported for QEMU." -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') - RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -95,14 +96,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot jtagboot openocd gdb gdb-opt0 clippy clean readelf objdump nm test -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -125,7 +124,7 @@ endef export KERNEL_TEST_RUNNER test: FEATURES += --features qemu-quirks -test: $(SOURCES) +test: @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh @chmod +x target/kernel_test_runner.sh @@ -147,10 +146,10 @@ define gen_gdb @$(DOCKER_GDB) gdb-multiarch -q kernel_for_jtag endef -gdb: clean $(SOURCES) +gdb: $(call gen_gdb,-C debuginfo=2) -gdb-opt0: clean $(SOURCES) +gdb-opt0: $(call gen_gdb,-C debuginfo=2 -C opt-level=0) clippy: @@ -159,11 +158,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/14_exceptions_part2_peripheral_IRQs/README.md b/14_exceptions_part2_peripheral_IRQs/README.md index 58a042f5..11af3c58 100644 --- a/14_exceptions_part2_peripheral_IRQs/README.md +++ b/14_exceptions_part2_peripheral_IRQs/README.md @@ -762,7 +762,7 @@ diff -uNr 13_integrated_testing/Cargo.toml 14_exceptions_part2_peripheral_IRQs/C diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Makefile --- 13_integrated_testing/Makefile +++ 14_exceptions_part2_peripheral_IRQs/Makefile -@@ -52,8 +52,9 @@ +@@ -53,8 +53,9 @@ RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -773,7 +773,7 @@ diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Mak --release RUSTC_CMD = cargo rustc $(COMPILER_ARGS) -@@ -106,6 +107,7 @@ +@@ -105,6 +106,7 @@ doc: $(DOC_CMD) --document-private-items --open @@ -781,12 +781,12 @@ diff -uNr 13_integrated_testing/Makefile 14_exceptions_part2_peripheral_IRQs/Mak ifeq ($(QEMU_MACHINE_TYPE),) qemu test: @echo $(QEMU_MISSING_STRING) -@@ -122,6 +124,7 @@ +@@ -121,6 +123,7 @@ endef export KERNEL_TEST_RUNNER +test: FEATURES += --features qemu-quirks - test: $(SOURCES) + test: @mkdir -p target @echo "$$KERNEL_TEST_RUNNER" > target/kernel_test_runner.sh diff --git a/14_exceptions_part2_peripheral_IRQs/build.rs b/14_exceptions_part2_peripheral_IRQs/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/14_exceptions_part2_peripheral_IRQs/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/14_exceptions_part2_peripheral_IRQs/kernel b/14_exceptions_part2_peripheral_IRQs/kernel index de22d5dd..f9e18b29 100755 Binary files a/14_exceptions_part2_peripheral_IRQs/kernel and b/14_exceptions_part2_peripheral_IRQs/kernel differ diff --git a/14_exceptions_part2_peripheral_IRQs/kernel8.img b/14_exceptions_part2_peripheral_IRQs/kernel8.img index 51af80c1..a391b5a4 100755 Binary files a/14_exceptions_part2_peripheral_IRQs/kernel8.img and b/14_exceptions_part2_peripheral_IRQs/kernel8.img differ diff --git a/X1_JTAG_boot/Makefile b/X1_JTAG_boot/Makefile index 4b18773a..a765953e 100644 --- a/X1_JTAG_boot/Makefile +++ b/X1_JTAG_boot/Makefile @@ -30,7 +30,8 @@ else ifeq ($(BSP),rpi4) RUSTC_MISC_ARGS = -C target-cpu=cortex-a72 endif -SOURCES = $(shell find . -name '*.rs' -o -name '*.S' -o -name '*.ld') +# Export for build.rs +export LINKER_FILE RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS) RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs @@ -67,14 +68,12 @@ EXEC_MINIPUSH = ruby ../utils/minipush.rb .PHONY: all doc qemu chainboot clippy clean readelf objdump nm -all: clean $(OUTPUT) - -$(KERNEL_ELF): $(SOURCES) +all: RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD) - -$(OUTPUT): $(KERNEL_ELF) - cp $< . - $(OBJCOPY_CMD) $< $(OUTPUT) + @if [ ! -f kernel ] || [ $(KERNEL_ELF) -nt kernel ]; then \ + cp $(KERNEL_ELF) .; \ + $(OBJCOPY_CMD) kernel $(OUTPUT); \ + fi doc: $(DOC_CMD) --document-private-items --open @@ -96,11 +95,11 @@ clippy: clean: rm -rf target -readelf: +readelf: all readelf -a $(KERNEL_ELF) -objdump: +objdump: all rust-objdump --arch-name aarch64 -disassemble -no-show-raw-insn -print-imm-hex $(KERNEL_ELF) -nm: +nm: all rust-nm --demangle --print-size $(KERNEL_ELF) | sort diff --git a/X1_JTAG_boot/build.rs b/X1_JTAG_boot/build.rs new file mode 100644 index 00000000..40ee0284 --- /dev/null +++ b/X1_JTAG_boot/build.rs @@ -0,0 +1,7 @@ +use std::env; + +fn main() { + let linker_file = env::var("LINKER_FILE").unwrap(); + + println!("cargo:rerun-if-changed={}", linker_file); +} diff --git a/utils/devtool.rb b/utils/devtool.rb index e558f11f..83ec5243 100755 --- a/utils/devtool.rb +++ b/utils/devtool.rb @@ -239,6 +239,7 @@ class DevTool files = tracked_files.select do |f| next unless File.exist?(f) + next if f.include?('build.rs') f.include?('Makefile') || f.include?('Dockerfile') ||