Skip to content

Commit

Permalink
🔨 Clean up build scripts (MarlinFirmware#22264)
Browse files Browse the repository at this point in the history
* Add 10K to marlin_blackSTM32F407VET6 (typo?)
* Document custom build scripts.
* Add a Robin common build script.
* Extraneous .ldscript specifiers
  • Loading branch information
thinkyhead authored and Night69 committed Aug 31, 2021
1 parent b7a8bad commit 483e165
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 108 deletions.
32 changes: 19 additions & 13 deletions buildroot/share/PlatformIO/scripts/stm32_bootloader.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
#
# stm32_bootloader.py
#
import os,sys,shutil,marlin
# - If 'build.offset' is provided, either by JSON or by the environment...
# - Set linker flag LD_FLASH_OFFSET and relocate the VTAB based on 'build.offset'.
# - Set linker flag LD_MAX_DATA_SIZE based on 'build.maximum_ram_size'.
# - Define STM32_FLASH_SIZE from 'upload.maximum_size' for use by Flash-based EEPROM emulation.
#
# - For 'board_build.rename' add a post-action to rename the firmware file.
#
import os,sys,marlin
Import("env")

from SCons.Script import DefaultEnvironment
board = DefaultEnvironment().BoardConfig()

#
# Copy the firmware.bin file to build.firmware, no encryption
#
def noencrypt(source, target, env):
firmware = os.path.join(target[0].dir.path, board.get("build.firmware"))
shutil.copy(target[0].path, firmware)
board_keys = board.get("build").keys()

#
# For build.offset define LD_FLASH_OFFSET, used by ldscript.ld
#
if 'offset' in board.get("build").keys():
if 'offset' in board_keys:
LD_FLASH_OFFSET = board.get("build.offset")
marlin.relocate_vtab(LD_FLASH_OFFSET)

Expand All @@ -35,9 +37,13 @@ def noencrypt(source, target, env):
env["LINKFLAGS"][i] = "-Wl,--defsym=LD_MAX_DATA_SIZE=" + str(maximum_ram_size - 40)

#
# Only copy the file if there's no encrypt
# For build.rename simply rename the firmware file.
#
board_keys = board.get("build").keys()
if 'firmware' in board_keys and ('encrypt' not in board_keys or board.get("build.encrypt") == 'No'):
import marlin
marlin.add_post_action(noencrypt)
if 'rename' in board_keys:

def rename_target(source, target, env):
firmware = os.path.join(target[0].dir.path, board.get("build.rename"))
import shutil
shutil.copy(target[0].path, firmware)

marlin.add_post_action(rename_target)
157 changes: 109 additions & 48 deletions ini/stm32f1.ini
Original file line number Diff line number Diff line change
Expand Up @@ -31,66 +31,72 @@ build_flags = ${common.build_flags}
-DADC_RESOLUTION=12
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/STM32> +<src/HAL/shared/backtrace>
extra_scripts = ${common.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py

#
# BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3)
#
# STM32F103RC_btt ............. RCT6 with 256K
# STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage)
# STM32F103RC_btt_512K ........ RCT6 with 512K
# STM32F103RC_btt_512K_USB .... RCT6 with 512K (USB mass storage)
#
# WARNING! If you have an SKR Mini v1.1 or an SKR Mini E3 1.0 / 1.2 / 2.0 / DIP
# and experience a printer freeze, re-flash Marlin using the regular (non-512K)
# build option. 256K chips may be re-branded 512K chips, but this means the
# upper 256K is sketchy, and failure is very likely.
#
[common_STM32F103RC]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103RC
monitor_speed = 115200
board_build.core = stm32
board_build.variant = MARLIN_F103Rx
board_build.ldscript = ldscript.ld
extra_scripts = ${common.extra_scripts}
extra_scripts = ${common_stm32.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py

#
# STM32F103RE
#
[env:STM32F103RE]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103RE
monitor_speed = 115200

#
# STM32F103VE
#
[env:STM32F103VE]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103VE
monitor_speed = 115200

#
# STM32F103ZE
#
[env:STM32F103ZE]
platform = ${common_stm32.platform}
extends = common_stm32
board = genericSTM32F103ZE
monitor_speed = 115200

#
# BigTree SKR Mini V1.1 / SKR Mini E3 & MZ (STM32F103RCT6 ARM Cortex-M3)
#
# STM32F103RC_btt ............. RCT6 with 256K
# STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage)
#
[env:STM32F103RC_btt]
platform = ${common_stm32.platform}
extends = common_STM32F103RC
build_flags = ${common_stm32.build_flags} -DDEBUG_LEVEL=0 -DTIMER_SERVO=TIM5
board_build.offset = 0x7000
board_build.encrypt = No
board_build.firmware = firmware.bin
board_upload.offset_address = 0x08007000

[env:STM32F103RC_btt_USB]
extends = env:STM32F103RC_btt
platform = ${common_stm32.platform}
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-2.zip
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-3.zip
build_unflags = ${common_stm32.build_unflags} -DUSBD_USE_CDC
build_flags = ${env:STM32F103RC_btt.build_flags} ${env:stm32_flash_drive.build_flags}
-DUSBCON
-DUSE_USBHOST_HS
-DUSE_USB_FS
-DUSBD_IRQ_PRIO=5
-DUSBD_IRQ_SUBPRIO=6
-DUSE_USB_HS_IN_FS
-DUSBD_USE_CDC_MSC

[env:STM32F103RC_btt_512K]
platform = ${common_stm32.platform}
extends = env:STM32F103RC_btt
board_upload.maximum_size = 524288
build_flags = ${env:STM32F103RC_btt.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512

[env:STM32F103RC_btt_512K_USB]
platform = ${common_stm32.platform}
extends = env:STM32F103RC_btt_USB
board_upload.maximum_size = 524288
build_flags = ${env:STM32F103RC_btt_USB.build_flags} -DLD_MAX_DATA_SIZE=524288 -DSTM32_FLASH_SIZE=512

#
# MKS Robin (STM32F103ZET6)
# Uses HAL STM32 to support Marlin UI for TFT screen with optional touch panel
Expand All @@ -101,33 +107,47 @@ extends = common_stm32
board = genericSTM32F103ZE
board_build.core = stm32
board_build.variant = MARLIN_F103Zx
board_build.ldscript = ldscript.ld
board_build.offset = 0x7000
board_build.encrypt = Yes
board_build.firmware = Robin.bin
board_build.encrypt = Robin.bin
build_flags = ${common_stm32.build_flags}
-DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags = ${common_stm32.build_unflags}
-DUSBCON -DUSBD_USE_CDC
extra_scripts = ${common.extra_scripts}
extra_scripts = ${common_stm32.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py
buildroot/share/PlatformIO/scripts/mks_encrypt.py
lib_deps =

#
# MKS Robin E3/E3D (STM32F103RCT6) with TMC2209
#
[env:mks_robin_e3]
platform = ${common_stm32.platform}
extends = common_STM32F103RC
build_flags = ${common_stm32.build_flags}
-DDEBUG_LEVEL=0 -DTIMER_SERVO=TIM5
build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
monitor_speed = 115200
board_build.offset = 0x5000
board_build.encrypt = Robin_e3.bin
board_upload.offset_address = 0x08005000
debug_tool = stlink
extra_scripts = ${common_STM32F103RC.extra_scripts}
buildroot/share/PlatformIO/scripts/mks_encrypt.py

#
# Creality (STM32F103RET6)
#
[env:STM32F103RET6_creality]
platform = ${common_stm32.platform}
extends = common_stm32
build_flags = ${common_stm32.build_flags} -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED -DSS_TIMER=4 -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
build_flags = ${common_stm32.build_flags} -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED -DSS_TIMER=4 -DTIMER_SERVO=TIM5 -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
board = genericSTM32F103RE
monitor_speed = 115200
board_build.core = stm32
board_build.variant = MARLIN_F103Rx
board_build.offset = 0x7000
board_build.ldscript = ldscript.ld
board_upload.offset_address = 0x08007000
build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
extra_scripts = ${common.extra_scripts}
Expand All @@ -137,6 +157,41 @@ extra_scripts = ${common.extra_scripts}
debug_tool = jlink
upload_protocol = jlink

#
# BigTree SKR Mini E3 V2.0 & DIP / SKR CR6 (STM32F103RET6 ARM Cortex-M3)
#
# STM32F103RE_btt ............. RET6
# STM32F103RE_btt_USB ......... RET6 (USB mass storage)
#
[env:STM32F103RE_btt]
platform = ${common_stm32.platform}
extends = common_stm32
build_flags = ${common_stm32.build_flags} -DMCU_STM32F103RE -DHAL_SD_MODULE_ENABLED -DSS_TIMER=4 -DTIMER_SERVO=TIM5 -DENABLE_HWSERIAL3 -DTRANSFER_CLOCK_DIV=8
board = genericSTM32F103RE
monitor_speed = 115200
board_build.core = stm32
board_build.variant = MARLIN_F103Rx
board_build.offset = 0x7000
board_upload.offset_address = 0x08007000
build_unflags = ${common_stm32.build_unflags}
extra_scripts = ${common.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py
debug_tool = jlink
upload_protocol = jlink

[env:STM32F103RE_btt_USB]
extends = env:STM32F103RE_btt
platform = ${common_stm32.platform}
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-3.zip
build_unflags = ${common_stm32.build_unflags} -DUSBD_USE_CDC
build_flags = ${env:STM32F103RE_btt.build_flags} ${env:stm32_flash_drive.build_flags}
-DUSBCON
-DUSE_USB_FS
-DUSBD_IRQ_PRIO=5
-DUSBD_IRQ_SUBPRIO=6
-DUSBD_USE_CDC_MSC

#
# FLSUN QQS Pro (STM32F103VET6)
# board Hispeedv1
Expand All @@ -148,13 +203,11 @@ build_flags = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=
board = genericSTM32F103VE
board_build.core = stm32
board_build.variant = MARLIN_F103Vx
board_build.ldscript = ldscript.ld
board_build.offset = 0x7000
board_build.firmware = Robin_mini.bin
board_build.encrypt = Yes
board_build.encrypt = Robin_mini.bin
board_upload.offset_address = 0x08007000
build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
extra_scripts = ${common.extra_scripts}
extra_scripts = ${common_stm32.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py
buildroot/share/PlatformIO/scripts/mks_encrypt.py
Expand All @@ -169,15 +222,13 @@ build_flags = ${common_stm32.build_flags} -DMCU_STM32F103VE -DSS_TIMER=
board = genericSTM32F103VE
board_build.core = stm32
board_build.variant = MARLIN_F103Vx
board_build.ldscript = ldscript.ld
board_build.offset = 0x7000
board_build.encrypt = Yes
board_build.firmware = Robin_nano35.bin
board_build.encrypt = Robin_nano35.bin
board_upload.offset_address = 0x08007000
build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
debug_tool = jlink
upload_protocol = jlink
extra_scripts = ${common.extra_scripts}
extra_scripts = ${common_stm32.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py
buildroot/share/PlatformIO/scripts/mks_encrypt.py
Expand All @@ -191,10 +242,20 @@ extends = common_stm32
board = genericSTM32F103ZE
board_build.core = stm32
board_build.variant = MARLIN_F103Zx
board_build.ldscript = ldscript.ld
board_build.offset = 0x10000
build_flags = ${common_stm32.build_flags} -DENABLE_HWSERIAL3 -DTIMER_SERIAL=TIM5
build_unflags = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
extra_scripts = ${common.extra_scripts}
extra_scripts = ${common_stm32.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
buildroot/share/PlatformIO/scripts/stm32_bootloader.py

#
# Malyan M200 (STM32F103CB)
#
[env:STM32F103CB_malyan]
platform = ${common_stm32.platform}
extends = common_stm32
board = malyanm200_f103cb
build_flags = ${common_stm32.build_flags}
-DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED
src_filter = ${common.default_src_filter} +<src/HAL/STM32>
Loading

0 comments on commit 483e165

Please sign in to comment.