import xmltodict import yaml import re import json import os import re import toml from collections import OrderedDict from glob import glob try: from yaml import CSafeLoader as SafeLoader except ImportError: from yaml import SafeLoader abspath = os.path.abspath(__file__) dname = os.path.dirname(abspath) os.chdir(dname) # ======= load chip list features = {} for f in sorted(glob('../stm32-data/data/chips/*.yaml')): # Use the filename to get the chip name. Ultra fast, we don't have to read YAML! name = os.path.splitext(os.path.basename(f))[0].lower() with open(f, 'r') as f: chip = yaml.load(f, Loader=SafeLoader) if len(chip['cores']) > 1: for core in chip['cores']: features[name + "_" + core['name']] = [] else: features[name] = [] # ========= Update Cargo features SEPARATOR_START = '# BEGIN GENERATED FEATURES\n' SEPARATOR_END = '# END GENERATED FEATURES\n' HELP = '# Generated by gen_features.py. DO NOT EDIT.\n' with open('Cargo.toml', 'r') as f: cargo = f.read() before, cargo = cargo.split(SEPARATOR_START, maxsplit=1) _, after = cargo.split(SEPARATOR_END, maxsplit=1) cargo = before + SEPARATOR_START + HELP + \ toml.dumps(features) + SEPARATOR_END + after with open('Cargo.toml', 'w') as f: f.write(cargo)