tools: Add baseconfig to C++ exporter Signed-off-by: David Shah <dave@ds0.me>
diff --git a/tools/export_baseconfig.py b/tools/export_baseconfig.py new file mode 100755 index 0000000..a0c9524 --- /dev/null +++ b/tools/export_baseconfig.py
@@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +import pytrellis +import sys +from os import path + +def main(argv): + print('#include "nextpnr.h"') + print('#include "config.h"') + print() + print('NEXTPNR_NAMESPACE_BEGIN') + print('namespace BaseConfigs {') + for file in argv: + name = path.splitext(path.basename(file))[0] + name = name.replace('-', '_') + with open(file, 'r') as f: + cc = pytrellis.ChipConfig.from_string(f.read()) + print('void config_{}(ChipConfig &cc) {{'.format(name)) + print(' cc.chip_name = "{}";'.format(cc.chip_name)) + for meta in cc.metadata: + print(' cc.metadata.push_back("{}");'.format(meta.replace("\n", "\\n"))) + for tile in cc.tiles: + tn = tile.key() + tc = tile.data() + for arc in tc.carcs: + print(' cc.tiles["{}"].add_arc("{}", "{}");'.format(tn, arc.sink, arc.source)) + for cw in tc.cwords: + print(' cc.tiles["{}"].add_word("{}", std::vector<bool>{{{}}});'.format(tn, cw.name, ", ".join(["true" if x else "false" for x in cw.value]))) + for ce in tc.cenums: + print(' cc.tiles["{}"].add_enum("{}", "{}");'.format(tn, ce.name, ce.value)) + for cu in tc.cunknowns: + print(' cc.tiles["{}"].add_unknown({}, {});'.format(tn, cu.frame, cu.bit)) + print('}') + print() + print('}') + print('NEXTPNR_NAMESPACE_END') + +if __name__ == "__main__": + main(sys.argv[1:])