Make the API/ABI check optional
This way we can add other checks and only run a subset of all the checks. The default remains to run all the checks. I made separate options for API and ABI, but since we use the same tool for both and it doesn't have an obvious way to check only API or only ABI, the two options must be both enabled or both disabled. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
4579a972bf
commit
c76ab85561
1 changed files with 31 additions and 7 deletions
|
@ -51,6 +51,8 @@ class AbiChecker:
|
||||||
configuration.report_dir: directory for output files
|
configuration.report_dir: directory for output files
|
||||||
configuration.keep_all_reports: if false, delete old reports
|
configuration.keep_all_reports: if false, delete old reports
|
||||||
configuration.brief: if true, output shorter report to stdout
|
configuration.brief: if true, output shorter report to stdout
|
||||||
|
configuration.check_api: if true, compare ABIs
|
||||||
|
configuration.check_api: if true, compare APIs
|
||||||
configuration.skip_file: path to file containing symbols and types to skip
|
configuration.skip_file: path to file containing symbols and types to skip
|
||||||
"""
|
"""
|
||||||
self.repo_path = "."
|
self.repo_path = "."
|
||||||
|
@ -64,6 +66,10 @@ class AbiChecker:
|
||||||
self.old_version = old_version
|
self.old_version = old_version
|
||||||
self.new_version = new_version
|
self.new_version = new_version
|
||||||
self.skip_file = configuration.skip_file
|
self.skip_file = configuration.skip_file
|
||||||
|
self.check_abi = configuration.check_abi
|
||||||
|
self.check_api = configuration.check_api
|
||||||
|
if self.check_abi != self.check_api:
|
||||||
|
raise Exception('Checking API without ABI or vice versa is not supported')
|
||||||
self.brief = configuration.brief
|
self.brief = configuration.brief
|
||||||
self.git_command = "git"
|
self.git_command = "git"
|
||||||
self.make_command = "make"
|
self.make_command = "make"
|
||||||
|
@ -222,8 +228,9 @@ class AbiChecker:
|
||||||
"""Generate the ABI dumps for the specified git revision."""
|
"""Generate the ABI dumps for the specified git revision."""
|
||||||
git_worktree_path = self._get_clean_worktree_for_git_revision(version)
|
git_worktree_path = self._get_clean_worktree_for_git_revision(version)
|
||||||
self._update_git_submodules(git_worktree_path, version)
|
self._update_git_submodules(git_worktree_path, version)
|
||||||
self._build_shared_libraries(git_worktree_path, version)
|
if self.check_abi:
|
||||||
self._get_abi_dumps_from_shared_libraries(version)
|
self._build_shared_libraries(git_worktree_path, version)
|
||||||
|
self._get_abi_dumps_from_shared_libraries(version)
|
||||||
self._cleanup_worktree(git_worktree_path)
|
self._cleanup_worktree(git_worktree_path)
|
||||||
|
|
||||||
def _remove_children_with_tag(self, parent, tag):
|
def _remove_children_with_tag(self, parent, tag):
|
||||||
|
@ -310,11 +317,14 @@ class AbiChecker:
|
||||||
self._pretty_revision(self.new_version)
|
self._pretty_revision(self.new_version)
|
||||||
)]
|
)]
|
||||||
compliance_return_code = 0
|
compliance_return_code = 0
|
||||||
shared_modules = list(set(self.old_version.modules.keys()) &
|
if self.check_abi:
|
||||||
set(self.new_version.modules.keys()))
|
shared_modules = list(set(self.old_version.modules.keys()) &
|
||||||
for mbed_module in shared_modules:
|
set(self.new_version.modules.keys()))
|
||||||
if not self._is_library_compatible(mbed_module,
|
for mbed_module in shared_modules:
|
||||||
compatibility_report):
|
if not self._is_library_compatible(mbed_module,
|
||||||
|
compatibility_report):
|
||||||
|
compliance_return_code = 1
|
||||||
|
|
||||||
compliance_return_code = 1
|
compliance_return_code = 1
|
||||||
for version in [self.old_version, self.new_version]:
|
for version in [self.old_version, self.new_version]:
|
||||||
for mbed_module, mbed_module_dump in version.abi_dumps.items():
|
for mbed_module, mbed_module_dump in version.abi_dumps.items():
|
||||||
|
@ -397,6 +407,18 @@ def run_main():
|
||||||
"(typically \"-s identifiers\" after running "
|
"(typically \"-s identifiers\" after running "
|
||||||
"\"tests/scripts/list-identifiers.sh --internal\")")
|
"\"tests/scripts/list-identifiers.sh --internal\")")
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--check-abi",
|
||||||
|
action='store_true', default=True,
|
||||||
|
help="Perform ABI comparison (default: yes)"
|
||||||
|
)
|
||||||
|
parser.add_argument("--no-check-abi", action='store_false', dest='check_abi')
|
||||||
|
parser.add_argument(
|
||||||
|
"--check-api",
|
||||||
|
action='store_true', default=True,
|
||||||
|
help="Perform API comparison (default: yes)"
|
||||||
|
)
|
||||||
|
parser.add_argument("--no-check-api", action='store_false', dest='check_api')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-b", "--brief", action="store_true",
|
"-b", "--brief", action="store_true",
|
||||||
help="output only the list of issues to stdout, instead of a full report",
|
help="output only the list of issues to stdout, instead of a full report",
|
||||||
|
@ -430,6 +452,8 @@ def run_main():
|
||||||
report_dir=abi_args.report_dir,
|
report_dir=abi_args.report_dir,
|
||||||
keep_all_reports=abi_args.keep_all_reports,
|
keep_all_reports=abi_args.keep_all_reports,
|
||||||
brief=abi_args.brief,
|
brief=abi_args.brief,
|
||||||
|
check_abi=abi_args.check_abi,
|
||||||
|
check_api=abi_args.check_api,
|
||||||
skip_file=abi_args.skip_file
|
skip_file=abi_args.skip_file
|
||||||
)
|
)
|
||||||
abi_check = AbiChecker(old_version, new_version, configuration)
|
abi_check = AbiChecker(old_version, new_version, configuration)
|
||||||
|
|
Loading…
Reference in a new issue