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.
pull/515/head^2
Paul Bartell 4 years ago committed by GitHub
parent f1da2515c2
commit f39765be22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -120,7 +120,7 @@ $(MOCK_HDR_LIST) $(MOCK_SRC_LIST) : $(PROJECT_DIR)/$(PROJECT).yml $(MOCK_FILES_F
# Generate callgraph for coverage filtering
$(PROJ_DIR)/callgraph.json : $(PROJ_SRC_LIST)
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
$(PROJ_DIR)/%.i : $(KERNEL_DIR)/%.c

@ -24,6 +24,7 @@
# https://www.FreeRTOS.org
# https://github.com/FreeRTOS
###############################################################################
import argparse
import json
import os
import re
@ -31,12 +32,36 @@ import subprocess
import sys
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:
if not os.path.isfile(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(
[
@ -46,6 +71,7 @@ ret = subprocess.run(
"--omit-arguments",
"--omit-symbol-names",
"--all",
includes,
]
+ target_files,
capture_output=True,
@ -103,4 +129,5 @@ for key in callmap:
temp_list = list(callmap[key])
callmap_list[key] = temp_list
print(json.dumps(callmap_list))
with open(args.out, "w") as outfile:
json.dump(callmap_list, outfile)

Loading…
Cancel
Save