From e77686cfd970f67737adbbd257321070fea6d307 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 16 May 2023 19:52:36 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Use=20'build=5Fsrc=5Ffilter'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlatformIO/scripts/common-dependencies.py | 415 ++++++++--------- ini/features.ini | 422 +++++++++--------- 2 files changed, 419 insertions(+), 418 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.py b/buildroot/share/PlatformIO/scripts/common-dependencies.py index 226dbe0fab..c9272685e4 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.py +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.py @@ -5,247 +5,248 @@ import pioutil if pioutil.is_pio_build(): - import subprocess,os,re - Import("env") + import subprocess,os,re + Import("env") - from platformio.package.meta import PackageSpec - from platformio.project.config import ProjectConfig + from platformio.package.meta import PackageSpec + from platformio.project.config import ProjectConfig - verbose = 0 - FEATURE_CONFIG = {} + verbose = 0 + FEATURE_CONFIG = {} - def validate_pio(): - PIO_VERSION_MIN = (6, 0, 1) - try: - from platformio import VERSION as PIO_VERSION - weights = (1000, 100, 1) - version_min = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION_MIN)]) - version_cur = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION)]) - if version_cur < version_min: - print() - print("**************************************************") - print("****** An update to PlatformIO is ******") - print("****** required to build Marlin Firmware. ******") - print("****** ******") - print("****** Minimum version: ", PIO_VERSION_MIN, " ******") - print("****** Current Version: ", PIO_VERSION, " ******") - print("****** ******") - print("****** Update PlatformIO and try again. ******") - print("**************************************************") - print() - exit(1) - except SystemExit: - exit(1) - except: - print("Can't detect PlatformIO Version") + def validate_pio(): + PIO_VERSION_MIN = (6, 0, 1) + try: + from platformio import VERSION as PIO_VERSION + weights = (1000, 100, 1) + version_min = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION_MIN)]) + version_cur = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION)]) + if version_cur < version_min: + print() + print("**************************************************") + print("****** An update to PlatformIO is ******") + print("****** required to build Marlin Firmware. ******") + print("****** ******") + print("****** Minimum version: ", PIO_VERSION_MIN, " ******") + print("****** Current Version: ", PIO_VERSION, " ******") + print("****** ******") + print("****** Update PlatformIO and try again. ******") + print("**************************************************") + print() + exit(1) + except SystemExit: + exit(1) + except: + print("Can't detect PlatformIO Version") - def blab(str,level=1): - if verbose >= level: - print("[deps] %s" % str) + def blab(str,level=1): + if verbose >= level: + print("[deps] %s" % str) - def add_to_feat_cnf(feature, flines): + def add_to_feat_cnf(feature, flines): - try: - feat = FEATURE_CONFIG[feature] - except: - FEATURE_CONFIG[feature] = {} + try: + feat = FEATURE_CONFIG[feature] + except: + FEATURE_CONFIG[feature] = {} - # Get a reference to the FEATURE_CONFIG under construction - feat = FEATURE_CONFIG[feature] + # Get a reference to the FEATURE_CONFIG under construction + feat = FEATURE_CONFIG[feature] - # Split up passed lines on commas or newlines and iterate - # Add common options to the features config under construction - # For lib_deps replace a previous instance of the same library - atoms = re.sub(r',\s*', '\n', flines).strip().split('\n') - for line in atoms: - parts = line.split('=') - name = parts.pop(0) - if name in ['build_flags', 'extra_scripts', 'build_src_filter', 'lib_ignore']: - feat[name] = '='.join(parts) - blab("[%s] %s=%s" % (feature, name, feat[name]), 3) - else: - for dep in re.split(r',\s*', line): - lib_name = re.sub(r'@([~^]|[<>]=?)?[\d.]+', '', dep.strip()).split('=').pop(0) - lib_re = re.compile('(?!^' + lib_name + '\\b)') - feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep] - blab("[%s] lib_deps = %s" % (feature, dep), 3) + # Split up passed lines on commas or newlines and iterate + # Add common options to the features config under construction + # For lib_deps replace a previous instance of the same library + atoms = re.sub(r',\s*', '\n', flines).strip().split('\n') + for line in atoms: + parts = line.split('=') + name = parts.pop(0) + if name in ['build_flags', 'extra_scripts', 'build_src_filter', 'lib_ignore']: + feat[name] = '='.join(parts) + blab("[%s] %s=%s" % (feature, name, feat[name]), 3) + else: + for dep in re.split(r',\s*', line): + lib_name = re.sub(r'@([~^]|[<>]=?)?[\d.]+', '', dep.strip()).split('=').pop(0) + lib_re = re.compile('(?!^' + lib_name + '\\b)') + if not 'lib_deps' in feat: feat['lib_deps'] = {} + feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep] + blab("[%s] lib_deps = %s" % (feature, dep), 3) - def load_features(): - blab("========== Gather [features] entries...") - for key in ProjectConfig().items('features'): - feature = key[0].upper() - if not feature in FEATURE_CONFIG: - FEATURE_CONFIG[feature] = { 'lib_deps': [] } - add_to_feat_cnf(feature, key[1]) + def load_features(): + blab("========== Gather [features] entries...") + for key in ProjectConfig().items('features'): + feature = key[0].upper() + if not feature in FEATURE_CONFIG: + FEATURE_CONFIG[feature] = { 'lib_deps': [] } + add_to_feat_cnf(feature, key[1]) - # Add options matching custom_marlin.MY_OPTION to the pile - blab("========== Gather custom_marlin entries...") - for n in env.GetProjectOptions(): - key = n[0] - mat = re.match(r'custom_marlin\.(.+)', key) - if mat: - try: - val = env.GetProjectOption(key) - except: - val = None - if val: - opt = mat[1].upper() - blab("%s.custom_marlin.%s = '%s'" % ( env['PIOENV'], opt, val )) - add_to_feat_cnf(opt, val) + # Add options matching custom_marlin.MY_OPTION to the pile + blab("========== Gather custom_marlin entries...") + for n in env.GetProjectOptions(): + key = n[0] + mat = re.match(r'custom_marlin\.(.+)', key) + if mat: + try: + val = env.GetProjectOption(key) + except: + val = None + if val: + opt = mat[1].upper() + blab("%s.custom_marlin.%s = '%s'" % ( env['PIOENV'], opt, val )) + add_to_feat_cnf(opt, val) - def get_all_known_libs(): - known_libs = [] - for feature in FEATURE_CONFIG: - feat = FEATURE_CONFIG[feature] - if not 'lib_deps' in feat: - continue - for dep in feat['lib_deps']: - known_libs.append(PackageSpec(dep).name) - return known_libs + def get_all_known_libs(): + known_libs = [] + for feature in FEATURE_CONFIG: + feat = FEATURE_CONFIG[feature] + if not 'lib_deps' in feat: + continue + for dep in feat['lib_deps']: + known_libs.append(PackageSpec(dep).name) + return known_libs - def get_all_env_libs(): - env_libs = [] - lib_deps = env.GetProjectOption('lib_deps') - for dep in lib_deps: - env_libs.append(PackageSpec(dep).name) - return env_libs + def get_all_env_libs(): + env_libs = [] + lib_deps = env.GetProjectOption('lib_deps') + for dep in lib_deps: + env_libs.append(PackageSpec(dep).name) + return env_libs - def set_env_field(field, value): - proj = env.GetProjectConfig() - proj.set("env:" + env['PIOENV'], field, value) + def set_env_field(field, value): + proj = env.GetProjectConfig() + proj.set("env:" + env['PIOENV'], field, value) - # All unused libs should be ignored so that if a library - # exists in .pio/lib_deps it will not break compilation. - def force_ignore_unused_libs(): - env_libs = get_all_env_libs() - known_libs = get_all_known_libs() - diff = (list(set(known_libs) - set(env_libs))) - lib_ignore = env.GetProjectOption('lib_ignore') + diff - blab("Ignore libraries: %s" % lib_ignore) - set_env_field('lib_ignore', lib_ignore) + # All unused libs should be ignored so that if a library + # exists in .pio/lib_deps it will not break compilation. + def force_ignore_unused_libs(): + env_libs = get_all_env_libs() + known_libs = get_all_known_libs() + diff = (list(set(known_libs) - set(env_libs))) + lib_ignore = env.GetProjectOption('lib_ignore') + diff + blab("Ignore libraries: %s" % lib_ignore) + set_env_field('lib_ignore', lib_ignore) - def apply_features_config(): - load_features() - blab("========== Apply enabled features...") - for feature in FEATURE_CONFIG: - if not env.MarlinHas(feature): - continue + def apply_features_config(): + load_features() + blab("========== Apply enabled features...") + for feature in FEATURE_CONFIG: + if not env.MarlinHas(feature): + continue - feat = FEATURE_CONFIG[feature] + feat = FEATURE_CONFIG[feature] - if 'lib_deps' in feat and len(feat['lib_deps']): - blab("========== Adding lib_deps for %s... " % feature, 2) + if 'lib_deps' in feat and len(feat['lib_deps']): + blab("========== Adding lib_deps for %s... " % feature, 2) - # feat to add - deps_to_add = {} - for dep in feat['lib_deps']: - deps_to_add[PackageSpec(dep).name] = dep - blab("==================== %s... " % dep, 2) + # feat to add + deps_to_add = {} + for dep in feat['lib_deps']: + deps_to_add[PackageSpec(dep).name] = dep + blab("==================== %s... " % dep, 2) - # Does the env already have the dependency? - deps = env.GetProjectOption('lib_deps') - for dep in deps: - name = PackageSpec(dep).name - if name in deps_to_add: - del deps_to_add[name] + # Does the env already have the dependency? + deps = env.GetProjectOption('lib_deps') + for dep in deps: + name = PackageSpec(dep).name + if name in deps_to_add: + del deps_to_add[name] - # Are there any libraries that should be ignored? - lib_ignore = env.GetProjectOption('lib_ignore') - for dep in deps: - name = PackageSpec(dep).name - if name in deps_to_add: - del deps_to_add[name] + # Are there any libraries that should be ignored? + lib_ignore = env.GetProjectOption('lib_ignore') + for dep in deps: + name = PackageSpec(dep).name + if name in deps_to_add: + del deps_to_add[name] - # Is there anything left? - if len(deps_to_add) > 0: - # Only add the missing dependencies - set_env_field('lib_deps', deps + list(deps_to_add.values())) + # Is there anything left? + if len(deps_to_add) > 0: + # Only add the missing dependencies + set_env_field('lib_deps', deps + list(deps_to_add.values())) - if 'build_flags' in feat: - f = feat['build_flags'] - blab("========== Adding build_flags for %s: %s" % (feature, f), 2) - new_flags = env.GetProjectOption('build_flags') + [ f ] - env.Replace(BUILD_FLAGS=new_flags) + if 'build_flags' in feat: + f = feat['build_flags'] + blab("========== Adding build_flags for %s: %s" % (feature, f), 2) + new_flags = env.GetProjectOption('build_flags') + [ f ] + env.Replace(BUILD_FLAGS=new_flags) - if 'extra_scripts' in feat: - blab("Running extra_scripts for %s... " % feature, 2) - env.SConscript(feat['extra_scripts'], exports="env") + if 'extra_scripts' in feat: + blab("Running extra_scripts for %s... " % feature, 2) + env.SConscript(feat['extra_scripts'], exports="env") - if 'build_src_filter' in feat: - blab("========== Adding build_src_filter for %s... " % feature, 2) - build_src_filter = ' '.join(env.GetProjectOption('build_src_filter')) - # first we need to remove the references to the same folder - my_srcs = re.findall(r'[+-](<.*?>)', feat['build_src_filter']) - cur_srcs = re.findall(r'[+-](<.*?>)', build_src_filter) - for d in my_srcs: - if d in cur_srcs: - build_src_filter = re.sub(r'[+-]' + d, '', build_src_filter) + if 'build_src_filter' in feat: + blab("========== Adding build_src_filter for %s... " % feature, 2) + build_src_filter = ' '.join(env.GetProjectOption('build_src_filter')) + # first we need to remove the references to the same folder + my_srcs = re.findall(r'[+-](<.*?>)', feat['build_src_filter']) + cur_srcs = re.findall(r'[+-](<.*?>)', build_src_filter) + for d in my_srcs: + if d in cur_srcs: + build_src_filter = re.sub(r'[+-]' + d, '', build_src_filter) - build_src_filter = feat['build_src_filter'] + ' ' + build_src_filter - set_env_field('build_src_filter', [build_src_filter]) - env.Replace(SRC_FILTER=build_src_filter) + build_src_filter = feat['build_src_filter'] + ' ' + build_src_filter + set_env_field('build_src_filter', [build_src_filter]) + env.Replace(SRC_FILTER=build_src_filter) - if 'lib_ignore' in feat: - blab("========== Adding lib_ignore for %s... " % feature, 2) - lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] - set_env_field('lib_ignore', lib_ignore) + if 'lib_ignore' in feat: + blab("========== Adding lib_ignore for %s... " % feature, 2) + lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] + set_env_field('lib_ignore', lib_ignore) - # - # Use the compiler to get a list of all enabled features - # - def load_marlin_features(): - if 'MARLIN_FEATURES' in env: - return + # + # Use the compiler to get a list of all enabled features + # + def load_marlin_features(): + if 'MARLIN_FEATURES' in env: + return - # Process defines - from preprocessor import run_preprocessor - define_list = run_preprocessor(env) - marlin_features = {} - for define in define_list: - feature = define[8:].strip().decode().split(' ') - feature, definition = feature[0], ' '.join(feature[1:]) - marlin_features[feature] = definition - env['MARLIN_FEATURES'] = marlin_features + # Process defines + from preprocessor import run_preprocessor + define_list = run_preprocessor(env) + marlin_features = {} + for define in define_list: + feature = define[8:].strip().decode().split(' ') + feature, definition = feature[0], ' '.join(feature[1:]) + marlin_features[feature] = definition + env['MARLIN_FEATURES'] = marlin_features - # - # Return True if a matching feature is enabled - # - def MarlinHas(env, feature): - load_marlin_features() - r = re.compile('^' + feature + '$') - found = list(filter(r.match, env['MARLIN_FEATURES'])) + # + # Return True if a matching feature is enabled + # + def MarlinHas(env, feature): + load_marlin_features() + r = re.compile('^' + feature + '$') + found = list(filter(r.match, env['MARLIN_FEATURES'])) - # Defines could still be 'false' or '0', so check - some_on = False - if len(found): - for f in found: - val = env['MARLIN_FEATURES'][f] - if val in [ '', '1', 'true' ]: - some_on = True - elif val in env['MARLIN_FEATURES']: - some_on = env.MarlinHas(val) + # Defines could still be 'false' or '0', so check + some_on = False + if len(found): + for f in found: + val = env['MARLIN_FEATURES'][f] + if val in [ '', '1', 'true' ]: + some_on = True + elif val in env['MARLIN_FEATURES']: + some_on = env.MarlinHas(val) - return some_on + return some_on - validate_pio() + validate_pio() - try: - verbose = int(env.GetProjectOption('custom_verbose')) - except: - pass + try: + verbose = int(env.GetProjectOption('custom_verbose')) + except: + pass - # - # Add a method for other PIO scripts to query enabled features - # - env.AddMethod(MarlinHas) + # + # Add a method for other PIO scripts to query enabled features + # + env.AddMethod(MarlinHas) - # - # Add dependencies for enabled Marlin features - # - apply_features_config() - force_ignore_unused_libs() + # + # Add dependencies for enabled Marlin features + # + apply_features_config() + force_ignore_unused_libs() - #print(env.Dump()) + #print(env.Dump()) - from signature import compute_build_signature - compute_build_signature(env) + from signature import compute_build_signature + compute_build_signature(env) diff --git a/ini/features.ini b/ini/features.ini index e376e2757e..ba7f24356d 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -12,232 +12,232 @@ [features] YHCB2004 = red-scorp/LiquidCrystal_AIP31068@^1.0.4, red-scorp/SoftSPIB@^1.1.1 HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/LVGL-6.1.1-MKS/archive/master.zip - src_filter=+ + build_src_filter=+ extra_scripts=download_mks_assets.py -MARLIN_TEST_BUILD = src_filter=+ -POSTMORTEM_DEBUGGING = src_filter=+ + +MARLIN_TEST_BUILD = build_src_filter=+ +POSTMORTEM_DEBUGGING = build_src_filter=+ + build_flags=-funwind-tables MKS_WIFI_MODULE = QRCode=https://github.com/makerbase-mks/QRCode/archive/master.zip HAS_TRINAMIC_CONFIG = TMCStepper@~0.7.3 - src_filter=+ + + + + -HAS_T(RINAMIC_CONFIG|MC_SPI) = src_filter=+ -HAS_STEALTHCHOP = src_filter=+ + build_src_filter=+ + + + + +HAS_T(RINAMIC_CONFIG|MC_SPI) = build_src_filter=+ +HAS_STEALTHCHOP = build_src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster - src_filter=+ + build_src_filter=+ HAS_TMC26X = TMC26XStepper=https://github.com/MarlinFirmware/TMC26XStepper/archive/master.zip - src_filter=+ -LIB_INTERNAL_MAX31865 = src_filter=+ + build_src_filter=+ +LIB_INTERNAL_MAX31865 = build_src_filter=+ NEOPIXEL_LED = adafruit/Adafruit NeoPixel@~1.8.0 - src_filter=+ + build_src_filter=+ I2C_AMMETER = peterus/INA226Lib@1.1.2 - src_filter=+ + build_src_filter=+ USES_LIQUIDCRYSTAL = LiquidCrystal=https://github.com/MarlinFirmware/New-LiquidCrystal/archive/1.5.1.zip USES_LIQUIDCRYSTAL_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4 USES_LIQUIDTWI2 = LiquidTWI2@1.2.7 -HAS_LCDPRINT = src_filter=+ -HAS_MARLINUI_HD44780 = src_filter=+ +HAS_LCDPRINT = build_src_filter=+ +HAS_MARLINUI_HD44780 = build_src_filter=+ HAS_MARLINUI_U8GLIB = marlinfirmware/U8glib-HAL@~0.5.2 - src_filter=+ -HAS_(FSMC|SPI|LTDC)_TFT = src_filter=+ + + -HAS_FSMC_TFT = src_filter=+ + -HAS_SPI_TFT = src_filter=+ + -I2C_EEPROM = src_filter=+ + build_src_filter=+ +HAS_(FSMC|SPI|LTDC)_TFT = build_src_filter=+ + + +HAS_FSMC_TFT = build_src_filter=+ + +HAS_SPI_TFT = build_src_filter=+ + +I2C_EEPROM = build_src_filter=+ SOFT_I2C_EEPROM = SlowSoftI2CMaster, SlowSoftWire=https://github.com/felias-fogg/SlowSoftWire/archive/master.zip -SPI_EEPROM = src_filter=+ -HAS_DWIN_E3V2|IS_DWIN_MARLINUI = src_filter=+ -DWIN_CREALITY_LCD = src_filter=+ -DWIN_LCD_PROUI = src_filter=+ -DWIN_CREALITY_LCD_JYERSUI = src_filter=+ -IS_DWIN_MARLINUI = src_filter=+ -HAS_GRAPHICAL_TFT = src_filter=+ -IS_TFTGLCD_PANEL = src_filter=+ -HAS_TOUCH_BUTTONS = src_filter=+ -HAS_MARLINUI_MENU = src_filter=+ -HAS_GAMES = src_filter=+ -MARLIN_BRICKOUT = src_filter=+ -MARLIN_INVADERS = src_filter=+ -MARLIN_MAZE = src_filter=+ -MARLIN_SNAKE = src_filter=+ -HAS_MENU_BACKLASH = src_filter=+ -HAS_MENU_BED_CORNERS = src_filter=+ -LCD_BED_LEVELING = src_filter=+ -HAS_MENU_CANCELOBJECT = src_filter=+ -HAS_MENU_DELTA_CALIBRATE = src_filter=+ -HAS_MENU_FILAMENT = src_filter=+ -LCD_INFO_MENU = src_filter=+ -HAS_MENU_JOB_RECOVERY = src_filter=+ -HAS_MULTI_LANGUAGE = src_filter=+ + -HAS_MENU_LED = src_filter=+ -HAS_MENU_MEDIA = src_filter=+ -HAS_MENU_MIXER = src_filter=+ -HAS_MENU_MMU2 = src_filter=+ -HAS_MENU_PASSWORD = src_filter=+ -HAS_MENU_POWER_MONITOR = src_filter=+ -HAS_MENU_CUTTER = src_filter=+ -HAS_MENU_TEMPERATURE = src_filter=+ -HAS_MENU_TMC = src_filter=+ -HAS_MENU_TOUCH_SCREEN = src_filter=+ -HAS_MENU_TRAMMING = src_filter=+ -HAS_MENU_UBL = src_filter=+ -ANYCUBIC_LCD_CHIRON = src_filter=+ -ANYCUBIC_LCD_I3MEGA = src_filter=+ -HAS_DGUS_LCD_CLASSIC = src_filter=+ -DGUS_LCD_UI_RELOADED = src_filter=+ -DGUS_LCD_UI_FYSETC = src_filter=+ -DGUS_LCD_UI_HIPRECY = src_filter=+ -DGUS_LCD_UI_MKS = src_filter=+ -DGUS_LCD_UI_ORIGIN = src_filter=+ -EXTUI_EXAMPLE = src_filter=+ -TOUCH_UI_FTDI_EVE = src_filter=+ -MALYAN_LCD = src_filter=+ -NEXTION_TFT = src_filter=+ -USE_UHS2_USB = src_filter=+ -USE_UHS3_USB = src_filter=+ -USB_FLASH_DRIVE_SUPPORT = src_filter=+ -HAS_MCP3426_ADC = src_filter=+ + -AUTO_BED_LEVELING_BILINEAR = src_filter=+ -AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ -X_AXIS_TWIST_COMPENSATION = src_filter=+ + + +SPI_EEPROM = build_src_filter=+ +HAS_DWIN_E3V2|IS_DWIN_MARLINUI = build_src_filter=+ +DWIN_CREALITY_LCD = build_src_filter=+ +DWIN_LCD_PROUI = build_src_filter=+ +DWIN_CREALITY_LCD_JYERSUI = build_src_filter=+ +IS_DWIN_MARLINUI = build_src_filter=+ +HAS_GRAPHICAL_TFT = build_src_filter=+ +IS_TFTGLCD_PANEL = build_src_filter=+ +HAS_TOUCH_BUTTONS = build_src_filter=+ +HAS_MARLINUI_MENU = build_src_filter=+ +HAS_GAMES = build_src_filter=+ +MARLIN_BRICKOUT = build_src_filter=+ +MARLIN_INVADERS = build_src_filter=+ +MARLIN_MAZE = build_src_filter=+ +MARLIN_SNAKE = build_src_filter=+ +HAS_MENU_BACKLASH = build_src_filter=+ +HAS_MENU_BED_CORNERS = build_src_filter=+ +LCD_BED_LEVELING = build_src_filter=+ +HAS_MENU_CANCELOBJECT = build_src_filter=+ +HAS_MENU_DELTA_CALIBRATE = build_src_filter=+ +HAS_MENU_FILAMENT = build_src_filter=+ +LCD_INFO_MENU = build_src_filter=+ +HAS_MENU_JOB_RECOVERY = build_src_filter=+ +HAS_MULTI_LANGUAGE = build_src_filter=+ + +HAS_MENU_LED = build_src_filter=+ +HAS_MENU_MEDIA = build_src_filter=+ +HAS_MENU_MIXER = build_src_filter=+ +HAS_MENU_MMU2 = build_src_filter=+ +HAS_MENU_PASSWORD = build_src_filter=+ +HAS_MENU_POWER_MONITOR = build_src_filter=+ +HAS_MENU_CUTTER = build_src_filter=+ +HAS_MENU_TEMPERATURE = build_src_filter=+ +HAS_MENU_TMC = build_src_filter=+ +HAS_MENU_TOUCH_SCREEN = build_src_filter=+ +HAS_MENU_TRAMMING = build_src_filter=+ +HAS_MENU_UBL = build_src_filter=+ +ANYCUBIC_LCD_CHIRON = build_src_filter=+ +ANYCUBIC_LCD_I3MEGA = build_src_filter=+ +HAS_DGUS_LCD_CLASSIC = build_src_filter=+ +DGUS_LCD_UI_RELOADED = build_src_filter=+ +DGUS_LCD_UI_FYSETC = build_src_filter=+ +DGUS_LCD_UI_HIPRECY = build_src_filter=+ +DGUS_LCD_UI_MKS = build_src_filter=+ +DGUS_LCD_UI_ORIGIN = build_src_filter=+ +EXTUI_EXAMPLE = build_src_filter=+ +TOUCH_UI_FTDI_EVE = build_src_filter=+ +MALYAN_LCD = build_src_filter=+ +NEXTION_TFT = build_src_filter=+ +USE_UHS2_USB = build_src_filter=+ +USE_UHS3_USB = build_src_filter=+ +USB_FLASH_DRIVE_SUPPORT = build_src_filter=+ +HAS_MCP3426_ADC = build_src_filter=+ + +AUTO_BED_LEVELING_BILINEAR = build_src_filter=+ +AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = build_src_filter=+ +X_AXIS_TWIST_COMPENSATION = build_src_filter=+ + + BD_SENSOR = markyue/Panda_SoftMasterI2C - src_filter=+ + -MESH_BED_LEVELING = src_filter=+ + -AUTO_BED_LEVELING_UBL = src_filter=+ + -UBL_HILBERT_CURVE = src_filter=+ -BACKLASH_COMPENSATION = src_filter=+ -BARICUDA = src_filter=+ + -BINARY_FILE_TRANSFER = src_filter=+ + -BLTOUCH = src_filter=+ -CANCEL_OBJECTS = src_filter=+ + -CASE_LIGHT_ENABLE = src_filter=+ + -EXTERNAL_CLOSED_LOOP_CONTROLLER = src_filter=+ + -USE_CONTROLLER_FAN = src_filter=+ -HAS_COOLER|LASER_COOLANT_FLOW_METER = src_filter=+ -HAS_MOTOR_CURRENT_DAC = src_filter=+ -DIRECT_STEPPING = src_filter=+ + -EMERGENCY_PARSER = src_filter=+ - -EASYTHREED_UI = src_filter=+ -I2C_POSITION_ENCODERS = src_filter=+ -IIC_BL24CXX_EEPROM = src_filter=+ -SPI_FLASH = src_filter=+ -HAS_ETHERNET = src_filter=+ + -HAS_FANCHECK = src_filter=+ + -HAS_FANMUX = src_filter=+ -FILAMENT_WIDTH_SENSOR = src_filter=+ + -FWRETRACT = src_filter=+ + -HOST_ACTION_COMMANDS = src_filter=+ -HOTEND_IDLE_TIMEOUT = src_filter=+ -JOYSTICK = src_filter=+ -BLINKM = src_filter=+ -HAS_COLOR_LEDS = src_filter=+ + -PCA9533 = src_filter=+ -PCA9632 = src_filter=+ -PRINTER_EVENT_LEDS = src_filter=+ -TEMP_STAT_LEDS = src_filter=+ -MAX7219_DEBUG = src_filter=+ + -HAS_MEATPACK = src_filter=+ -MIXING_EXTRUDER = src_filter=+ + -HAS_PRUSA_MMU1 = src_filter=+ -HAS_PRUSA_MMU2 = src_filter=+ + -PASSWORD_FEATURE = src_filter=+ + -ADVANCED_PAUSE_FEATURE = src_filter=+ + + -PSU_CONTROL = src_filter=+ -HAS_POWER_MONITOR = src_filter=+ + -POWER_LOSS_RECOVERY = src_filter=+ + -HAS_PTC = src_filter=+ + -HAS_FILAMENT_SENSOR = src_filter=+ + -(EXT|MANUAL)_SOLENOID.* = src_filter=+ + -MK2_MULTIPLEXER = src_filter=+ -HAS_CUTTER = src_filter=+ + -HAS_DRIVER_SAFE_POWER_PROTECT = src_filter=+ -EXPERIMENTAL_I2CBUS = src_filter=+ + -G26_MESH_VALIDATION = src_filter=+ -ASSISTED_TRAMMING = src_filter=+ + -HAS_MESH = src_filter=+ -HAS_LEVELING = src_filter=+ + -MECHANICAL_GANTRY_CAL.+ = src_filter=+ -Z_MULTI_ENDSTOPS|Z_STEPPER_AUTO_ALIGN = src_filter=+ -Z_STEPPER_AUTO_ALIGN = src_filter=+ -DELTA_AUTO_CALIBRATION = src_filter=+ -CALIBRATION_GCODE = src_filter=+ -Z_MIN_PROBE_REPEATABILITY_TEST = src_filter=+ -M100_FREE_MEMORY_WATCHER = src_filter=+ -BACKLASH_GCODE = src_filter=+ -IS_KINEMATIC = src_filter=+ -HAS_EXTRA_ENDSTOPS = src_filter=+ -SKEW_CORRECTION_GCODE = src_filter=+ -DIRECT_PIN_CONTROL = src_filter=+ + -PINS_DEBUGGING = src_filter=+ -NO_VOLUMETRICS = src_filter=- -HAS_MULTI_EXTRUDER = src_filter=+ -HAS_HOTEND_OFFSET = src_filter=+ -EDITABLE_SERVO_ANGLES = src_filter=+ -PIDTEMP = src_filter=+ -PREVENT_COLD_EXTRUSION = src_filter=+ -PIDTEMPBED = src_filter=+ -HAS_USER_THERMISTORS = src_filter=+ -SD_ABORT_ON_ENDSTOP_HIT = src_filter=+ -BAUD_RATE_GCODE = src_filter=+ -HAS_SMART_EFF_MOD = src_filter=+ -COOLANT_CONTROL|AIR_ASSIST = src_filter=+ -AIR_EVACUATION = src_filter=+ -HAS_SOFTWARE_ENDSTOPS = src_filter=+ -SERVO_DETACH_GCODE = src_filter=+ -HAS_DUPLICATION_MODE = src_filter=+ -LIN_ADVANCE = src_filter=+ -PHOTO_GCODE = src_filter=+ -CONTROLLER_FAN_EDITABLE = src_filter=+ -HAS_SHAPING = src_filter=+ -GCODE_MACROS = src_filter=+ -GRADIENT_MIX = src_filter=+ -HAS_SAVED_POSITIONS = src_filter=+ + -PARK_HEAD_ON_PAUSE = src_filter=+ -FILAMENT_LOAD_UNLOAD_GCODES = src_filter=+ -CNC_WORKSPACE_PLANES = src_filter=+ -CNC_COORDINATE_SYSTEMS = src_filter=+ -HAS_M206_COMMAND = src_filter=+ -EXPECTED_PRINTER_CHECK = src_filter=+ -HOST_KEEPALIVE_FEATURE = src_filter=+ -AUTO_REPORT_POSITION = src_filter=+ -REPETIER_GCODE_M360 = src_filter=+ -HAS_GCODE_M876 = src_filter=+ -HAS_RESUME_CONTINUE = src_filter=+ -SET_PROGRESS_MANUALLY = src_filter=+ -HAS_STATUS_MESSAGE = src_filter=+ -HAS_LCD_CONTRAST = src_filter=+ -HAS_GCODE_M255 = src_filter=+ -HAS_LCD_BRIGHTNESS = src_filter=+ -HAS_SOUND = src_filter=+ -TOUCH_SCREEN_CALIBRATION = src_filter=+ -ARC_SUPPORT = src_filter=+ -GCODE_MOTION_MODES = src_filter=+ -BABYSTEPPING = src_filter=+ + -Z_PROBE_SLED = src_filter=+ -G38_PROBE_TARGET = src_filter=+ -MAGNETIC_PARKING_EXTRUDER = src_filter=+ -SDSUPPORT = src_filter=+ + + + + + + -HAS_MEDIA_SUBCALLS = src_filter=+ -GCODE_REPEAT_MARKERS = src_filter=+ + -HAS_EXTRUDERS = src_filter=+ + + -HAS_TEMP_PROBE = src_filter=+ -HAS_COOLER = src_filter=+ -AUTO_REPORT_TEMPERATURES = src_filter=+ -MPCTEMP = src_filter=+ -INCH_MODE_SUPPORT = src_filter=+ -TEMPERATURE_UNITS_SUPPORT = src_filter=+ -NEED_HEX_PRINT = src_filter=+ -NEED_LSF = src_filter=+ -NOZZLE_PARK_FEATURE = src_filter=+ + -NOZZLE_CLEAN_FEATURE = src_filter=+ + -DELTA = src_filter=+ + -POLARGRAPH = src_filter=+ -BEZIER_CURVE_SUPPORT = src_filter=+ + -PRINTCOUNTER = src_filter=+ -HAS_BED_PROBE = src_filter=+ + + + -IS_SCARA = src_filter=+ -HAS_SERVOS = src_filter=+ + -MORGAN_SCARA = src_filter=+ -HAS_MICROSTEPS = src_filter=+ + build_src_filter=+ + +MESH_BED_LEVELING = build_src_filter=+ + +AUTO_BED_LEVELING_UBL = build_src_filter=+ + +UBL_HILBERT_CURVE = build_src_filter=+ +BACKLASH_COMPENSATION = build_src_filter=+ +BARICUDA = build_src_filter=+ + +BINARY_FILE_TRANSFER = build_src_filter=+ + +BLTOUCH = build_src_filter=+ +CANCEL_OBJECTS = build_src_filter=+ + +CASE_LIGHT_ENABLE = build_src_filter=+ + +EXTERNAL_CLOSED_LOOP_CONTROLLER = build_src_filter=+ + +USE_CONTROLLER_FAN = build_src_filter=+ +HAS_COOLER|LASER_COOLANT_FLOW_METER = build_src_filter=+ +HAS_MOTOR_CURRENT_DAC = build_src_filter=+ +DIRECT_STEPPING = build_src_filter=+ + +EMERGENCY_PARSER = build_src_filter=+ - +EASYTHREED_UI = build_src_filter=+ +I2C_POSITION_ENCODERS = build_src_filter=+ +IIC_BL24CXX_EEPROM = build_src_filter=+ +SPI_FLASH = build_src_filter=+ +HAS_ETHERNET = build_src_filter=+ + +HAS_FANCHECK = build_src_filter=+ + +HAS_FANMUX = build_src_filter=+ +FILAMENT_WIDTH_SENSOR = build_src_filter=+ + +FWRETRACT = build_src_filter=+ + +HOST_ACTION_COMMANDS = build_src_filter=+ +HOTEND_IDLE_TIMEOUT = build_src_filter=+ +JOYSTICK = build_src_filter=+ +BLINKM = build_src_filter=+ +HAS_COLOR_LEDS = build_src_filter=+ + +PCA9533 = build_src_filter=+ +PCA9632 = build_src_filter=+ +PRINTER_EVENT_LEDS = build_src_filter=+ +TEMP_STAT_LEDS = build_src_filter=+ +MAX7219_DEBUG = build_src_filter=+ + +HAS_MEATPACK = build_src_filter=+ +MIXING_EXTRUDER = build_src_filter=+ + +HAS_PRUSA_MMU1 = build_src_filter=+ +HAS_PRUSA_MMU2 = build_src_filter=+ + +PASSWORD_FEATURE = build_src_filter=+ + +ADVANCED_PAUSE_FEATURE = build_src_filter=+ + + +PSU_CONTROL = build_src_filter=+ +HAS_POWER_MONITOR = build_src_filter=+ + +POWER_LOSS_RECOVERY = build_src_filter=+ + +HAS_PTC = build_src_filter=+ + +HAS_FILAMENT_SENSOR = build_src_filter=+ + +(EXT|MANUAL)_SOLENOID.* = build_src_filter=+ + +MK2_MULTIPLEXER = build_src_filter=+ +HAS_CUTTER = build_src_filter=+ + +HAS_DRIVER_SAFE_POWER_PROTECT = build_src_filter=+ +EXPERIMENTAL_I2CBUS = build_src_filter=+ + +G26_MESH_VALIDATION = build_src_filter=+ +ASSISTED_TRAMMING = build_src_filter=+ + +HAS_MESH = build_src_filter=+ +HAS_LEVELING = build_src_filter=+ + +MECHANICAL_GANTRY_CAL.+ = build_src_filter=+ +Z_MULTI_ENDSTOPS|Z_STEPPER_AUTO_ALIGN = build_src_filter=+ +Z_STEPPER_AUTO_ALIGN = build_src_filter=+ +DELTA_AUTO_CALIBRATION = build_src_filter=+ +CALIBRATION_GCODE = build_src_filter=+ +Z_MIN_PROBE_REPEATABILITY_TEST = build_src_filter=+ +M100_FREE_MEMORY_WATCHER = build_src_filter=+ +BACKLASH_GCODE = build_src_filter=+ +IS_KINEMATIC = build_src_filter=+ +HAS_EXTRA_ENDSTOPS = build_src_filter=+ +SKEW_CORRECTION_GCODE = build_src_filter=+ +DIRECT_PIN_CONTROL = build_src_filter=+ + +PINS_DEBUGGING = build_src_filter=+ +NO_VOLUMETRICS = build_src_filter=- +HAS_MULTI_EXTRUDER = build_src_filter=+ +HAS_HOTEND_OFFSET = build_src_filter=+ +EDITABLE_SERVO_ANGLES = build_src_filter=+ +PIDTEMP = build_src_filter=+ +PREVENT_COLD_EXTRUSION = build_src_filter=+ +PIDTEMPBED = build_src_filter=+ +HAS_USER_THERMISTORS = build_src_filter=+ +SD_ABORT_ON_ENDSTOP_HIT = build_src_filter=+ +BAUD_RATE_GCODE = build_src_filter=+ +HAS_SMART_EFF_MOD = build_src_filter=+ +COOLANT_CONTROL|AIR_ASSIST = build_src_filter=+ +AIR_EVACUATION = build_src_filter=+ +HAS_SOFTWARE_ENDSTOPS = build_src_filter=+ +SERVO_DETACH_GCODE = build_src_filter=+ +HAS_DUPLICATION_MODE = build_src_filter=+ +LIN_ADVANCE = build_src_filter=+ +PHOTO_GCODE = build_src_filter=+ +CONTROLLER_FAN_EDITABLE = build_src_filter=+ +HAS_SHAPING = build_src_filter=+ +GCODE_MACROS = build_src_filter=+ +GRADIENT_MIX = build_src_filter=+ +HAS_SAVED_POSITIONS = build_src_filter=+ + +PARK_HEAD_ON_PAUSE = build_src_filter=+ +FILAMENT_LOAD_UNLOAD_GCODES = build_src_filter=+ +CNC_WORKSPACE_PLANES = build_src_filter=+ +CNC_COORDINATE_SYSTEMS = build_src_filter=+ +HAS_M206_COMMAND = build_src_filter=+ +EXPECTED_PRINTER_CHECK = build_src_filter=+ +HOST_KEEPALIVE_FEATURE = build_src_filter=+ +AUTO_REPORT_POSITION = build_src_filter=+ +REPETIER_GCODE_M360 = build_src_filter=+ +HAS_GCODE_M876 = build_src_filter=+ +HAS_RESUME_CONTINUE = build_src_filter=+ +SET_PROGRESS_MANUALLY = build_src_filter=+ +HAS_STATUS_MESSAGE = build_src_filter=+ +HAS_LCD_CONTRAST = build_src_filter=+ +HAS_GCODE_M255 = build_src_filter=+ +HAS_LCD_BRIGHTNESS = build_src_filter=+ +HAS_SOUND = build_src_filter=+ +TOUCH_SCREEN_CALIBRATION = build_src_filter=+ +ARC_SUPPORT = build_src_filter=+ +GCODE_MOTION_MODES = build_src_filter=+ +BABYSTEPPING = build_src_filter=+ + +Z_PROBE_SLED = build_src_filter=+ +G38_PROBE_TARGET = build_src_filter=+ +MAGNETIC_PARKING_EXTRUDER = build_src_filter=+ +SDSUPPORT = build_src_filter=+ + + + + + + +HAS_MEDIA_SUBCALLS = build_src_filter=+ +GCODE_REPEAT_MARKERS = build_src_filter=+ + +HAS_EXTRUDERS = build_src_filter=+ + + +HAS_TEMP_PROBE = build_src_filter=+ +HAS_COOLER = build_src_filter=+ +AUTO_REPORT_TEMPERATURES = build_src_filter=+ +MPCTEMP = build_src_filter=+ +INCH_MODE_SUPPORT = build_src_filter=+ +TEMPERATURE_UNITS_SUPPORT = build_src_filter=+ +NEED_HEX_PRINT = build_src_filter=+ +NEED_LSF = build_src_filter=+ +NOZZLE_PARK_FEATURE = build_src_filter=+ + +NOZZLE_CLEAN_FEATURE = build_src_filter=+ + +DELTA = build_src_filter=+ + +POLARGRAPH = build_src_filter=+ +BEZIER_CURVE_SUPPORT = build_src_filter=+ + +PRINTCOUNTER = build_src_filter=+ +HAS_BED_PROBE = build_src_filter=+ + + + +IS_SCARA = build_src_filter=+ +HAS_SERVOS = build_src_filter=+ + +MORGAN_SCARA = build_src_filter=+ +HAS_MICROSTEPS = build_src_filter=+ (ESP3D_)?WIFISUPPORT = AsyncTCP, ESP Async WebServer ESP3DLib=https://github.com/luc-github/ESP3DLib/archive/master.zip arduinoWebSockets=links2004/WebSockets@2.3.4