Compile commands generator (#1223)
This commit is contained in:
parent
85a129b89f
commit
5de72e75df
4
Makefile
4
Makefile
@ -148,3 +148,7 @@ format:
|
|||||||
guruguru:
|
guruguru:
|
||||||
@echo "ぐるぐる回る"
|
@echo "ぐるぐる回る"
|
||||||
@$(PROJECT_ROOT)/scripts/guruguru.py $(PROJECT_ROOT)
|
@$(PROJECT_ROOT)/scripts/guruguru.py $(PROJECT_ROOT)
|
||||||
|
|
||||||
|
.PHONY: generate_compile_db
|
||||||
|
generate_compile_db:
|
||||||
|
@$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) generate_compile_db
|
@ -155,6 +155,22 @@ generate_cscope_db:
|
|||||||
@cscope -b -k -i $(OBJ_DIR)/source.list -f $(OBJ_DIR)/cscope.out
|
@cscope -b -k -i $(OBJ_DIR)/source.list -f $(OBJ_DIR)/cscope.out
|
||||||
@rm -rf $(OBJ_DIR)/source.list $(OBJ_DIR)/source.list.p
|
@rm -rf $(OBJ_DIR)/source.list $(OBJ_DIR)/source.list.p
|
||||||
|
|
||||||
|
.PHONY: generate_compile_db
|
||||||
|
generate_compile_db:
|
||||||
|
@echo "$(ASM_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.asm_source.list
|
||||||
|
@echo "$(C_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.c_source.list
|
||||||
|
@echo "$(CPP_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.cpp_source.list
|
||||||
|
@echo "$(AS)$(CFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.asm_flags.list
|
||||||
|
@echo "$(CC)$(CFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.c_flags.list
|
||||||
|
@echo "$(CPP)$(CFLAGS)$(CPPFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.cpp_flags.list
|
||||||
|
@$(PROJECT_ROOT)/scripts/compile_db.py generate -p $(OBJ_DIR)
|
||||||
|
@rm $(OBJ_DIR)/db.asm_source.list
|
||||||
|
@rm $(OBJ_DIR)/db.c_source.list
|
||||||
|
@rm $(OBJ_DIR)/db.cpp_source.list
|
||||||
|
@rm $(OBJ_DIR)/db.asm_flags.list
|
||||||
|
@rm $(OBJ_DIR)/db.c_flags.list
|
||||||
|
@rm $(OBJ_DIR)/db.cpp_flags.list
|
||||||
|
|
||||||
# Prevent make from searching targets for real files
|
# Prevent make from searching targets for real files
|
||||||
%.d: ;
|
%.d: ;
|
||||||
|
|
||||||
|
@ -36,6 +36,6 @@ else
|
|||||||
CFLAGS += -DFURI_NDEBUG -DNDEBUG -Og -g
|
CFLAGS += -DFURI_NDEBUG -DNDEBUG -Og -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += -fdata-sections -ffunction-sections -fno-math-errno -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)"
|
CFLAGS += -fdata-sections -ffunction-sections -fno-math-errno -fstack-usage -MMD -MP -MF "$(@:%.o=%.d)"
|
||||||
CPPFLAGS += -fno-threadsafe-statics -fno-use-cxa-atexit -fno-exceptions -fno-rtti
|
CPPFLAGS += -fno-threadsafe-statics -fno-use-cxa-atexit -fno-exceptions -fno-rtti
|
||||||
LDFLAGS += -Wl,-Map=$(OBJ_DIR)/$(PROJECT).map,--cref -Wl,--gc-sections -Wl,--undefined=uxTopUsedPriority -n
|
LDFLAGS += -Wl,-Map=$(OBJ_DIR)/$(PROJECT).map,--cref -Wl,--gc-sections -Wl,--undefined=uxTopUsedPriority -n
|
||||||
|
77
scripts/compile_db.py
Executable file
77
scripts/compile_db.py
Executable file
@ -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()()
|
Loading…
Reference in New Issue
Block a user