You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
52 lines
1.6 KiB
10 months ago
|
#!/usr/bin/env python3
|
||
|
"""
|
||
|
Runs the linker script generator portion against a csv of "correct" device properties to check for regexp madness.
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import csv
|
||
|
import dataclasses
|
||
|
|
||
|
import genlink
|
||
|
|
||
|
|
||
|
@dataclasses.dataclass
|
||
|
class InputDevice:
|
||
|
name: str
|
||
|
ram: str
|
||
|
flash: str
|
||
|
|
||
|
|
||
|
def domain(opts):
|
||
|
fi = csv.DictReader(filter(lambda row: row[0]!='#', opts.input))
|
||
|
idevs = [InputDevice(name=row['name'], ram=row['ram'], flash=row['flash']) for row in fi]
|
||
|
good_count = 0
|
||
|
for idev in idevs:
|
||
|
print(f"checking: {idev.name}")
|
||
|
x = genlink.get_device_data(opts.devices_data, idev.name, exit_on_fail=False)
|
||
|
if not x:
|
||
|
print(f"Failed to match: {idev.name}")
|
||
|
continue
|
||
|
xram: str = [lol for lol in x["defs"] if lol[0] == "RAM"][0][1]
|
||
|
xrom: str = [lol for lol in x["defs"] if lol[0] == "ROM"][0][1]
|
||
|
assert(xram.lower() == idev.ram.lower())
|
||
|
assert(xrom.lower() == idev.flash.lower())
|
||
|
good_count += 1
|
||
|
print(f"Validated {idev.name} with flash: {idev.flash} and ram: {idev.name}")
|
||
|
|
||
|
assert(good_count == len(idevs))
|
||
|
|
||
|
|
||
|
def get_parser():
|
||
|
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||
|
parser.add_argument("-d", "--devices_data", help="devices.data file to check against", required=True)
|
||
|
parser.add_argument("-i", "--input", help="csv input file to check against", type=argparse.FileType('r'), required=True)
|
||
|
return parser
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
p = get_parser()
|
||
|
opts = p.parse_args()
|
||
|
domain(opts)
|
||
|
|