Linker: Provide LD script folder via cmdline

This enables shorter relative paths for ld-internal INCLUDE, which adds more
flexibility wrt to directory structure.
pull/154/head
Andre Richter 2 years ago
parent 0b449706f3
commit cb4ae40ac2
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -15,10 +15,10 @@ BSP ?= rpi3
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -28,7 +28,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -39,24 +39,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -15,10 +15,10 @@ BSP ?= rpi3
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -28,7 +28,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -39,24 +39,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -52,7 +52,7 @@ diff -uNr 01_wait_forever/Cargo.toml 02_runtime_init/Cargo.toml
diff -uNr 01_wait_forever/Makefile 02_runtime_init/Makefile
--- 01_wait_forever/Makefile
+++ 02_runtime_init/Makefile
@@ -153,6 +153,8 @@
@@ -162,6 +162,8 @@
$(call colorecho, "\nLaunching objdump")
@$(DOCKER_TOOLS) $(OBJDUMP_BINARY) --disassemble --demangle \
--section .text \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -15,10 +15,10 @@ BSP ?= rpi3
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -28,7 +28,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -39,24 +39,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -70,7 +70,7 @@ diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile
OBJDUMP_BINARY = aarch64-none-elf-objdump
NM_BINARY = aarch64-none-elf-nm
READELF_BINARY = aarch64-none-elf-readelf
@@ -71,17 +71,20 @@
@@ -80,17 +80,20 @@
--strip-all \
-O binary
@ -94,7 +94,7 @@ diff -uNr 02_runtime_init/Makefile 03_hacky_hello_world/Makefile
@@ -169,3 +172,28 @@
@@ -178,3 +181,28 @@
##------------------------------------------------------------------------------
check:
@RUSTFLAGS="$(RUSTFLAGS)" $(CHECK_CMD) --message-format=json

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -15,10 +15,10 @@ BSP ?= rpi3
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -28,7 +28,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -39,24 +39,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -31,7 +31,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -42,24 +42,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -155,7 +155,7 @@ diff -uNr 04_safe_globals/Makefile 05_drivers_gpio_uart/Makefile
##--------------------------------------------------------------------------------------------------
@@ -73,6 +76,7 @@
@@ -82,6 +85,7 @@
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
EXEC_TEST_DISPATCH = ruby ../common/tests/dispatch.rb
@ -163,7 +163,7 @@ diff -uNr 04_safe_globals/Makefile 05_drivers_gpio_uart/Makefile
##------------------------------------------------------------------------------
## Dockerization
@@ -80,18 +84,26 @@
@@ -89,18 +93,26 @@
DOCKER_CMD = docker run -t --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i
DOCKER_ARG_DIR_COMMON = -v $(shell pwd)/../common:/work/common
@ -191,7 +191,7 @@ diff -uNr 04_safe_globals/Makefile 05_drivers_gpio_uart/Makefile
all: $(KERNEL_BIN)
@@ -131,6 +143,12 @@
@@ -140,6 +152,12 @@
endif
##------------------------------------------------------------------------------

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -31,7 +31,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img
else ifeq ($(BSP),rpi4)
@ -43,25 +43,34 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -139,8 +139,8 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
--- 05_drivers_gpio_uart/Makefile
+++ 06_uart_chainloader/Makefile
@@ -23,27 +23,29 @@
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
- TARGET = aarch64-unknown-none-softfloat
- KERNEL_BIN = kernel8.img
@ -150,8 +150,6 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
- 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
+ TARGET = aarch64-unknown-none-softfloat
+ KERNEL_BIN = kernel8.img
+ QEMU_BINARY = qemu-system-aarch64
@ -160,7 +158,8 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
+ 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
LD_SCRIPT_PATH = src/bsp/raspberrypi
- RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
+ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img
else ifeq ($(BSP),rpi4)
@ -172,8 +171,6 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
- 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
+ TARGET = aarch64-unknown-none-softfloat
+ KERNEL_BIN = kernel8.img
+ QEMU_BINARY = qemu-system-aarch64
@ -182,13 +179,14 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
+ 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
LD_SCRIPT_PATH = src/bsp/raspberrypi
- RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
+ CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
@@ -75,8 +77,8 @@
# Export for build.rs.
@@ -84,8 +86,8 @@
-O binary
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
@ -199,7 +197,7 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
##------------------------------------------------------------------------------
## Dockerization
@@ -95,7 +97,7 @@
@@ -104,7 +106,7 @@
ifeq ($(shell uname -s),Linux)
DOCKER_CMD_DEV = $(DOCKER_CMD_INTERACT) $(DOCKER_ARG_DEV)
@ -208,7 +206,7 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
endif
@@ -103,7 +105,7 @@
@@ -112,7 +114,7 @@
##--------------------------------------------------------------------------------------------------
## Targets
##--------------------------------------------------------------------------------------------------
@ -217,7 +215,7 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
all: $(KERNEL_BIN)
@@ -132,7 +134,7 @@
@@ -141,7 +143,7 @@
##------------------------------------------------------------------------------
ifeq ($(QEMU_MACHINE_TYPE),) # QEMU is not supported for the board.
@ -226,7 +224,7 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
$(call colorecho, "\n$(QEMU_MISSING_STRING)")
else # QEMU is supported.
@@ -140,13 +142,18 @@
@@ -149,13 +151,18 @@
qemu: $(KERNEL_BIN)
$(call colorecho, "\nLaunching QEMU")
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN)
@ -248,7 +246,7 @@ diff -uNr 05_drivers_gpio_uart/Makefile 06_uart_chainloader/Makefile
##------------------------------------------------------------------------------
## Run clippy
@@ -210,7 +217,8 @@
@@ -219,7 +226,8 @@
##------------------------------------------------------------------------------
test_boot: $(KERNEL_BIN)
$(call colorecho, "\nBoot test - $(BSP)")

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -31,7 +31,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -42,24 +42,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -63,8 +63,8 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
--- 06_uart_chainloader/Makefile
+++ 07_timestamps/Makefile
@@ -23,29 +23,27 @@
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
- TARGET = aarch64-unknown-none-softfloat
- KERNEL_BIN = kernel8.img
@ -74,9 +74,6 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
- 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
- CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img
+ TARGET = aarch64-unknown-none-softfloat
+ KERNEL_BIN = kernel8.img
+ QEMU_BINARY = qemu-system-aarch64
@ -85,7 +82,9 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
+ 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
LD_SCRIPT_PATH = src/bsp/raspberrypi
- RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
- CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi3.img
+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
- TARGET = aarch64-unknown-none-softfloat
@ -96,9 +95,6 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
- 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
- CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
+ TARGET = aarch64-unknown-none-softfloat
+ KERNEL_BIN = kernel8.img
+ QEMU_BINARY = qemu-system-aarch64
@ -107,12 +103,14 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
+ 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
LD_SCRIPT_PATH = src/bsp/raspberrypi
- RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
- CHAINBOOT_DEMO_PAYLOAD = demo_payload_rpi4.img
+ RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
@@ -77,7 +75,7 @@
# Export for build.rs.
@@ -86,7 +84,7 @@
-O binary
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
@ -121,7 +119,7 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
EXEC_MINIPUSH = ruby ../common/serial/minipush.rb
##------------------------------------------------------------------------------
@@ -134,7 +132,7 @@
@@ -143,7 +141,7 @@
##------------------------------------------------------------------------------
ifeq ($(QEMU_MACHINE_TYPE),) # QEMU is not supported for the board.
@ -130,7 +128,7 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
$(call colorecho, "\n$(QEMU_MISSING_STRING)")
else # QEMU is supported.
@@ -143,17 +141,13 @@
@@ -152,17 +150,13 @@
$(call colorecho, "\nLaunching QEMU")
@$(DOCKER_QEMU) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN)
@ -149,7 +147,7 @@ diff -uNr 06_uart_chainloader/Makefile 07_timestamps/Makefile
##------------------------------------------------------------------------------
## Run clippy
@@ -217,8 +211,7 @@
@@ -226,8 +220,7 @@
##------------------------------------------------------------------------------
test_boot: $(KERNEL_BIN)
$(call colorecho, "\nBoot test - $(BSP)")

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -33,7 +33,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -46,24 +46,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -326,7 +326,7 @@ diff -uNr 07_timestamps/Makefile 08_hw_debug_JTAG/Makefile
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
@@ -42,6 +44,8 @@
@ -335,10 +335,10 @@ diff -uNr 07_timestamps/Makefile 08_hw_debug_JTAG/Makefile
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
@@ -84,18 +88,25 @@
@@ -93,18 +97,25 @@
DOCKER_CMD = docker run -t --rm -v $(shell pwd):/work/tutorial -w /work/tutorial
DOCKER_CMD_INTERACT = $(DOCKER_CMD) -i
DOCKER_ARG_DIR_COMMON = -v $(shell pwd)/../common:/work/common
@ -364,7 +364,7 @@ diff -uNr 07_timestamps/Makefile 08_hw_debug_JTAG/Makefile
endif
@@ -194,6 +205,35 @@
@@ -203,6 +214,35 @@

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -33,7 +33,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -46,24 +46,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -33,7 +33,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -46,24 +46,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -33,7 +33,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -46,24 +46,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -25,10 +25,10 @@ endif
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -41,7 +41,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -55,24 +55,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1006,7 +1006,7 @@ diff -uNr 11_exceptions_part1_groundwork/Makefile 12_integrated_testing/Makefile
OBJDUMP_BINARY = aarch64-none-elf-objdump
NM_BINARY = aarch64-none-elf-nm
READELF_BINARY = aarch64-none-elf-readelf
@@ -74,6 +83,7 @@
@@ -83,6 +92,7 @@
DOC_CMD = cargo doc $(COMPILER_ARGS)
CLIPPY_CMD = cargo clippy $(COMPILER_ARGS)
CHECK_CMD = cargo check $(COMPILER_ARGS)
@ -1014,7 +1014,7 @@ diff -uNr 11_exceptions_part1_groundwork/Makefile 12_integrated_testing/Makefile
OBJCOPY_CMD = rust-objcopy \
--strip-all \
-O binary
@@ -237,11 +247,11 @@
@@ -246,11 +256,11 @@
##--------------------------------------------------------------------------------------------------
## Testing targets
##--------------------------------------------------------------------------------------------------
@ -1028,7 +1028,7 @@ diff -uNr 11_exceptions_part1_groundwork/Makefile 12_integrated_testing/Makefile
$(call colorecho, "\n$(QEMU_MISSING_STRING)")
else # QEMU is supported.
@@ -253,6 +263,43 @@
@@ -262,6 +272,43 @@
$(call colorecho, "\nBoot test - $(BSP)")
@$(DOCKER_TEST) $(EXEC_TEST_DISPATCH) $(EXEC_QEMU) $(QEMU_RELEASE_ARGS) -kernel $(KERNEL_BIN)

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -25,10 +25,10 @@ endif
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -41,7 +41,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -55,24 +55,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -25,10 +25,10 @@ endif
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -41,7 +41,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -55,24 +55,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -25,10 +25,10 @@ endif
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -41,7 +41,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -55,24 +55,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -788,7 +788,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/Cargo.toml 15_virtual_mem_part3_precom
diff -uNr 14_virtual_mem_part2_mmio_remap/Makefile 15_virtual_mem_part3_precomputed_tables/Makefile
--- 14_virtual_mem_part2_mmio_remap/Makefile
+++ 15_virtual_mem_part3_precomputed_tables/Makefile
@@ -89,6 +89,7 @@
@@ -98,6 +98,7 @@
-O binary
EXEC_QEMU = $(QEMU_BINARY) -M $(QEMU_MACHINE_TYPE)
@ -796,7 +796,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/Makefile 15_virtual_mem_part3_precompu
EXEC_TEST_DISPATCH = ruby ../common/tests/dispatch.rb
EXEC_MINIPUSH = ruby ../common/serial/minipush.rb
@@ -134,6 +135,7 @@
@@ -143,6 +144,7 @@
$(KERNEL_ELF):
$(call colorecho, "\nCompiling kernel - $(BSP)")
@RUSTFLAGS="$(RUSTFLAGS_PEDANTIC)" $(RUSTC_CMD)
@ -804,7 +804,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/Makefile 15_virtual_mem_part3_precompu
##------------------------------------------------------------------------------
## Build the stripped kernel binary
@@ -272,6 +274,7 @@
@@ -281,6 +283,7 @@
TEST_ELF=$$(echo $$1 | sed -e 's/.*target/target/g')
TEST_BINARY=$$(echo $$1.img | sed -e 's/.*target/target/g')
@ -1138,7 +1138,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/src/bsp/raspberrypi/link.ld 15_virtual
* Copyright (c) 2018-2022 Andre Richter <andre.o.richter@gmail.com>
*/
+INCLUDE src/bsp/raspberrypi/kernel_virt_addr_space_size.ld;
+INCLUDE kernel_virt_addr_space_size.ld;
+
PAGE_SIZE = 64K;
PAGE_MASK = PAGE_SIZE - 1;

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -3,7 +3,7 @@
* Copyright (c) 2018-2022 Andre Richter <andre.o.richter@gmail.com>
*/
INCLUDE src/bsp/raspberrypi/kernel_virt_addr_space_size.ld;
INCLUDE kernel_virt_addr_space_size.ld;
PAGE_SIZE = 64K;
PAGE_MASK = PAGE_SIZE - 1;

@ -25,10 +25,10 @@ endif
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -41,7 +41,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -55,24 +55,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

@ -3,7 +3,7 @@
* Copyright (c) 2018-2022 Andre Richter <andre.o.richter@gmail.com>
*/
INCLUDE src/bsp/raspberrypi/kernel_virt_addr_space_size.ld;
INCLUDE kernel_virt_addr_space_size.ld;
PAGE_SIZE = 64K;
PAGE_MASK = PAGE_SIZE - 1;

@ -18,10 +18,10 @@ DEV_SERIAL ?= /dev/ttyUSB0
##--------------------------------------------------------------------------------------------------
## Hardcoded configuration values
## BSP-specific configuration values
##--------------------------------------------------------------------------------------------------
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# BSP-specific arguments.
ifeq ($(BSP),rpi3)
TARGET = aarch64-unknown-none-softfloat
KERNEL_BIN = kernel8.img
@ -31,7 +31,7 @@ ifeq ($(BSP),rpi3)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a53
else ifeq ($(BSP),rpi4)
TARGET = aarch64-unknown-none-softfloat
@ -42,24 +42,33 @@ else ifeq ($(BSP),rpi4)
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
LD_SCRIPT_PATH = src/bsp/raspberrypi
RUSTC_MISC_ARGS = -C target-cpu=cortex-a72
endif
QEMU_MISSING_STRING = "This board is not yet supported for QEMU."
# Export for build.rs.
export LINKER_FILE
export LD_SCRIPT_PATH
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Generic configuration values
##--------------------------------------------------------------------------------------------------
KERNEL_LINKER_SCRIPT = link.ld
KERNEL_ELF = target/$(TARGET)/release/kernel
##--------------------------------------------------------------------------------------------------
## Command building blocks
##--------------------------------------------------------------------------------------------------
RUSTFLAGS = -C link-arg=-T$(LINKER_FILE) $(RUSTC_MISC_ARGS)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) -D warnings -D missing_docs
RUSTFLAGS = $(RUSTC_MISC_ARGS) \
-C link-arg=--library-path=$(LD_SCRIPT_PATH) \
-C link-arg=--script=$(KERNEL_LINKER_SCRIPT)
RUSTFLAGS_PEDANTIC = $(RUSTFLAGS) \
-D warnings \
-D missing_docs
FEATURES = --features bsp_$(BSP)
COMPILER_ARGS = --target=$(TARGET) \

@ -1,8 +1,17 @@
use std::env;
use std::{env, fs};
fn main() {
let linker_file = env::var("LINKER_FILE").unwrap_or_default();
let ld_script_path = env::var("LD_SCRIPT_PATH").unwrap_or_default();
println!("cargo:rerun-if-changed={}", linker_file);
println!("cargo:rerun-if-changed=build.rs");
let files = fs::read_dir(ld_script_path).unwrap();
files
.filter_map(Result::ok)
.filter(|d| {
if let Some(e) = d.path().extension() {
e == "ld"
} else {
false
}
})
.for_each(|f| println!("cargo:rerun-if-changed={}", f.path().display()));
}

Loading…
Cancel
Save