From fa56c70dcb27824b2a06beea3a8edf58ea1f68bf Mon Sep 17 00:00:00 2001 From: Andrew Walbran Date: Thu, 23 Mar 2023 14:43:48 +0000 Subject: [PATCH] Get AP examples working on Mac OS too. --- src/bare-metal/aps/examples/Makefile | 16 ++++++++++++---- src/bare-metal/aps/examples/build.rs | 4 ++++ src/exercises/bare-metal/rtc/Makefile | 10 +++++++++- src/exercises/bare-metal/rtc/build.rs | 4 ++++ src/welcome-bare-metal.md | 1 + 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/bare-metal/aps/examples/Makefile b/src/bare-metal/aps/examples/Makefile index 64a1ed20..1022287a 100644 --- a/src/bare-metal/aps/examples/Makefile +++ b/src/bare-metal/aps/examples/Makefile @@ -12,6 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +UNAME := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + TARGET = aarch64-linux-gnu +else + TARGET = aarch64-none-elf +endif +OBJCOPY = $(TARGET)-objcopy + .PHONY: build qemu qemu_logger qemu_minimal qemu_psci all: minimal.bin improved.bin logger.bin @@ -20,13 +28,13 @@ build: cargo build improved.bin: build - aarch64-linux-gnu-objcopy -O binary target/aarch64-unknown-none/debug/improved $@ + $(OBJCOPY) -O binary target/aarch64-unknown-none/debug/improved $@ logger.bin: build - aarch64-linux-gnu-objcopy -O binary target/aarch64-unknown-none/debug/logger $@ + $(OBJCOPY) -O binary target/aarch64-unknown-none/debug/logger $@ minimal.bin: build - aarch64-linux-gnu-objcopy -O binary target/aarch64-unknown-none/debug/minimal $@ + $(OBJCOPY) -O binary target/aarch64-unknown-none/debug/minimal $@ psci.bin: build - aarch64-linux-gnu-objcopy -O binary target/aarch64-unknown-none/debug/psci $@ + $(OBJCOPY) -O binary target/aarch64-unknown-none/debug/psci $@ qemu: improved.bin qemu-system-aarch64 -machine virt -cpu max -serial mon:stdio -display none -kernel $< -s diff --git a/src/bare-metal/aps/examples/build.rs b/src/bare-metal/aps/examples/build.rs index d1d4e645..7a58b29c 100644 --- a/src/bare-metal/aps/examples/build.rs +++ b/src/bare-metal/aps/examples/build.rs @@ -16,7 +16,11 @@ use cc::Build; use std::env; fn main() { + #[cfg(target_os = "linux")] env::set_var("CROSS_COMPILE", "aarch64-linux-gnu"); + #[cfg(not(target_os = "linux"))] + env::set_var("CROSS_COMPILE", "aarch64-none-elf"); + Build::new() .file("entry.S") .file("exceptions.S") diff --git a/src/exercises/bare-metal/rtc/Makefile b/src/exercises/bare-metal/rtc/Makefile index 26d4a563..797c12ce 100644 --- a/src/exercises/bare-metal/rtc/Makefile +++ b/src/exercises/bare-metal/rtc/Makefile @@ -12,6 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +UNAME := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + TARGET = aarch64-linux-gnu +else + TARGET = aarch64-none-elf +endif +OBJCOPY = $(TARGET)-objcopy + .PHONY: build qemu_minimal qemu qemu_logger all: rtc.bin @@ -20,7 +28,7 @@ build: cargo build rtc.bin: build - aarch64-linux-gnu-objcopy -O binary target/aarch64-unknown-none/debug/rtc $@ + $(OBJCOPY) -O binary target/aarch64-unknown-none/debug/rtc $@ qemu: rtc.bin qemu-system-aarch64 -machine virt -cpu max -serial mon:stdio -display none -kernel $< -s diff --git a/src/exercises/bare-metal/rtc/build.rs b/src/exercises/bare-metal/rtc/build.rs index d1d4e645..7a58b29c 100644 --- a/src/exercises/bare-metal/rtc/build.rs +++ b/src/exercises/bare-metal/rtc/build.rs @@ -16,7 +16,11 @@ use cc::Build; use std::env; fn main() { + #[cfg(target_os = "linux")] env::set_var("CROSS_COMPILE", "aarch64-linux-gnu"); + #[cfg(not(target_os = "linux"))] + env::set_var("CROSS_COMPILE", "aarch64-none-elf"); + Build::new() .file("entry.S") .file("exceptions.S") diff --git a/src/welcome-bare-metal.md b/src/welcome-bare-metal.md index 105b9cc0..69ecc0ac 100644 --- a/src/welcome-bare-metal.md +++ b/src/welcome-bare-metal.md @@ -39,6 +39,7 @@ On MacOS: ```bash xcode-select --install brew install gdb picocom qemu +brew install --cask gcc-aarch64-embedded rustup update rustup target add aarch64-unknown-none thumbv7em-none-eabihf cargo install cargo-binutils cargo-embed