78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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()()
 | 
