From c64199941e058abb18a06be90002f5f03009347b Mon Sep 17 00:00:00 2001
From: Dave Johnson <davejohnson3000@gmail.com>
Date: Tue, 14 Aug 2018 01:28:52 -0700
Subject: [PATCH] Compile only selected PIO environment (#11519)

---
 Marlin/src/HAL/HAL_AVR/HAL.h                  |  2 +-
 .../HAL/HAL_AVR/persistent_store_eeprom.cpp   |  2 +-
 .../src/HAL/HAL_AVR/persistent_store_impl.cpp | 51 ++++++++++++++++
 Marlin/src/HAL/HAL_AVR/servo_AVR.cpp          |  4 +-
 .../src/HAL/HAL_DUE/EepromEmulation_Due.cpp   |  2 +-
 Marlin/src/HAL/HAL_DUE/HAL.h                  |  4 +-
 Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp        |  2 +-
 Marlin/src/HAL/HAL_DUE/Servo_Due.cpp          |  2 +-
 .../HAL/HAL_DUE/persistent_store_eeprom.cpp   |  6 +-
 .../src/HAL/HAL_DUE/persistent_store_impl.cpp | 59 +++++++++++++++++++
 .../HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp |  2 +-
 Marlin/src/HAL/HAL_ESP32/HAL.h                |  4 +-
 Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp    |  2 +-
 Marlin/src/HAL/HAL_LPC1768/HAL.cpp            |  2 +-
 Marlin/src/HAL/HAL_LPC1768/HAL.h              |  4 +-
 Marlin/src/HAL/HAL_LPC1768/arduino.cpp        |  2 +-
 Marlin/src/HAL/HAL_LPC1768/include/SPI.h      |  2 +-
 .../HAL_LPC1768/include/SoftwareSerial.cpp    |  2 +-
 .../HAL/HAL_LPC1768/persistent_store_api.h    |  2 +-
 .../u8g_com_HAL_LPC1768_st7920_hw_spi.cpp     |  2 +-
 .../u8g_com_HAL_LPC1768_st7920_sw_spi.cpp     |  2 +-
 Marlin/src/HAL/HAL_STM32F1/HAL.h              |  4 +-
 .../src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp   |  2 +-
 .../HAL_STM32F1/persistent_store_flash.cpp    |  2 +-
 .../HAL_STM32F1/persistent_store_sdcard.cpp   |  3 +-
 Marlin/src/HAL/HAL_STM32F4/HAL.h              |  4 +-
 .../src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp   |  2 +-
 .../HAL_STM32F4/persistent_store_eeprom.cpp   |  2 +-
 Marlin/src/HAL/HAL_STM32F7/HAL.h              |  4 +-
 .../src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp   |  2 +-
 .../HAL_STM32F7/persistent_store_eeprom.cpp   |  4 +-
 Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp        |  2 +-
 Marlin/src/HAL/HAL_TEENSY35_36/HAL.h          |  4 +-
 .../persistent_store_eeprom.cpp               |  2 +-
 .../HAL_TEENSY35_36/persistent_store_impl.cpp | 51 ++++++++++++++++
 Marlin/src/HAL/persistent_store_api.cpp       |  2 +-
 Marlin/src/HAL/{ => shared}/Delay.h           |  2 +-
 Marlin/src/HAL/{ => shared}/HAL_SPI.h         |  0
 Marlin/src/HAL/{ => shared}/I2cEeprom.cpp     |  2 +-
 Marlin/src/HAL/{ => shared}/SpiEeprom.cpp     |  2 +-
 Marlin/src/HAL/{ => shared}/math_32bit.h      |  2 +-
 .../HAL/{ => shared}/persistent_store_api.h   |  0
 Marlin/src/HAL/{ => shared}/platforms.h       |  0
 Marlin/src/HAL/{ => shared}/servo.cpp         |  2 +-
 Marlin/src/HAL/{ => shared}/servo.h           |  6 +-
 Marlin/src/HAL/{ => shared}/servo_private.h   |  4 +-
 Marlin/src/feature/Max7219_Debug_LEDs.cpp     |  2 +-
 Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp   |  2 +-
 Marlin/src/feature/dac/dac_dac084s085.cpp     |  2 +-
 Marlin/src/inc/MarlinConfigPre.h              |  2 +-
 .../dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp   |  2 +-
 Marlin/src/module/configuration_store.cpp     |  2 +-
 Marlin/src/module/configuration_store.h       |  3 +-
 Marlin/src/module/printcounter.cpp            |  2 +-
 Marlin/src/module/servo.h                     |  2 +-
 Marlin/src/module/stepper.cpp                 |  2 +-
 Marlin/src/module/temperature.cpp             |  2 +-
 platformio.ini                                | 39 ++++++------
 58 files changed, 248 insertions(+), 84 deletions(-)
 create mode 100644 Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
 create mode 100644 Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
 create mode 100644 Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp
 rename Marlin/src/HAL/{ => shared}/Delay.h (99%)
 rename Marlin/src/HAL/{ => shared}/HAL_SPI.h (100%)
 rename Marlin/src/HAL/{ => shared}/I2cEeprom.cpp (99%)
 rename Marlin/src/HAL/{ => shared}/SpiEeprom.cpp (98%)
 rename Marlin/src/HAL/{ => shared}/math_32bit.h (97%)
 rename Marlin/src/HAL/{ => shared}/persistent_store_api.h (100%)
 rename Marlin/src/HAL/{ => shared}/platforms.h (100%)
 rename Marlin/src/HAL/{ => shared}/servo.cpp (99%)
 rename Marlin/src/HAL/{ => shared}/servo.h (96%)
 rename Marlin/src/HAL/{ => shared}/servo_private.h (98%)

diff --git a/Marlin/src/HAL/HAL_AVR/HAL.h b/Marlin/src/HAL/HAL_AVR/HAL.h
index 02aafc0fbd..3ce7d53ef1 100644
--- a/Marlin/src/HAL/HAL_AVR/HAL.h
+++ b/Marlin/src/HAL/HAL_AVR/HAL.h
@@ -34,7 +34,7 @@
 #include <avr/interrupt.h>
 #include <avr/io.h>
 
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_AVR.h"
 #include "watchdog_AVR.h"
 #include "math_AVR.h"
diff --git a/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
index 293955937f..6efdc6e3e5 100644
--- a/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
@@ -25,7 +25,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 bool PersistentStore::access_start() { return true; }
 bool PersistentStore::access_finish() { return true; }
diff --git a/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
new file mode 100644
index 0000000000..96062e2c42
--- /dev/null
+++ b/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
@@ -0,0 +1,51 @@
+#ifdef __AVR__
+
+#include "../shared/persistent_store_api.h"
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+bool access_finish() { return true; }
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;  // always assume success for AVR's
+}
+
+}
+}
+
+#endif // EEPROM_SETTINGS
+#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp b/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
index c02dd4c203..ea227b1956 100644
--- a/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
+++ b/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
@@ -60,8 +60,8 @@
 #include <avr/interrupt.h>
 #include <Arduino.h>
 
-#include "../servo.h"
-#include "../servo_private.h"
+#include "../shared/servo.h"
+#include "../shared/servo_private.h"
 
 static volatile int8_t Channel[_Nbr_16timers];              // counter for the servo being pulsed for each timer (or -1 if refresh interval)
 
diff --git a/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp b/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
index 4665565544..b852af9fa3 100644
--- a/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
@@ -31,7 +31,7 @@
 
 #ifdef ARDUINO_ARCH_SAM
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 #include "../../inc/MarlinConfig.h"
 
 #if ENABLED(EEPROM_SETTINGS) && DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
diff --git a/Marlin/src/HAL/HAL_DUE/HAL.h b/Marlin/src/HAL/HAL_DUE/HAL.h
index c0f8141e5b..7cba8097ce 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL.h
+++ b/Marlin/src/HAL/HAL_DUE/HAL.h
@@ -35,8 +35,8 @@
 
 #include <Arduino.h>
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_Due.h"
 #include "watchdog_Due.h"
 #include "HAL_timers_Due.h"
diff --git a/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp b/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
index 84c0f8f4bf..a45306e316 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
@@ -42,7 +42,7 @@
 // --------------------------------------------------------------------------
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 // --------------------------------------------------------------------------
 // Public Variables
diff --git a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
index 84c4899923..a9c34d7728 100644
--- a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
@@ -46,7 +46,7 @@
 
 #include <Arduino.h>
 #include "../servo.h"
-#include "../servo_private.h"
+#include "../shared/servo_private.h"
 
 static volatile int8_t Channel[_Nbr_16timers];              // counter for the servo being pulsed for each timer (or -1 if refresh interval)
 
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
index 3bf0f443b3..3af0b0aa89 100644
--- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
@@ -22,12 +22,12 @@
  */
 #ifdef ARDUINO_ARCH_SAM
 
-#include "../persistent_store_api.h"
-
-#include "../../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfigPre.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
+#include "../shared/persistent_store_api.h"
+
 extern void eeprom_flush(void);
 
 bool PersistentStore::access_start() { return true; }
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
new file mode 100644
index 0000000000..b644b2e172
--- /dev/null
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
@@ -0,0 +1,59 @@
+#ifdef ARDUINO_ARCH_SAM
+
+#include "../shared/persistent_store_api.h"
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+extern void eeprom_flush(void);
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+
+bool access_finish() {
+  #if DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
+    eeprom_flush();
+  #endif
+  return true;
+}
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;
+}
+
+}
+}
+
+#endif // EEPROM_SETTINGS
+#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp b/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
index df33f9db62..243033e68b 100644
--- a/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
@@ -61,7 +61,7 @@
 
 #include <U8glib.h>
 #include <Arduino.h>
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 void u8g_SetPIOutput_DUE(u8g_t *u8g, uint8_t pin_index) {
    PIO_Configure(g_APinDescription[u8g->pin_list[pin_index]].pPort, PIO_OUTPUT_1,
diff --git a/Marlin/src/HAL/HAL_ESP32/HAL.h b/Marlin/src/HAL/HAL_ESP32/HAL.h
index 28e75b332e..106299295a 100644
--- a/Marlin/src/HAL/HAL_ESP32/HAL.h
+++ b/Marlin/src/HAL/HAL_ESP32/HAL.h
@@ -40,8 +40,8 @@
 #undef DISABLED
 #define DISABLED(b) (!_CAT(SWITCH_ENABLED_, b))
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_ESP32.h"
 #include "watchdog_ESP32.h"
diff --git a/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp b/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
index e59e1f90de..c93227822d 100644
--- a/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
+++ b/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
@@ -28,7 +28,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
index b579aa620a..9bb43c2b24 100644
--- a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
@@ -21,7 +21,7 @@
 #ifdef TARGET_LPC1768
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 HalSerial usb_serial;
 
diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.h b/Marlin/src/HAL/HAL_LPC1768/HAL.h
index b26581d443..5a90dafa66 100644
--- a/Marlin/src/HAL/HAL_LPC1768/HAL.h
+++ b/Marlin/src/HAL/HAL_LPC1768/HAL.h
@@ -60,8 +60,8 @@ extern "C" volatile uint32_t _millis;
 #include <Arduino.h>
 #include <pinmapping.h>
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio.h"
 #include "watchdog.h"
 #include "serial.h"
diff --git a/Marlin/src/HAL/HAL_LPC1768/arduino.cpp b/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
index abdc6b3539..92efd3495a 100644
--- a/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
@@ -26,7 +26,7 @@
 #include <lpc17xx_pinsel.h>
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 // Interrupts
 void cli(void) { __disable_irq(); } // Disable
diff --git a/Marlin/src/HAL/HAL_LPC1768/include/SPI.h b/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
index bcd2d7b54f..2515634236 100644
--- a/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
+++ b/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
@@ -22,7 +22,7 @@
 
 #pragma once
 
-#include "../../HAL_SPI.h"
+#include "../../shared/HAL_SPI.h"
 
 #include <stdint.h>
 
diff --git a/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp b/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
index 607ea9dcb2..1d469dab3a 100644
--- a/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
@@ -37,7 +37,7 @@
 //
 //#include <WInterrupts.h>
 #include "../../../inc/MarlinConfig.h"
-#include "../../Delay.h"
+#include "../../shared/Delay.h"
 #include <stdint.h>
 #include <stdarg.h>
 #include <Arduino.h>
diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h b/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
index 2b4d23a54a..9f6d626491 100644
--- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
+++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
@@ -19,6 +19,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 //#define FLASH_EEPROM
diff --git a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
index c61fa4a8ce..6b036ba5ea 100644
--- a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
@@ -61,7 +61,7 @@
 
 //#include <inttypes.h>
 #include <U8glib.h>
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #define SPI_FULL_SPEED 0
 #define SPI_HALF_SPEED 1
diff --git a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
index 700ed59463..a189b9126d 100644
--- a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
@@ -61,7 +61,7 @@
 
 #include <U8glib.h>
 #include "SoftwareSPI.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #define SPI_SPEED 3  // About 1 MHz
 
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL.h b/Marlin/src/HAL/HAL_STM32F1/HAL.h
index 8d459b1dbb..8ce614e73a 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL.h
@@ -56,8 +56,8 @@
 // Includes
 // --------------------------------------------------------------------------
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_Stm32f1.h"
 #include "watchdog_Stm32f1.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
index 59835829a7..58d22ac572 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
index 779225d093..cb91f12bf4 100644
--- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
@@ -34,7 +34,7 @@
 // This is for EEPROM emulation in flash
 #if ENABLED(EEPROM_SETTINGS) && ENABLED(FLASH_EEPROM_EMULATION)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 #include <flash_stm32.h>
 #include <EEPROM.h>
diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
index 26e011cf1d..f25799d311 100644
--- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
@@ -31,7 +31,8 @@
 
 #if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
+
 #include "../../sd/cardreader.h"
 
 #define HAL_STM32F1_EEPROM_SIZE 4096
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL.h b/Marlin/src/HAL/HAL_STM32F4/HAL.h
index b5beefbfe1..bf648a108b 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL.h
@@ -43,8 +43,8 @@
   #include <USBSerial.h>
 #endif
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_STM32F4.h"
 #include "watchdog_STM32F4.h"
 
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
index 606d43f7f9..5e3ff4d9d9 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
index 33a92f99d3..4a0917744d 100644
--- a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
@@ -23,7 +23,7 @@
 
 #if defined(STM32F4) || defined(STM32F4xx)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 #include "../../inc/MarlinConfig.h"
 
diff --git a/Marlin/src/HAL/HAL_STM32F7/HAL.h b/Marlin/src/HAL/HAL_STM32F7/HAL.h
index c594392d88..04588057ba 100644
--- a/Marlin/src/HAL/HAL_STM32F7/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F7/HAL.h
@@ -39,8 +39,8 @@
 
 #include "Arduino.h"
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_STM32F7.h"
 #include "watchdog_STM32F7.h"
diff --git a/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp b/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
index db595eeeb2..edf889711c 100644
--- a/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
+++ b/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
index a765d2e68d..c9a409ad1b 100644
--- a/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
@@ -23,11 +23,11 @@
 
 #ifdef STM32F7
 
-#include "../../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfigPre.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 bool PersistentStore::access_start() { return true; }
 bool PersistentStore::access_finish() { return true; }
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
index 5bd3369e43..4f7f67a3bb 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
@@ -26,7 +26,7 @@
 #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
 
 #include "HAL.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #include <Wire.h>
 
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
index 6a11bf93c9..b60a5d28ad 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
@@ -42,8 +42,8 @@
 #undef sq
 #define sq(x) ((x)*(x))
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_Teensy.h"
 #include "watchdog_Teensy.h"
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
index 871e588774..7fc9fc6f73 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
@@ -27,7 +27,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 #include <avr/eeprom.h>
 
 bool PersistentStore::access_start() { return true; }
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp
new file mode 100644
index 0000000000..009cdaa504
--- /dev/null
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp
@@ -0,0 +1,51 @@
+#if defined(__MK64FX512__) || defined(__MK66FX1M0__)
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+#include "../shared/persistent_store_api.h"
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+bool access_finish() { return true; }
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;
+}
+
+} // PersistentStore
+} // HAL
+
+#endif // EEPROM_SETTINGS
+#endif // __MK64FX512__ || __MK66FX1M0__
diff --git a/Marlin/src/HAL/persistent_store_api.cpp b/Marlin/src/HAL/persistent_store_api.cpp
index 68afa63620..b60b75ee8e 100644
--- a/Marlin/src/HAL/persistent_store_api.cpp
+++ b/Marlin/src/HAL/persistent_store_api.cpp
@@ -24,7 +24,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-  #include "persistent_store_api.h"
+  #include "shared/persistent_store_api.h"
   PersistentStore persistentStore;
 
 #endif
diff --git a/Marlin/src/HAL/Delay.h b/Marlin/src/HAL/shared/Delay.h
similarity index 99%
rename from Marlin/src/HAL/Delay.h
rename to Marlin/src/HAL/shared/Delay.h
index 972f1e2c18..9b5f1aa123 100644
--- a/Marlin/src/HAL/Delay.h
+++ b/Marlin/src/HAL/shared/Delay.h
@@ -31,7 +31,7 @@
 #ifndef MARLIN_DELAY_H
 #define MARLIN_DELAY_H
 
-#include "../core/macros.h"
+#include "../../core/macros.h"
 
 #if defined(__arm__) || defined(__thumb__)
 
diff --git a/Marlin/src/HAL/HAL_SPI.h b/Marlin/src/HAL/shared/HAL_SPI.h
similarity index 100%
rename from Marlin/src/HAL/HAL_SPI.h
rename to Marlin/src/HAL/shared/HAL_SPI.h
diff --git a/Marlin/src/HAL/I2cEeprom.cpp b/Marlin/src/HAL/shared/I2cEeprom.cpp
similarity index 99%
rename from Marlin/src/HAL/I2cEeprom.cpp
rename to Marlin/src/HAL/shared/I2cEeprom.cpp
index 874b99c80a..20fe7de341 100644
--- a/Marlin/src/HAL/I2cEeprom.cpp
+++ b/Marlin/src/HAL/shared/I2cEeprom.cpp
@@ -25,7 +25,7 @@
  * Not platform dependent.
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if ENABLED(I2C_EEPROM)
 
diff --git a/Marlin/src/HAL/SpiEeprom.cpp b/Marlin/src/HAL/shared/SpiEeprom.cpp
similarity index 98%
rename from Marlin/src/HAL/SpiEeprom.cpp
rename to Marlin/src/HAL/shared/SpiEeprom.cpp
index 6d36d1ca7e..98ed612d07 100644
--- a/Marlin/src/HAL/SpiEeprom.cpp
+++ b/Marlin/src/HAL/shared/SpiEeprom.cpp
@@ -25,7 +25,7 @@
  * Not platform dependent.
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if ENABLED(SPI_EEPROM)
 
diff --git a/Marlin/src/HAL/math_32bit.h b/Marlin/src/HAL/shared/math_32bit.h
similarity index 97%
rename from Marlin/src/HAL/math_32bit.h
rename to Marlin/src/HAL/shared/math_32bit.h
index a59d221369..472dfc3b56 100644
--- a/Marlin/src/HAL/math_32bit.h
+++ b/Marlin/src/HAL/shared/math_32bit.h
@@ -23,7 +23,7 @@
 #ifndef MATH_32BIT_H
 #define MATH_32BIT_H
 
-#include "../core/macros.h"
+#include "../../core/macros.h"
 
 /**
  * Math helper functions for 32 bit CPUs
diff --git a/Marlin/src/HAL/persistent_store_api.h b/Marlin/src/HAL/shared/persistent_store_api.h
similarity index 100%
rename from Marlin/src/HAL/persistent_store_api.h
rename to Marlin/src/HAL/shared/persistent_store_api.h
diff --git a/Marlin/src/HAL/platforms.h b/Marlin/src/HAL/shared/platforms.h
similarity index 100%
rename from Marlin/src/HAL/platforms.h
rename to Marlin/src/HAL/shared/platforms.h
diff --git a/Marlin/src/HAL/servo.cpp b/Marlin/src/HAL/shared/servo.cpp
similarity index 99%
rename from Marlin/src/HAL/servo.cpp
rename to Marlin/src/HAL/shared/servo.cpp
index a49aac0f99..2c6be5e1f2 100644
--- a/Marlin/src/HAL/servo.cpp
+++ b/Marlin/src/HAL/shared/servo.cpp
@@ -51,7 +51,7 @@
  *
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if HAS_SERVOS && !(IS_32BIT_TEENSY || defined(TARGET_LPC1768) || defined(STM32F4) || defined(STM32F4xx))
 
diff --git a/Marlin/src/HAL/servo.h b/Marlin/src/HAL/shared/servo.h
similarity index 96%
rename from Marlin/src/HAL/servo.h
rename to Marlin/src/HAL/shared/servo.h
index 5df396efd6..e1a57485b0 100644
--- a/Marlin/src/HAL/servo.h
+++ b/Marlin/src/HAL/shared/servo.h
@@ -70,12 +70,12 @@
 #define SERVO_H
 
 #if IS_32BIT_TEENSY
-  #include "HAL_TEENSY35_36/HAL_Servo_Teensy.h" // Teensy HAL uses an inherited library
+  #include "../HAL_TEENSY35_36/HAL_Servo_Teensy.h" // Teensy HAL uses an inherited library
 
 #elif defined(TARGET_LPC1768)
-  #include "HAL_LPC1768/LPC1768_Servo.h"
+  #include "../HAL_LPC1768/LPC1768_Servo.h"
 #elif defined(STM32F4) || defined(STM32F4xx)
-  #include "HAL_STM32F4/HAL_Servo_STM32F4.h"
+  #include "../HAL_STM32F4/HAL_Servo_STM32F4.h"
 #else
   #include <stdint.h>
 
diff --git a/Marlin/src/HAL/servo_private.h b/Marlin/src/HAL/shared/servo_private.h
similarity index 98%
rename from Marlin/src/HAL/servo_private.h
rename to Marlin/src/HAL/shared/servo_private.h
index 3b1bcda584..2dcc9eb98f 100644
--- a/Marlin/src/HAL/servo_private.h
+++ b/Marlin/src/HAL/shared/servo_private.h
@@ -46,9 +46,9 @@
 
 // Architecture specific include
 #ifdef __AVR__
-  #include "HAL_AVR/ServoTimers.h"
+  #include "../HAL_AVR/ServoTimers.h"
 #elif defined(ARDUINO_ARCH_SAM)
-  #include "HAL_DUE/ServoTimers.h"
+  #include "../HAL_DUE/ServoTimers.h"
 #else
   #error "This library only supports boards with an AVR or SAM3X processor."
 #endif
diff --git a/Marlin/src/feature/Max7219_Debug_LEDs.cpp b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
index 3e808d56be..c69be41d4e 100644
--- a/Marlin/src/feature/Max7219_Debug_LEDs.cpp
+++ b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
@@ -46,7 +46,7 @@
 #include "../module/planner.h"
 #include "../module/stepper.h"
 #include "../Marlin.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 uint8_t LEDs[8 * (MAX7219_NUMBER_UNITS)] = { 0 };
 
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index e1771c91f7..73a0cfdeb3 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -29,7 +29,7 @@
   #include "ubl.h"
 
   #include "../../../Marlin.h"
-  #include "../../../HAL/persistent_store_api.h"
+  #include "../../../HAL/shared/persistent_store_api.h"
   #include "../../../libs/hex_print_routines.h"
   #include "../../../module/configuration_store.h"
   #include "../../../lcd/ultralcd.h"
diff --git a/Marlin/src/feature/dac/dac_dac084s085.cpp b/Marlin/src/feature/dac/dac_dac084s085.cpp
index 934b3165bd..eb3a67de2a 100644
--- a/Marlin/src/feature/dac/dac_dac084s085.cpp
+++ b/Marlin/src/feature/dac/dac_dac084s085.cpp
@@ -12,7 +12,7 @@
 
 #include "../../Marlin.h"
 #include "../../module/stepper.h"
-#include "../../HAL/Delay.h"
+#include "../../HAL/shared/Delay.h"
 
 dac084s085::dac084s085() { }
 
diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h
index 7f9b50eb01..f3bc903bf2 100644
--- a/Marlin/src/inc/MarlinConfigPre.h
+++ b/Marlin/src/inc/MarlinConfigPre.h
@@ -23,7 +23,7 @@
 #ifndef _MARLIN_CONFIGPRE_H_
 #define _MARLIN_CONFIGPRE_H_
 
-#include "../HAL/platforms.h"
+#include "../HAL/shared/platforms.h"
 #include "../core/boards.h"
 #include "../core/macros.h"
 #include "../core/types.h"
diff --git a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
index 8e176b8a01..81533ed76e 100644
--- a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
@@ -29,7 +29,7 @@
 
 #if !(defined(U8G_HAL_LINKS) || defined(__SAM3X8E__))
 
-#include "../../HAL/Delay.h"
+#include "../../HAL/shared/Delay.h"
 
 #define ST7920_CLK_PIN  LCD_PINS_D4
 #define ST7920_DAT_PIN  LCD_PINS_ENABLE
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index 05f7d3766a..092934a66e 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -344,7 +344,7 @@ void MarlinSettings::postprocess() {
 }
 
 #if ENABLED(EEPROM_SETTINGS)
-  #include "../HAL/persistent_store_api.h"
+  #include "../HAL/shared/persistent_store_api.h"
 
   #define DUMMY_PID_VALUE 3000.0f
   #define EEPROM_START() int eeprom_index = EEPROM_OFFSET; persistentStore.access_start()
diff --git a/Marlin/src/module/configuration_store.h b/Marlin/src/module/configuration_store.h
index 7e678ade5e..84e90527b3 100644
--- a/Marlin/src/module/configuration_store.h
+++ b/Marlin/src/module/configuration_store.h
@@ -24,8 +24,9 @@
 #define CONFIGURATION_STORE_H
 
 #include "../inc/MarlinConfig.h"
+
 #if ENABLED(EEPROM_SETTINGS)
-  #include "../HAL/persistent_store_api.h"
+  #include "../HAL/shared/persistent_store_api.h"
 #endif
 
 #define ADD_PORT_ARG ENABLED(EEPROM_CHITCHAT) && NUM_SERIAL > 1
diff --git a/Marlin/src/module/printcounter.cpp b/Marlin/src/module/printcounter.cpp
index b8fa89707b..5f4d226286 100644
--- a/Marlin/src/module/printcounter.cpp
+++ b/Marlin/src/module/printcounter.cpp
@@ -31,7 +31,7 @@ Stopwatch print_job_timer;      // Global Print Job Timer instance
 
 #include "printcounter.h"
 #include "../Marlin.h"
-#include "../HAL/persistent_store_api.h"
+#include "../HAL/shared/persistent_store_api.h"
 
 PrintCounter print_job_timer;   // Global Print Job Timer instance
 
diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h
index 77d3f6eb87..05f4d6f4ef 100644
--- a/Marlin/src/module/servo.h
+++ b/Marlin/src/module/servo.h
@@ -27,7 +27,7 @@
 #ifndef _SERVO_H_
 #define _SERVO_H_
 
-#include "../HAL/servo.h"
+#include "../HAL/shared/servo.h"
 
 extern HAL_SERVO_LIB servo[NUM_SERVOS];
 extern void servo_init();
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 1b85dcbb7b..67907ac017 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -93,7 +93,7 @@
 #include "../gcode/queue.h"
 #include "../sd/cardreader.h"
 #include "../Marlin.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 #if MB(ALLIGATOR)
   #include "../feature/dac/dac_dac084s085.h"
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index c483fd0903..6156545ef4 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -31,7 +31,7 @@
 #include "../lcd/ultralcd.h"
 #include "planner.h"
 #include "../core/language.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 #if ENABLED(HEATER_0_USES_MAX6675)
   #include "../libs/private_spi.h"
diff --git a/platformio.ini b/platformio.ini
index 49731ef91a..c93fbfdda6 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -58,7 +58,7 @@ board             = megaatmega2560
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -71,7 +71,7 @@ board             = megaatmega1280
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -88,7 +88,7 @@ board         = at90usb1286
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ldf_mode  = deep+
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_CDC.py
 monitor_speed = 250000
 
@@ -122,7 +122,7 @@ board         = due
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 [env:DUE_USB]
 platform      = atmelsam
@@ -131,7 +131,7 @@ board         = dueUSB
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 [env:DUE_debug]
 # Used when WATCHDOG_RESET_MANUAL is enabled
@@ -143,7 +143,7 @@ build_flags   = ${common.build_flags}
   -mpoke-function-name
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 
 #
@@ -165,7 +165,7 @@ lib_deps          = CMSIS-LPC1768
   TMC2130Stepper@>=2.2.1
   TMC2208Stepper@>=0.2.1
 extra_scripts     = Marlin/src/HAL/HAL_LPC1768/debug_extra_script.py, Marlin/src/HAL/HAL_LPC1768/lpc1768_flag_script.py, Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_LPC1768>
 monitor_speed     = 250000
 debug_tool        = custom
 debug_server      =
@@ -187,7 +187,7 @@ board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 upload_speed  = 57600
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -200,7 +200,7 @@ board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 upload_speed  = 115200
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -213,7 +213,7 @@ board             = reprap_rambo
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -225,7 +225,7 @@ framework     = arduino
 board         = sanguino_atmega644p
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -237,7 +237,7 @@ framework     = arduino
 board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -259,7 +259,7 @@ lib_ignore    = U8glib-HAL
   libf3e
   TMC26XStepper
 lib_ldf_mode  = 1
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
 monitor_speed = 250000
 
 #
@@ -272,7 +272,7 @@ board         = disco_f407vg
 build_flags   = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB
 lib_deps      = ${common.lib_deps}
 lib_ignore    = Adafruit NeoPixel, c1921b4, TMC2130Stepper
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F4>
 monitor_speed = 250000
 
 #
@@ -285,7 +285,7 @@ board         = teensy35
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = Adafruit NeoPixel
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_TEENSY35_36>
 monitor_speed = 250000
 
 [env:malyanm200]
@@ -293,7 +293,7 @@ platform    = ststm32
 framework   = arduino
 board       = malyanM200
 build_flags = !python Marlin/src/HAL/HAL_STM32F1/stm32f1_flag_script.py -DMCU_STM32F103CB -D __STM32F1__=1 -std=c++1y -D MOTHERBOARD="BOARD_MALYAN_M200" -DSERIAL_USB -ffunction-sections -fdata-sections -Wl,--gc-sections
-src_filter  = ${common.default_src_filter}
+src_filter  = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
 #-<frameworks>
 lib_ignore  =
   U8glib
@@ -313,9 +313,9 @@ lib_ignore  =
 # Espressif ESP32
 #
 [env:esp32]
-platform = https://github.com/platformio/platform-espressif32.git#feature/stage
-board = esp32dev
-framework = arduino
+platform    = https://github.com/platformio/platform-espressif32.git#feature/stage
+board       = esp32dev
+framework   = arduino
 upload_port = COM3
 lib_ignore  =
   LiquidCrystal_I2C
@@ -324,3 +324,4 @@ lib_ignore  =
   LiquidTWI2
   TMC26XStepper
   c1921b4
+src_filter  = ${common.default_src_filter} +<src/HAL/HAL_ESP32>
-- 
GitLab