From 10753dcc3f2fd7c8b0ba0c49e26e05ed884fae67 Mon Sep 17 00:00:00 2001
From: Will Sloan <will@848.email>
Date: Sun, 12 Jan 2025 20:29:44 -0500
Subject: [PATCH 1/2] Modify linux flasher build to compile for ARM

This is needed for the flasher to be usable on the Raspberry Pi (with a
32-bit userspace).
---
 .cargo/config.toml |  4 ++++
 .gitlab-ci.yml     | 13 +++++++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/.cargo/config.toml b/.cargo/config.toml
index de8eca6..0e39871 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -9,3 +9,7 @@ target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
 
 [target.'cfg(all(target_arch = "arm", target_os = "none"))']
 runner = "arm-none-eabi-gdb -x openocd.gdb"
+
+[target.arm-unknown-linux-gnueabihf]
+linker = "arm-linux-gnueabihf-gcc"
+
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index deead84..ae88693 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,9 +6,10 @@ stages:
   - build-flasher
 
 before_script:
-  - apt update && apt install -y binutils-arm-none-eabi gcc-mingw-w64-x86-64-win32
+  - apt update && apt install -y binutils-arm-none-eabi gcc-mingw-w64-x86-64-win32 gcc-arm-linux-gnueabihf
   - rustup target add thumbv7em-none-eabihf
-  - rustup target add x86_64-pc-windows-gnu
+  - rustup target add arm-unknown-linux-gnueabihf # Raspberry Pi
+  - rustup target add x86_64-pc-windows-gnu # Windows PC
   - rustup component add rustfmt
   - rustup component add clippy
   - cargo install flip-link
@@ -32,15 +33,15 @@ build:
 build-flasher:
   stage: build-flasher
   script:
-    - mkdir flasher
+    - rm -rf flasher; mkdir flasher
     - cd ..
     - git clone https://gitlab.scd31.com/cats/firmware-flasher
     - cd firmware-flasher
     - cp ../mobile-transceiver-software/firmware.bin firmware.bin
-    - cargo build --release
+    - cargo build --release --target arm-unknown-linux-gnueabihf
     - cargo build --release --target x86_64-pc-windows-gnu
-    - cp target/release/stm32-firmware-flasher ../mobile-transceiver-software/flasher/flasher-linux
-    - strip ../mobile-transceiver-software/flasher/flasher-linux
+    - cp target/arm-unknown-linux-gnueabihf/release/stm32-firmware-flasher ../mobile-transceiver-software/flasher/flasher-linux
+    - arm-linux-gnueabihf-strip ../mobile-transceiver-software/flasher/flasher-linux
     - cp target/x86_64-pc-windows-gnu/release/stm32-firmware-flasher.exe ../mobile-transceiver-software/flasher/flasher-windows.exe
   artifacts:
     paths:
-- 
GitLab


From 47b08765100c931b0d16f0417136f646fd3bc640 Mon Sep 17 00:00:00 2001
From: Will Sloan <will@848.email>
Date: Sun, 12 Jan 2025 21:33:30 -0500
Subject: [PATCH 2/2] Refactor firmware flasher into submodule

This is a lot cleaner than cd-ing above the repository (potentially
dangerous in CI because the state of the directory above the repository
is not guaranteed) and doing a 'git clone'. This will also allow
the submodule's commit to be pinned and not change without developer
intent.
---
 .gitlab-ci.yml   | 15 ++++++++-------
 .gitmodules      |  3 +++
 firmware-flasher |  1 +
 3 files changed, 12 insertions(+), 7 deletions(-)
 create mode 100644 .gitmodules
 create mode 160000 firmware-flasher

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ae88693..9def228 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,8 @@
 image: "rust:latest"
 
+variables:
+  GIT_SUBMODULE_STRATEGY: normal
+
 stages:
   - lint
   - build
@@ -34,15 +37,13 @@ build-flasher:
   stage: build-flasher
   script:
     - rm -rf flasher; mkdir flasher
-    - cd ..
-    - git clone https://gitlab.scd31.com/cats/firmware-flasher
-    - cd firmware-flasher
-    - cp ../mobile-transceiver-software/firmware.bin firmware.bin
+    - cd firmware-flasher # cd into submodule
+    - cp ../firmware.bin firmware.bin
     - cargo build --release --target arm-unknown-linux-gnueabihf
     - cargo build --release --target x86_64-pc-windows-gnu
-    - cp target/arm-unknown-linux-gnueabihf/release/stm32-firmware-flasher ../mobile-transceiver-software/flasher/flasher-linux
-    - arm-linux-gnueabihf-strip ../mobile-transceiver-software/flasher/flasher-linux
-    - cp target/x86_64-pc-windows-gnu/release/stm32-firmware-flasher.exe ../mobile-transceiver-software/flasher/flasher-windows.exe
+    - cp target/arm-unknown-linux-gnueabihf/release/stm32-firmware-flasher ../flasher/flasher-linux
+    - arm-linux-gnueabihf-strip ../flasher/flasher-linux
+    - cp target/x86_64-pc-windows-gnu/release/stm32-firmware-flasher.exe ../flasher/flasher-windows.exe
   artifacts:
     paths:
       - flasher/*
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..99effa4
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "firmware-flasher"]
+	path = firmware-flasher
+	url = https://gitlab.scd31.com/cats/firmware-flasher
diff --git a/firmware-flasher b/firmware-flasher
new file mode 160000
index 0000000..87fb235
--- /dev/null
+++ b/firmware-flasher
@@ -0,0 +1 @@
+Subproject commit 87fb2352473381232e46592a75f6876a816cc171
-- 
GitLab