From a740b6b3180f2407dec41f944faf69b8f2100615 Mon Sep 17 00:00:00 2001
From: ellensp <ellensp@hotmail.com>
Date: Fri, 29 May 2020 05:52:13 +1200
Subject: [PATCH] More 'extend'ed environments (#18118)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
---
 platformio.ini | 192 ++++++++++++++++++++-----------------------------
 1 file changed, 79 insertions(+), 113 deletions(-)

diff --git a/platformio.ini b/platformio.ini
index 416d21f82f7..aa8dd21983a 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -56,6 +56,12 @@ lib_deps      =
   SlowSoftI2CMaster=https://github.com/mikeshub/SlowSoftI2CMaster/archive/master.zip
   SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
 
+[common_avr8]
+board_build.f_cpu = 16000000L
+lib_deps          = ${common.lib_deps}
+  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
+src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+
 # Globally defined properties
 # inherited by all environments
 [env]
@@ -78,112 +84,85 @@ monitor_speed = 250000
 # ATmega2560
 #
 [env:mega2560]
-platform          = atmelavr
-board             = megaatmega2560
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+platform      = atmelavr
+extends       = common_avr8
+board         = megaatmega2560
 
 #
 # ATmega1280
 #
 [env:mega1280]
-platform          = atmelavr
-board             = megaatmega1280
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+platform      = atmelavr
+extends       = common_avr8
+board         = megaatmega1280
 
 #
 # MightyBoard ATmega2560 (MegaCore 100 pin boards variants)
 #
 [env:MightyBoard1280]
-platform          = atmelavr
-board             = ATmega1280
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
-upload_speed      = 57600
+platform      = atmelavr
+extends       = common_avr8
+board         = megaatmega1280
+upload_speed  = 57600
 
 #
 # MightyBoard ATmega2560 (MegaCore 100 pin boards variants)
 #
 [env:MightyBoard2560]
-platform          = atmelavr
-board             = ATmega2560
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
-upload_protocol   = wiring
-upload_speed      = 57600
+platform      = atmelavr
+extends       = common_avr8
+board         = megaatmega2560
+upload_protocol = wiring
+upload_speed  = 57600
 board_upload.maximum_size = 253952
 
 #
 # RAMBo
 #
 [env:rambo]
-platform          = atmelavr
-board             = reprap_rambo
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+platform      = atmelavr
+extends       = common_avr8
+board         = reprap_rambo
 
 #
 # FYSETC F6 V1.3
 #
 [env:FYSETC_F6_13]
-platform          = atmelavr
-board             = fysetc_f6_13
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+platform      = atmelavr
+extends       = common_avr8
+board         = fysetc_f6_13
 
 #
 # FYSETC F6 V1.4
 #
 [env:FYSETC_F6_14]
-platform          = atmelavr
-board             = fysetc_f6_14
-board_build.f_cpu = 16000000L
-lib_deps          = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter        = ${common.default_src_filter} +<src/HAL/AVR>
+platform      = atmelavr
+extends       = common_avr8
+board         = fysetc_f6_14
 
 #
 # Sanguinololu (ATmega644p)
 #
 [env:sanguino644p]
 platform      = atmelavr
+extends       = common_avr8
 board         = sanguino_atmega644p
-lib_deps      = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
 
 #
 # Sanguinololu (ATmega1284p)
 #
 [env:sanguino1284p]
 platform      = atmelavr
+extends       = common_avr8
 board         = sanguino_atmega1284p
-lib_deps      = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
 
 #
 # Melzi and clones (ATmega1284p)
 #
 [env:melzi]
 platform      = atmelavr
+extends       = common_avr8
 board         = sanguino_atmega1284p
-lib_deps      = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
 lib_ignore    = TMCStepper
 upload_speed  = 57600
 
@@ -192,11 +171,7 @@ upload_speed  = 57600
 #
 [env:melzi_optiboot]
 platform      = atmelavr
-board         = sanguino_atmega1284p
-lib_deps      = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
-lib_ignore    = TMCStepper
+extends       = env:melzi
 upload_speed  = 115200
 
 #
@@ -208,11 +183,9 @@ upload_speed  = 115200
 #
 [env:at90usb1286_cdc]
 platform      = teensy
+extends       = common_avr8
 board         = at90usb1286
-lib_deps      = ${common.lib_deps}
-  TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
 lib_ignore    = TMCStepper
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
 
 #
 # AT90USB1286 boards using DFU bootloader
@@ -222,10 +195,7 @@ src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
 #
 [env:at90usb1286_dfu]
 platform      = teensy
-board         = at90usb1286
-lib_deps      = ${common.lib_deps}
-lib_ignore    = TMCStepper
-src_filter    = ${common.default_src_filter} +<src/HAL/AVR>
+extends       = env:at90usb1286_cdc
 
 #
 # Due (Atmel SAM3X8E ARM Cortex-M3)
@@ -255,7 +225,7 @@ build_flags   = ${common.build_flags}
 #
 # Archim SAM
 #
-[env:DUE_archim]
+[common_DUE_archim]
 platform      = atmelsam
 board         = due
 src_filter    = ${common.default_src_filter} +<src/HAL/DUE>
@@ -263,54 +233,49 @@ build_flags   = ${common.build_flags}
   -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSBCON
 extra_scripts = Marlin/src/HAL/DUE/upload_extra_script.py
 
-[env:DUE_archim_debug]
+[env:DUE_archim]
+platform      = ${common_DUE_archim.platform}
+extends       = common_DUE_archim
+
 # Used when WATCHDOG_RESET_MANUAL is enabled
-platform      = atmelsam
-board         = due
-src_filter    = ${common.default_src_filter} +<src/HAL/DUE>
-build_flags   = ${common.build_flags}
-  -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSBCON
-  -funwind-tables -mpoke-function-name
-extra_scripts = Marlin/src/HAL/DUE/upload_extra_script.py
+[env:DUE_archim_debug]
+platform      = ${common_DUE_archim.platform}
+extends       = common_DUE_archim
+build_flags   = ${common_DUE_archim.build_flags} -funwind-tables -mpoke-function-name
+
+#
+# NXP LPC176x ARM Cortex-M3
+#
+[common_LPC]
+platform          = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip
+board             = nxp_lpc1768
+build_flags       = -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g ${common.build_flags}
+lib_ldf_mode      = off
+lib_compat_mode   = strict
+extra_scripts     = Marlin/src/HAL/LPC1768/upload_extra_script.py
+src_filter        = ${common.default_src_filter} +<src/HAL/LPC1768>
+lib_deps          = Servo
+  LiquidCrystal
+  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
+  TMCStepper@>=0.6.2
+  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/release.zip
+  SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
+# debug options for backtrace
+#  -funwind-tables
+#  -mpoke-function-name
 
 #
 # NXP LPC176x ARM Cortex-M3
 #
 [env:LPC1768]
-platform          = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip
-board             = nxp_lpc1768
-build_flags       = -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g ${common.build_flags}
-# debug options for backtrace
-#  -funwind-tables
-#  -mpoke-function-name
-lib_ldf_mode      = off
-lib_compat_mode   = strict
-extra_scripts     = Marlin/src/HAL/LPC1768/upload_extra_script.py
-src_filter        = ${common.default_src_filter} +<src/HAL/LPC1768>
-lib_deps          = Servo
-  LiquidCrystal
-  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
-  TMCStepper@>=0.6.2
-  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/release.zip
-  SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
+platform  = ${common_LPC.platform}
+extends   = common_LPC
+board     = nxp_lpc1768
 
 [env:LPC1769]
-platform          = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip
-board             = nxp_lpc1769
-build_flags       = -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g ${common.build_flags}
-# debug options for backtrace
-#  -funwind-tables
-#  -mpoke-function-name
-lib_ldf_mode      = off
-lib_compat_mode   = strict
-extra_scripts     = Marlin/src/HAL/LPC1768/upload_extra_script.py
-src_filter        = ${common.default_src_filter} +<src/HAL/LPC1768>
-lib_deps          = Servo
-  LiquidCrystal
-  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
-  TMCStepper@>=0.6.2
-  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/release.zip
-  SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
+platform  = ${common_LPC.platform}
+extends   = common_LPC
+board     = nxp_lpc1769
 
 #
 # STM32F103RC
@@ -610,9 +575,10 @@ platform          = ststm32
 platform_packages = framework-arduinoststm32@${common.arduinoststm32_ver}
 board             = STEVAL_STM32F401VE
 build_flags       = ${common.build_flags}
-  -DTARGET_STM32F4 -DARDUINO_STEVAL -DSTM32F401xE
-  -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STEVAL_F401VE\"
-  -DDISABLE_GENERIC_SERIALUSB -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS
+  -DTARGET_STM32F4 -DSTM32F401xE -DUSBCON
+  -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STEVAL_F401VE\"
+  -DARDUINO_STEVAL -DDISABLE_GENERIC_SERIALUSB
+  -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS
   -IMarlin/src/HAL/STM32
 build_unflags     = -std=gnu++11
 extra_scripts     = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
@@ -628,9 +594,9 @@ platform          = ststm32
 platform_packages = framework-arduinoststm32@${common.arduinoststm32_ver}
 board             = FLYF407ZG
 build_flags       = ${common.build_flags}
-  -DSTM32F4 -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\"
-  -DTARGET_STM32F4 -DVECT_TAB_OFFSET=0x8000
-  -IMarlin/src/HAL/STM32
+  -DTARGET_STM32F4 -DSTM32F4 -DUSBCON
+  -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\"
+  -DVECT_TAB_OFFSET=0x8000 -IMarlin/src/HAL/STM32
 build_unflags     = -std=gnu++11
 extra_scripts     = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
 lib_ignore        = Adafruit NeoPixel, SailfishLCD, SlowSoftI2CMaster, SoftwareSerial