#
# Marlin Firmware
# PlatformIO Configuration File
#
# For detailed documentation with EXAMPLES:
#
# http://docs.platformio.org/en/latest/projectconf.html
#

# Automatic targets - enable auto-uploading
# targets = upload

#
# By default platformio build will abort after 5 errors.
# Remove '-fmax-errors=5' from build_flags below to see all.
#

[platformio]
src_dir     = Marlin
build_dir   = .pioenvs
lib_dir     = .piolib
libdeps_dir = .piolibdeps
boards_dir  = buildroot/share/PlatformIO/boards
env_default = megaatmega2560

[common]
default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
build_flags = -fmax-errors=5
  -g
  -ggdb
lib_deps =
  https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
  LiquidCrystal@1.3.4
  TMCStepper@<1.0.0
  Adafruit NeoPixel@1.1.3
  https://github.com/lincomatic/LiquidTWI2/archive/30aa480.zip
  https://github.com/ameyer/Arduino-L6470/archive/dev.zip
  https://github.com/trinamic/TMC26XStepper/archive/c1921b4.zip
  https://github.com/mikeshub/SailfishLCD.git
  https://github.com/mikeshub/SailfishRGB_LED.git
  https://github.com/mikeshub/SlowSoftI2CMaster.git

#################################
#                               #
#   Unique Core Architectures   #
#                               #
#  Add a new "env" below if no  #
# entry has values suitable to  #
#   build for a given board.    #
#                               #
#################################

#
# ATmega2560
#
[env:megaatmega2560]
platform          = atmelavr
framework         = arduino
board             = megaatmega2560
build_flags       = ${common.build_flags}
board_build.f_cpu = 16000000L
lib_deps          = ${common.lib_deps}
src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed     = 250000

#
# ATmega1280
#
[env:megaatmega1280]
platform          = atmelavr
framework         = arduino
board             = megaatmega1280
build_flags       = ${common.build_flags}
board_build.f_cpu = 16000000L
lib_deps          = ${common.lib_deps}
src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed     = 250000

#
# AT90USB1286 boards using CDC bootloader
# - BRAINWAVE
# - BRAINWAVE_PRO
# - SAV_MKI
# - TEENSYLU
#
[env:at90usb1286_cdc]
platform      = teensy
framework     = arduino
board         = at90usb1286
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
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

#
# AT90USB1286 boards using DFU bootloader
# - PrintrBoard
# - PrintrBoard Rev.F
# - ? 5DPRINT ?
#
[env:at90usb1286_dfu]
platform      = teensy
framework     = arduino
board         = at90usb1286
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_DFU.py
monitor_speed = 250000

#
# Due (Atmel SAM3X8E ARM Cortex-M3)
#
#  - RAMPS4DUE
#  - RADDS
#
[env:DUE]
platform      = atmelsam
framework     = arduino
board         = due
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
lib_ignore    = c1921b4
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
monitor_speed = 250000
[env:DUE_USB]
platform      = atmelsam
framework     = arduino
board         = dueUSB
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
lib_ignore    = c1921b4
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
monitor_speed = 250000
[env:DUE_debug]
# Used when WATCHDOG_RESET_MANUAL is enabled
platform      = atmelsam
framework     = arduino
board         = due
build_flags   = ${common.build_flags}
  -funwind-tables
  -mpoke-function-name
lib_deps      = ${common.lib_deps}
lib_ignore    = c1921b4
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
monitor_speed = 250000

#
# NXP LPC176x ARM Cortex-M3
#
[env:LPC1768]
platform          = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/master.zip
framework         = arduino
board             = nxp_lpc1768
build_flags       = -DTARGET_LPC1768 -DU8G_HAL_LINKS -IMarlin/src/HAL/HAL_LPC1768/include -IMarlin/src/HAL/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/HAL_LPC1768/upload_extra_script.py
src_filter        = ${common.default_src_filter} +<src/HAL/HAL_LPC1768>
monitor_speed     = 250000
lib_deps          = Servo
  LiquidCrystal
  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
  TMCStepper@<1.0.0
  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/master.zip

[env:LPC1769]
platform          = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/master.zip
framework         = arduino
board             = nxp_lpc1769
build_flags       = -DTARGET_LPC1768 -DLPC1769 -DU8G_HAL_LINKS -IMarlin/src/HAL/HAL_LPC1768/include -IMarlin/src/HAL/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/HAL_LPC1768/upload_extra_script.py
src_filter        = ${common.default_src_filter} +<src/HAL/HAL_LPC1768>
monitor_speed     = 250000
lib_deps          = Servo
  LiquidCrystal
  U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
  TMCStepper@<1.0.0
  Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/master.zip

#
# Melzi and clones (ATmega1284p)
#
[env:melzi]
platform      = atmelavr
framework     = arduino
board         = sanguino_atmega1284p
build_flags   = ${common.build_flags}
upload_speed  = 57600
lib_deps      = ${common.lib_deps}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed = 250000

#
# Melzi and clones (Optiboot bootloader)
#
[env:melzi_optiboot]
platform      = atmelavr
framework     = arduino
board         = sanguino_atmega1284p
build_flags   = ${common.build_flags}
upload_speed  = 115200
lib_deps      = ${common.lib_deps}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed = 250000

#
# RAMBo
#
[env:rambo]
platform          = atmelavr
framework         = arduino
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/HAL/HAL_AVR>
monitor_speed     = 250000

#
# Sanguinololu (ATmega644p)
#
[env:sanguino_atmega644p]
platform      = atmelavr
framework     = arduino
board         = sanguino_atmega644p
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed = 250000

#
# Sanguinololu (ATmega1284p)
#
[env:sanguino_atmega1284p]
platform      = atmelavr
framework     = arduino
board         = sanguino_atmega1284p
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed = 250000

#
# STM32F103RE
#
[env:STM32F1]
platform      = ststm32@<4.4.0
framework     = arduino
board         = genericSTM32F103RE
build_flags   = !python Marlin/src/HAL/HAL_STM32F1/STM32F1_flag_script.py
  ${common.build_flags}
lib_deps      = ${common.lib_deps}
lib_ignore    = U8glib-HAL
  c1921b4
  libf3c
  lib066
  Adafruit NeoPixel_ID28
  Adafruit NeoPixel
  libf3e
  TMC26XStepper
lib_ldf_mode  = 1
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
monitor_speed = 250000

#
# STM32F4
#
[env:STM32F4]
platform      = ststm32
framework     = arduino
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, TMCStepper
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F4>
monitor_speed = 250000

#
# ARMED (STM32)
#
[env:ARMED]
platform    = ststm32
framework   = arduino
board       = armed_v1
build_flags = ${common.build_flags} -DUSBCON -DUSBD_VID=0x0483 '-DUSB_MANUFACTURER="Unknown"' '-DUSB_PRODUCT="ARMED_V1"' -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing -std=gnu11 -std=gnu++11
lib_deps    = ${common.lib_deps}
lib_ignore  = Adafruit NeoPixel, c1921b4
src_filter  = ${common.default_src_filter} +<src/HAL/HAL_STM32>
monitor_speed = 250000

#
# MKS Robin (STM32F103ZET6)
#
[env:mks_robin]
platform      = ststm32
framework     = arduino
board         = genericSTM32F103ZE
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin.py
build_flags   = !python Marlin/src/HAL/HAL_STM32F1/STM32F1_flag_script.py
  ${common.build_flags}
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
lib_deps      = ${common.lib_deps}
lib_ignore    = c1921b4
  libf3c
  lib066
  Adafruit NeoPixel_ID28
  Adafruit NeoPixel
  libf3e
  TMC26XStepper

#
# Teensy 3.5 / 3.6 (ARM Cortex-M4)
#
[env:teensy35]
platform      = teensy
framework     = arduino
board         = teensy35
build_flags   = ${common.build_flags}
lib_deps      = ${common.lib_deps}
lib_ignore    = Adafruit NeoPixel
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_TEENSY35_36>
monitor_speed = 250000

#
# Malyan M200 (STM32F1)
#
[env:malyanm200]
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/HAL/HAL_STM32F1>
#-<frameworks>
lib_ignore  =
  U8glib
  LiquidCrystal_I2C
  LiquidCrystal
  NewliquidCrystal
  LiquidTWI2
  Adafruit NeoPixel
  TMCStepper
  Servo(STM32F1)
  TMC26XStepper
  U8glib-HAL
  c1921b4

#
# Espressif ESP32
#
[env:esp32]
platform    = https://github.com/platformio/platform-espressif32.git ; #feature/stage
board       = esp32dev
framework   = arduino
upload_speed = 115200
monitor_speed = 115200
upload_port = /dev/ttyUSB0
lib_deps =
  https://github.com/me-no-dev/AsyncTCP.git
  https://github.com/me-no-dev/ESPAsyncWebServer.git
lib_ignore  =
  LiquidCrystal_I2C
  LiquidCrystal
  NewliquidCrystal
  LiquidTWI2
  TMC26XStepper
  c1921b4
  SailfishLCD
  SailfishRGB_LED
src_filter  = ${common.default_src_filter} +<src/HAL/HAL_ESP32>

#
# FYSETC F6 V1.3
#
[env:fysetc_f6_13]
platform          = atmelavr
framework         = arduino
board             = fysetc_f6_13
build_flags       = ${common.build_flags}
board_build.f_cpu = 16000000L
lib_deps          = ${common.lib_deps}
src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
monitor_speed     = 250000

#
# Native
# No supported Arduino libraries, base Marlin only
#
[env:linux_native]
platform        = native
build_flags     = -D__PLAT_LINUX__ -std=gnu++17 -ggdb -g -lrt -lpthread
src_build_flags = -Wall -IMarlin/src/HAL/HAL_LINUX/include
build_unflags   = -Wall
lib_ldf_mode    = off
lib_deps        =
extra_scripts   =
src_filter      = ${common.default_src_filter} +<src/HAL/HAL_LINUX>