mirror of https://github.com/thesofproject/sof.git
62 lines
1.9 KiB
Python
Executable File
62 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
import re
|
|
import sys
|
|
|
|
# Very simple UUID registry validator and C header generator. Parses
|
|
# uuid-registry.txt (passed as the first command line argument) and
|
|
# writes a C header (named in the second argument) containing
|
|
# definitions to be used at build time. Fails via assertion if the
|
|
# any element in the registry is invalid.
|
|
|
|
header = """/*
|
|
* GENERATED CODE. DO NOT EDIT.
|
|
*
|
|
* Generated UUID records (initializers for struct sof_uuid)
|
|
* See scripts/gen-uuid-reg.py
|
|
*/
|
|
#ifndef _UUID_REGISTRY_H
|
|
#define _UUID_REGISTRY_H
|
|
"""
|
|
|
|
all_syms = set()
|
|
all_uuids = set()
|
|
out_recs = []
|
|
|
|
def emit_uuid_rec(uu, sym):
|
|
recs = uu.split('-')
|
|
brec = recs[3]
|
|
wrecs = [ "0x" + r for r in recs[0:3] ]
|
|
byts = [ "0x" + brec[ 2*i : 2*i+2 ] for i in range(int(len(brec) / 2)) ]
|
|
uuidinit = "{ " + ", ".join(wrecs) + ", { " + ", ".join(byts) + " } }"
|
|
out_recs.append(f"#define _UUIDREG_{sym} {uuidinit}")
|
|
|
|
def main():
|
|
with open(sys.argv[1]) as f:
|
|
for line in f.readlines():
|
|
line = re.sub(r'\s*#.*', '', line) # trim comments
|
|
line = re.sub(r'^\s*', '', line) # trim leading ws
|
|
line = re.sub(r'\s*$', '', line) # trim trailing ws
|
|
if line == "":
|
|
continue
|
|
m = re.match(r'(.*)\s+(.*)', line)
|
|
assert m
|
|
(uu, sym) = (m.group(1).lower(), m.group(2))
|
|
assert re.match(r'[0-9a-f]{8}(?:-[0-9a-f]{4}){2}-[0-9a-f]{16}', uu)
|
|
assert re.match(r'[a-zA-Z_][a-zA-Z0-9_]*', sym)
|
|
assert len(sym) < 32
|
|
assert uu not in all_uuids
|
|
assert sym not in all_syms
|
|
all_uuids.add(uu)
|
|
all_syms.add(sym)
|
|
emit_uuid_rec(uu, sym)
|
|
|
|
with open(sys.argv[2], "w") as f:
|
|
f.write(header)
|
|
for l in out_recs:
|
|
f.write(l + "\n")
|
|
f.write("#endif /* _UUID_REGISTRY_H */\n")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|