From 4b9486d0bdbef2c47e0b9d513c1fffcb9f4c08e1 Mon Sep 17 00:00:00 2001
From: Guillaume Endignoux <guillaumee@google.com>
Date: Wed, 8 Apr 2020 15:09:18 +0200
Subject: [PATCH] Sync with upstream Tock to have reproducible builds.

---
 .github/workflows/boards_build.yml            | 12 +++-----
 boards/nordic/nrf52840_dongle_dfu/Cargo.toml  | 18 +++++++++++
 .../{ => nordic}/nrf52840_dongle_dfu/Makefile |  6 ++--
 boards/nordic/nrf52840_dongle_dfu/build.rs    |  4 +++
 .../nrf52840_dongle_dfu}/layout.ld            |  2 +-
 boards/nordic/nrf52840_mdk_dfu/Cargo.toml     | 14 +++++++++
 boards/{ => nordic}/nrf52840_mdk_dfu/Makefile |  8 ++---
 boards/nordic/nrf52840_mdk_dfu/build.rs       |  4 +++
 .../nrf52840_mdk_dfu}/layout.ld               |  2 +-
 .../{ => nordic}/nrf52840_mdk_dfu/src/io.rs   |  0
 .../{ => nordic}/nrf52840_mdk_dfu/src/main.rs |  0
 boards/nrf52840_dongle_dfu/Cargo.toml         | 30 -------------------
 boards/nrf52840_dongle_dfu/build.rs           |  4 ---
 boards/nrf52840_mdk_dfu/Cargo.toml            | 26 ----------------
 boards/nrf52840_mdk_dfu/build.rs              |  4 ---
 deploy.py                                     | 10 +++----
 patches/tock/04-additional-boards.patch       | 13 ++++++++
 patches/tock/04-nrf52-bootloader.patch        | 21 -------------
 run_desktop_tests.sh                          | 12 ++++++--
 setup.sh                                      |  5 ++++
 third_party/tock                              |  2 +-
 21 files changed, 87 insertions(+), 110 deletions(-)
 create mode 100644 boards/nordic/nrf52840_dongle_dfu/Cargo.toml
 rename boards/{ => nordic}/nrf52840_dongle_dfu/Makefile (81%)
 create mode 100644 boards/nordic/nrf52840_dongle_dfu/build.rs
 rename boards/{nrf52840_mdk_dfu => nordic/nrf52840_dongle_dfu}/layout.ld (76%)
 create mode 100644 boards/nordic/nrf52840_mdk_dfu/Cargo.toml
 rename boards/{ => nordic}/nrf52840_mdk_dfu/Makefile (74%)
 create mode 100644 boards/nordic/nrf52840_mdk_dfu/build.rs
 rename boards/{nrf52840_dongle_dfu => nordic/nrf52840_mdk_dfu}/layout.ld (76%)
 rename boards/{ => nordic}/nrf52840_mdk_dfu/src/io.rs (100%)
 rename boards/{ => nordic}/nrf52840_mdk_dfu/src/main.rs (100%)
 delete mode 100644 boards/nrf52840_dongle_dfu/Cargo.toml
 delete mode 100644 boards/nrf52840_dongle_dfu/build.rs
 delete mode 100644 boards/nrf52840_mdk_dfu/Cargo.toml
 delete mode 100644 boards/nrf52840_mdk_dfu/build.rs
 create mode 100644 patches/tock/04-additional-boards.patch
 delete mode 100644 patches/tock/04-nrf52-bootloader.patch

diff --git a/.github/workflows/boards_build.yml b/.github/workflows/boards_build.yml
index 0a8fbeb..50a29d5 100644
--- a/.github/workflows/boards_build.yml
+++ b/.github/workflows/boards_build.yml
@@ -27,15 +27,11 @@ jobs:
       - name: Set up OpenSK
         run: ./setup.sh
 
+      - name: Building board nrf52840dk
+        run: ./deploy.py --board=nrf52840dk --no-app --programmer=none
+      - name: Building board nrf52840_dongle
+        run: ./deploy.py --board=nrf52840_dongle --no-app --programmer=none
       - name: Building board nrf52840_dongle_dfu
         run: ./deploy.py --board=nrf52840_dongle_dfu --no-app --programmer=none
       - name: Building board nrf52840_mdk_dfu
         run: ./deploy.py --board=nrf52840_mdk_dfu --no-app --programmer=none
-
-      - name: Create a long build directory
-        run: mkdir this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz && mv third_party this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/
-
-      - name: Building board nrf52840dk
-        run: make -C this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/third_party/tock/boards/nordic/nrf52840dk
-      - name: Building board nrf52840_dongle
-        run: make -C this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/third_party/tock/boards/nordic/nrf52840_dongle
diff --git a/boards/nordic/nrf52840_dongle_dfu/Cargo.toml b/boards/nordic/nrf52840_dongle_dfu/Cargo.toml
new file mode 100644
index 0000000..35eab8a
--- /dev/null
+++ b/boards/nordic/nrf52840_dongle_dfu/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "nrf52840_dongle_dfu"
+version = "0.1.0"
+authors = ["Tock Project Developers <tock-dev@googlegroups.com>"]
+build = "build.rs"
+edition = "2018"
+
+[[bin]]
+path = "../nrf52840_dongle/src/main.rs"
+name = "nrf52840_dongle_dfu"
+
+[dependencies]
+components = { path = "../../components" }
+cortexm4 = { path = "../../../arch/cortex-m4" }
+capsules = { path = "../../../capsules" }
+kernel = { path = "../../../kernel" }
+nrf52840 = { path = "../../../chips/nrf52840" }
+nrf52dk_base = { path = "../nrf52dk_base" }
diff --git a/boards/nrf52840_dongle_dfu/Makefile b/boards/nordic/nrf52840_dongle_dfu/Makefile
similarity index 81%
rename from boards/nrf52840_dongle_dfu/Makefile
rename to boards/nordic/nrf52840_dongle_dfu/Makefile
index 723ba0a..58771b3 100644
--- a/boards/nrf52840_dongle_dfu/Makefile
+++ b/boards/nordic/nrf52840_dongle_dfu/Makefile
@@ -4,7 +4,7 @@ TOCK_ARCH=cortex-m4
 TARGET=thumbv7em-none-eabi
 PLATFORM=nrf52840_dongle_dfu
 
-include ../../third_party/tock/boards/Makefile.common
+include ../../Makefile.common
 
 TOCKLOADER=tockloader
 
@@ -20,10 +20,10 @@ TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-s
 
 # Upload the kernel over JTAG
 .PHONY: flash
-flash: target/$(TARGET)/release/$(PLATFORM).bin
+flash: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).bin
 	$(TOCKLOADER) $(TOCKLOADER_GENERAL_FLAGS) flash --address $(KERNEL_ADDRESS) $(TOCKLOADER_JTAG_FLAGS) $<
 
 # Upload the kernel over serial/bootloader
 .PHONY: program
-program: target/$(TARGET)/release/$(PLATFORM).hex
+program: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).hex
 	$(error Cannot program nRF52 Dongle over USB. Use \`make flash\` and JTAG)
diff --git a/boards/nordic/nrf52840_dongle_dfu/build.rs b/boards/nordic/nrf52840_dongle_dfu/build.rs
new file mode 100644
index 0000000..1fdd492
--- /dev/null
+++ b/boards/nordic/nrf52840_dongle_dfu/build.rs
@@ -0,0 +1,4 @@
+fn main() {
+    println!("cargo:rerun-if-changed=layout.ld");
+    println!("cargo:rerun-if-changed=../../kernel_layout.ld");
+}
diff --git a/boards/nrf52840_mdk_dfu/layout.ld b/boards/nordic/nrf52840_dongle_dfu/layout.ld
similarity index 76%
rename from boards/nrf52840_mdk_dfu/layout.ld
rename to boards/nordic/nrf52840_dongle_dfu/layout.ld
index 834133c..41ae608 100644
--- a/boards/nrf52840_mdk_dfu/layout.ld
+++ b/boards/nordic/nrf52840_dongle_dfu/layout.ld
@@ -7,4 +7,4 @@ MEMORY
 
 MPU_MIN_ALIGN = 8K;
 
-INCLUDE ../../third_party/tock/boards/kernel_layout.ld
+INCLUDE ../../kernel_layout.ld
diff --git a/boards/nordic/nrf52840_mdk_dfu/Cargo.toml b/boards/nordic/nrf52840_mdk_dfu/Cargo.toml
new file mode 100644
index 0000000..c0cb7af
--- /dev/null
+++ b/boards/nordic/nrf52840_mdk_dfu/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "nrf52840_mdk_dfu"
+version = "0.1.0"
+authors = ["Yihui Xiong <yihui.xiong@hotmail.com>"]
+build = "build.rs"
+edition = "2018"
+
+[dependencies]
+components = { path = "../../components" }
+cortexm4 = { path = "../../../arch/cortex-m4" }
+capsules = { path = "../../../capsules" }
+kernel = { path = "../../../kernel" }
+nrf52840 = { path = "../../../chips/nrf52840" }
+nrf52dk_base = { path = "../nrf52dk_base" }
diff --git a/boards/nrf52840_mdk_dfu/Makefile b/boards/nordic/nrf52840_mdk_dfu/Makefile
similarity index 74%
rename from boards/nrf52840_mdk_dfu/Makefile
rename to boards/nordic/nrf52840_mdk_dfu/Makefile
index e915141..a179ffb 100644
--- a/boards/nrf52840_mdk_dfu/Makefile
+++ b/boards/nordic/nrf52840_mdk_dfu/Makefile
@@ -4,7 +4,7 @@ TOCK_ARCH=cortex-m4
 TARGET=thumbv7em-none-eabi
 PLATFORM=nrf52840_mdk_dfu
 
-include ../../third_party/tock/boards/Makefile.common
+include ../../Makefile.common
 
 TOCKLOADER=tockloader
 
@@ -20,10 +20,10 @@ TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-s
 
 # Upload the kernel over JTAG
 .PHONY: flash
-flash: target/$(TARGET)/release/$(PLATFORM).bin
+flash: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).bin
 	$(TOCKLOADER) $(TOCKLOADER_GENERAL_FLAGS) flash --address $(KERNEL_ADDRESS) $(TOCKLOADER_JTAG_FLAGS) $<
 
 # Upload the kernel over serial/bootloader
 .PHONY: program
-program: target/$(TARGET)/release/$(PLATFORM).hex
-	$(error Cannot program nRF52 Dongle over USB. Use \`make flash\` and JTAG)
+program: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).hex
+	$(error Cannot program nRF52840-MDK over USB. Use \`make flash\` and JTAG)
diff --git a/boards/nordic/nrf52840_mdk_dfu/build.rs b/boards/nordic/nrf52840_mdk_dfu/build.rs
new file mode 100644
index 0000000..1fdd492
--- /dev/null
+++ b/boards/nordic/nrf52840_mdk_dfu/build.rs
@@ -0,0 +1,4 @@
+fn main() {
+    println!("cargo:rerun-if-changed=layout.ld");
+    println!("cargo:rerun-if-changed=../../kernel_layout.ld");
+}
diff --git a/boards/nrf52840_dongle_dfu/layout.ld b/boards/nordic/nrf52840_mdk_dfu/layout.ld
similarity index 76%
rename from boards/nrf52840_dongle_dfu/layout.ld
rename to boards/nordic/nrf52840_mdk_dfu/layout.ld
index 834133c..41ae608 100644
--- a/boards/nrf52840_dongle_dfu/layout.ld
+++ b/boards/nordic/nrf52840_mdk_dfu/layout.ld
@@ -7,4 +7,4 @@ MEMORY
 
 MPU_MIN_ALIGN = 8K;
 
-INCLUDE ../../third_party/tock/boards/kernel_layout.ld
+INCLUDE ../../kernel_layout.ld
diff --git a/boards/nrf52840_mdk_dfu/src/io.rs b/boards/nordic/nrf52840_mdk_dfu/src/io.rs
similarity index 100%
rename from boards/nrf52840_mdk_dfu/src/io.rs
rename to boards/nordic/nrf52840_mdk_dfu/src/io.rs
diff --git a/boards/nrf52840_mdk_dfu/src/main.rs b/boards/nordic/nrf52840_mdk_dfu/src/main.rs
similarity index 100%
rename from boards/nrf52840_mdk_dfu/src/main.rs
rename to boards/nordic/nrf52840_mdk_dfu/src/main.rs
diff --git a/boards/nrf52840_dongle_dfu/Cargo.toml b/boards/nrf52840_dongle_dfu/Cargo.toml
deleted file mode 100644
index 6944eb3..0000000
--- a/boards/nrf52840_dongle_dfu/Cargo.toml
+++ /dev/null
@@ -1,30 +0,0 @@
-[package]
-name = "nrf52840_dongle_dfu"
-version = "0.1.0"
-authors = ["Tock Project Developers <tock-dev@googlegroups.com>"]
-build = "build.rs"
-edition = "2018"
-
-[profile.dev]
-panic = "abort"
-lto = false
-opt-level = "z"
-debug = true
-
-[profile.release]
-panic = "abort"
-lto = true
-opt-level = "z"
-debug = true
-
-[[bin]]
-path = "../../third_party/tock/boards/nordic/nrf52840_dongle/src/main.rs"
-name = "nrf52840_dongle_dfu"
-
-[dependencies]
-components = { path = "../../third_party/tock/boards/components" }
-cortexm4 = { path = "../../third_party/tock/arch/cortex-m4" }
-capsules = { path = "../../third_party/tock/capsules" }
-kernel = { path = "../../third_party/tock/kernel" }
-nrf52840 = { path = "../../third_party/tock/chips/nrf52840" }
-nrf52dk_base = { path = "../../third_party/tock/boards/nordic/nrf52dk_base" }
diff --git a/boards/nrf52840_dongle_dfu/build.rs b/boards/nrf52840_dongle_dfu/build.rs
deleted file mode 100644
index 2631dcc..0000000
--- a/boards/nrf52840_dongle_dfu/build.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-fn main() {
-    println!("cargo:rerun-if-changed=layout.ld");
-    println!("cargo:rerun-if-changed=../../third_party/tock/boards/kernel_layout.ld");
-}
diff --git a/boards/nrf52840_mdk_dfu/Cargo.toml b/boards/nrf52840_mdk_dfu/Cargo.toml
deleted file mode 100644
index 1047869..0000000
--- a/boards/nrf52840_mdk_dfu/Cargo.toml
+++ /dev/null
@@ -1,26 +0,0 @@
-[package]
-name = "nrf52840_mdk_dfu"
-version = "0.1.0"
-authors = ["Yihui Xiong <yihui.xiong@hotmail.com>"]
-build = "build.rs"
-edition = "2018"
-
-[profile.dev]
-panic = "abort"
-lto = false
-opt-level = "z"
-debug = true
-
-[profile.release]
-panic = "abort"
-lto = true
-opt-level = "z"
-debug = true
-
-[dependencies]
-components = { path = "../../third_party/tock/boards/components" }
-cortexm4 = { path = "../../third_party/tock/arch/cortex-m4" }
-capsules = { path = "../../third_party/tock/capsules" }
-kernel = { path = "../../third_party/tock/kernel" }
-nrf52840 = { path = "../../third_party/tock/chips/nrf52840" }
-nrf52dk_base = { path = "../../third_party/tock/boards/nordic/nrf52dk_base" }
diff --git a/boards/nrf52840_mdk_dfu/build.rs b/boards/nrf52840_mdk_dfu/build.rs
deleted file mode 100644
index 2631dcc..0000000
--- a/boards/nrf52840_mdk_dfu/build.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-fn main() {
-    println!("cargo:rerun-if-changed=layout.ld");
-    println!("cargo:rerun-if-changed=../../third_party/tock/boards/kernel_layout.ld");
-}
diff --git a/deploy.py b/deploy.py
index ddbd2e5..3026c7a 100755
--- a/deploy.py
+++ b/deploy.py
@@ -115,7 +115,7 @@ SUPPORTED_BOARDS = {
         ),
     "nrf52840_dongle_dfu":
         OpenSKBoard(
-            path="boards/nrf52840_dongle_dfu",
+            path="third_party/tock/boards/nordic/nrf52840_dongle_dfu",
             arch="thumbv7em-none-eabi",
             page_size=4096,
             kernel_address=0x1000,
@@ -132,7 +132,7 @@ SUPPORTED_BOARDS = {
         ),
     "nrf52840_mdk_dfu":
         OpenSKBoard(
-            path="boards/nrf52840_mdk_dfu",
+            path="third_party/tock/boards/nordic/nrf52840_mdk_dfu",
             arch="thumbv7em-none-eabi",
             page_size=4096,
             kernel_address=0x1000,
@@ -304,7 +304,7 @@ class OpenSKInstaller:
   def build_tockos(self):
     info("Building Tock OS for board {}".format(self.args.board))
     props = SUPPORTED_BOARDS[self.args.board]
-    out_directory = os.path.join(props.path, "target", props.arch, "release")
+    out_directory = os.path.join("third_party", "tock", "target", props.arch, "release")
     os.makedirs(out_directory, exist_ok=True)
     self.checked_command_output(["make"], cwd=props.path)
 
@@ -418,7 +418,7 @@ class OpenSKInstaller:
 
   def install_tock_os(self):
     board_props = SUPPORTED_BOARDS[self.args.board]
-    kernel_file = os.path.join(board_props.path, "target", board_props.arch,
+    kernel_file = os.path.join("third_party", "tock", "target", board_props.arch,
                                "release", "{}.bin".format(self.args.board))
     info("Flashing file {}.".format(kernel_file))
     with open(kernel_file, "rb") as f:
@@ -481,7 +481,7 @@ class OpenSKInstaller:
 
     if self.args.tockos:
       # Process kernel
-      kernel_path = os.path.join(board_props.path, "target", board_props.arch,
+      kernel_path = os.path.join("third_party", "tock", "target", board_props.arch,
                                  "release", "{}.bin".format(self.args.board))
       with open(kernel_path, "rb") as kernel:
         kern_hex = intelhex.IntelHex()
diff --git a/patches/tock/04-additional-boards.patch b/patches/tock/04-additional-boards.patch
new file mode 100644
index 0000000..88cd1c3
--- /dev/null
+++ b/patches/tock/04-additional-boards.patch
@@ -0,0 +1,13 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 18f4a10d..db88dc1d 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -13,6 +13,8 @@ members = [
+     "boards/launchxl",
+     "boards/nordic/nrf52840dk",
+     "boards/nordic/nrf52840_dongle",
++    "boards/nordic/nrf52840_dongle_dfu",
++    "boards/nordic/nrf52840_mdk_dfu",
+     "boards/nordic/nrf52dk",
+     "boards/nucleo_f429zi",
+     "boards/nucleo_f446re",
diff --git a/patches/tock/04-nrf52-bootloader.patch b/patches/tock/04-nrf52-bootloader.patch
deleted file mode 100644
index 02f57be..0000000
--- a/patches/tock/04-nrf52-bootloader.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/chips/nrf52/src/crt1.rs b/chips/nrf52/src/crt1.rs
-index 9703aac..281ceeb 100644
---- a/chips/nrf52/src/crt1.rs
-+++ b/chips/nrf52/src/crt1.rs
-@@ -1,4 +1,4 @@
--use cortexm4::{generic_isr, hard_fault_handler, nvic, svc_handler, systick_handler};
-+use cortexm4::{generic_isr, hard_fault_handler, nvic, scb, svc_handler, systick_handler};
- use tock_rt0;
- 
- /*
-@@ -168,5 +168,9 @@ pub unsafe extern "C" fn init() {
-     tock_rt0::init_data(&mut _etext, &mut _srelocate, &mut _erelocate);
-     tock_rt0::zero_bss(&mut _szero, &mut _ezero);
- 
-+    // Ensure that we are compatible with a bootloader.
-+    // For this we need to offset our vector table
-+    scb::set_vector_table_offset(BASE_VECTORS.as_ptr() as *const ());
-+
-     nvic::enable_all();
- }
-
diff --git a/run_desktop_tests.sh b/run_desktop_tests.sh
index e387353..36bde36 100755
--- a/run_desktop_tests.sh
+++ b/run_desktop_tests.sh
@@ -50,8 +50,16 @@ make -C third_party/tock/boards/nordic/nrf52840dk
 make -C third_party/tock/boards/nordic/nrf52840_dongle
 
 echo "Checking that other boards build properly..."
-make -C boards/nrf52840_dongle_dfu
-make -C boards/nrf52840_mdk_dfu
+make -C third_party/tock/boards/nordic/nrf52840_dongle_dfu
+make -C third_party/tock/boards/nordic/nrf52840_mdk_dfu
+
+echo "Checking deployment of supported boards..."
+./deploy.py --board=nrf52840dk --no-app --programmer=none
+./deploy.py --board=nrf52840_dongle --no-app --programmer=none
+
+echo "Checking deployment of other boards..."
+./deploy.py --board=nrf52840_dongle_dfu --no-app --programmer=none
+./deploy.py --board=nrf52840_mdk_dfu --no-app --programmer=none
 
 if [ -z "${TRAVIS_OS_NAME}" -o "${TRAVIS_OS_NAME}" = "linux" ]
 then
diff --git a/setup.sh b/setup.sh
index 1c6fe37..c4297ad 100755
--- a/setup.sh
+++ b/setup.sh
@@ -46,6 +46,11 @@ EOF
   exit 1
 }
 
+# Copy additional boards to the kernel.
+echo -n '[-] Copying additional boards to Tock... '
+cp -r boards/* third_party/tock/boards
+echo $done_text
+
 # Apply patches to kernel. Do that in a sub-shell
 (
   cd third_party/tock/ && \
diff --git a/third_party/tock b/third_party/tock
index 3139864..ba44dd6 160000
--- a/third_party/tock
+++ b/third_party/tock
@@ -1 +1 @@
-Subproject commit 3139864d391ab654bfb9c27ca8dcd3e4e9a2d58e
+Subproject commit ba44dd690f2db52ab9c928975f85c34c1c6f5bea
-- 
GitLab