|
|
@@ -0,0 +1,77 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+
|
|
|
+from flipper.app import App
|
|
|
+import json
|
|
|
+import pathlib
|
|
|
+
|
|
|
+
|
|
|
+class Main(App):
|
|
|
+ def init(self):
|
|
|
+ self.subparsers = self.parser.add_subparsers(help="sub-command help")
|
|
|
+
|
|
|
+ # generate
|
|
|
+ self.parser_generate = self.subparsers.add_parser(
|
|
|
+ "generate", help="Check source code format and file names"
|
|
|
+ )
|
|
|
+ self.parser_generate.add_argument("-p", dest="path", required=True)
|
|
|
+ self.parser_generate.set_defaults(func=self.generate)
|
|
|
+
|
|
|
+ def parse_sources(self, path, source_path, flags_path):
|
|
|
+ flags = ""
|
|
|
+ with open(path + "/" + flags_path) as f:
|
|
|
+ for line in f:
|
|
|
+ if line.strip():
|
|
|
+ flags += line.strip() + " "
|
|
|
+
|
|
|
+ local_path = str(pathlib.Path().resolve())
|
|
|
+
|
|
|
+ data = []
|
|
|
+ with open(path + "/" + source_path) as f:
|
|
|
+ for line in f:
|
|
|
+ if line.strip():
|
|
|
+ file = line.strip()
|
|
|
+ data.append(
|
|
|
+ {
|
|
|
+ "directory": local_path,
|
|
|
+ "command": flags + "-c " + file,
|
|
|
+ "file": file,
|
|
|
+ }
|
|
|
+ )
|
|
|
+ return data
|
|
|
+
|
|
|
+ def generate(self):
|
|
|
+ DB_SOURCE = [
|
|
|
+ {
|
|
|
+ "name": "ASM",
|
|
|
+ "source": "db.asm_source.list",
|
|
|
+ "flags": "db.asm_flags.list",
|
|
|
+ },
|
|
|
+ {"name": "C", "source": "db.c_source.list", "flags": "db.c_flags.list"},
|
|
|
+ {
|
|
|
+ "name": "CPP",
|
|
|
+ "source": "db.cpp_source.list",
|
|
|
+ "flags": "db.cpp_flags.list",
|
|
|
+ },
|
|
|
+ ]
|
|
|
+
|
|
|
+ path = self.args.path
|
|
|
+ out_data = []
|
|
|
+ out_path = path + "/" + "compile_commands.json"
|
|
|
+ out_file = open(out_path, mode="w")
|
|
|
+
|
|
|
+ for record in DB_SOURCE:
|
|
|
+ self.logger.info(
|
|
|
+ f"Processing {record['name']} ({record['source']}, {record['flags']})"
|
|
|
+ )
|
|
|
+ data = self.parse_sources(path, record["source"], record["flags"])
|
|
|
+ out_data += data
|
|
|
+
|
|
|
+ self.logger.info(f"Saving")
|
|
|
+ json.dump(out_data, out_file, indent=2)
|
|
|
+
|
|
|
+ self.logger.info(f"Compilation DB written to " + out_path)
|
|
|
+ return 0
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ Main()()
|