Kernel UT: Enable preprocessor when running cflow in callgraph.py (#530)

* Add INCLUDE_DIR to the commandline call to cflow in callgraph.py

This removes dependent functions from the list when they are disabled in the FreeRTOS config.

* Add argparse to callgraph.py so that no output file is created on failure.
This commit is contained in:
Paul Bartell 2021-03-19 17:30:20 -07:00 committed by GitHub
parent f1da2515c2
commit f39765be22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 4 deletions

View file

@ -120,7 +120,7 @@ $(MOCK_HDR_LIST) $(MOCK_SRC_LIST) : $(PROJECT_DIR)/$(PROJECT).yml $(MOCK_FILES_F
# Generate callgraph for coverage filtering # Generate callgraph for coverage filtering
$(PROJ_DIR)/callgraph.json : $(PROJ_SRC_LIST) $(PROJ_DIR)/callgraph.json : $(PROJ_SRC_LIST)
mkdir -p $(PROJ_DIR) mkdir -p $(PROJ_DIR)
python3 $(UT_ROOT_DIR)/tools/callgraph.py $^ > $@ python3 $(UT_ROOT_DIR)/tools/callgraph.py --out $@ $^
# preprocess proj files to expand macros for coverage # preprocess proj files to expand macros for coverage
$(PROJ_DIR)/%.i : $(KERNEL_DIR)/%.c $(PROJ_DIR)/%.i : $(KERNEL_DIR)/%.c

View file

@ -24,6 +24,7 @@
# https://www.FreeRTOS.org # https://www.FreeRTOS.org
# https://github.com/FreeRTOS # https://github.com/FreeRTOS
############################################################################### ###############################################################################
import argparse
import json import json
import os import os
import re import re
@ -31,12 +32,36 @@ import subprocess
import sys import sys
from typing import Dict, List, Set from typing import Dict, List, Set
target_files = sys.argv[1:] arg_parser = argparse.ArgumentParser(
description="Parse each input .c file and generate a callgraph.json containing"
" a map from each function name to a list of the other functions which the first"
" function calls."
)
arg_parser.add_argument(
"-o", "--out", required=True, help="Output callgraph.json file path."
)
arg_parser.add_argument("in_files", nargs="+", help="Input .c files to be parsed.")
args = arg_parser.parse_args()
if vars(args)["out"] and not os.path.isdir(os.path.dirname(vars(args)["out"])):
print("The output directory does not exist.", file=sys.stderr)
sys.exit(1)
target_files = args.in_files
for f in target_files: for f in target_files:
if not os.path.isfile(f): if not os.path.isfile(f):
print("ERROR: Input file {} does not exist.".format(f)) print("ERROR: Input file {} does not exist.".format(f))
exit(1) sys.exit(1)
includes = ""
# Get INCLUDE_DIR from envrionment
if "INCLUDE_DIR" in os.environ:
includes = os.environ["INCLUDE_DIR"]
else:
print("WARNING: INCLUDE_DIR variable was not found in the envrionment.")
ret = subprocess.run( ret = subprocess.run(
[ [
@ -46,6 +71,7 @@ ret = subprocess.run(
"--omit-arguments", "--omit-arguments",
"--omit-symbol-names", "--omit-symbol-names",
"--all", "--all",
includes,
] ]
+ target_files, + target_files,
capture_output=True, capture_output=True,
@ -103,4 +129,5 @@ for key in callmap:
temp_list = list(callmap[key]) temp_list = list(callmap[key])
callmap_list[key] = temp_list callmap_list[key] = temp_list
print(json.dumps(callmap_list)) with open(args.out, "w") as outfile:
json.dump(callmap_list, outfile)