diff --git a/vndk/tools/header-checker/Android.bp b/vndk/tools/header-checker/Android.bp index aff2d0554..65e248497 100644 --- a/vndk/tools/header-checker/Android.bp +++ b/vndk/tools/header-checker/Android.bp @@ -165,6 +165,7 @@ cc_library_host_static { "src/repr/symbol/so_file_parser.cpp", "src/repr/symbol/version_script_parser.cpp", "src/utils/api_level.cpp", + "src/utils/command_line_utils.cpp", "src/utils/config_file.cpp", "src/utils/collect_exported_headers.cpp", "src/utils/string_utils.cpp", diff --git a/vndk/tools/header-checker/src/dumper/header_checker.cpp b/vndk/tools/header-checker/src/dumper/header_checker.cpp index 25d87fe8c..f856f2c2c 100644 --- a/vndk/tools/header-checker/src/dumper/header_checker.cpp +++ b/vndk/tools/header-checker/src/dumper/header_checker.cpp @@ -16,6 +16,7 @@ #include "dumper/fixed_argv.h" #include "dumper/frontend_action_factory.h" +#include "utils/command_line_utils.h" #include "utils/header_abi_util.h" #include @@ -40,6 +41,7 @@ using header_checker::dumper::HeaderCheckerFrontendActionFactory; using header_checker::dumper::HeaderCheckerOptions; using header_checker::repr::TextFormatIR; using header_checker::utils::CollectAllExportedHeaders; +using header_checker::utils::HideIrrelevantCommandLineOptions; using header_checker::utils::RealPath; @@ -83,22 +85,8 @@ static llvm::cl::opt output_format( llvm::cl::init(TextFormatIR::Json), llvm::cl::cat(header_checker_category)); -// Hide irrelevant command line options defined in LLVM libraries. -static void HideIrrelevantCommandLineOptions() { - llvm::StringMap &map = llvm::cl::getRegisteredOptions(); - for (llvm::StringMapEntry &p : map) { - if (p.second->Category == &header_checker_category) { - continue; - } - if (p.first().startswith("help")) { - continue; - } - p.second->setHiddenFlag(llvm::cl::Hidden); - } -} - int main(int argc, const char **argv) { - HideIrrelevantCommandLineOptions(); + HideIrrelevantCommandLineOptions(header_checker_category); // Tweak argc and argv to workaround clang version mismatches. FixedArgv fixed_argv(argc, argv); diff --git a/vndk/tools/header-checker/src/linker/header_abi_linker.cpp b/vndk/tools/header-checker/src/linker/header_abi_linker.cpp index 49d9cd04e..618c2092b 100644 --- a/vndk/tools/header-checker/src/linker/header_abi_linker.cpp +++ b/vndk/tools/header-checker/src/linker/header_abi_linker.cpp @@ -17,6 +17,7 @@ #include "repr/ir_reader.h" #include "repr/symbol/so_file_parser.h" #include "repr/symbol/version_script_parser.h" +#include "utils/command_line_utils.h" #include "utils/header_abi_util.h" #include @@ -37,6 +38,7 @@ using namespace header_checker; using header_checker::repr::TextFormatIR; using header_checker::utils::CollectAllExportedHeaders; +using header_checker::utils::HideIrrelevantCommandLineOptions; static constexpr std::size_t kSourcesPerBatchThread = 7; @@ -446,22 +448,8 @@ bool HeaderAbiLinker::ReadExportedSymbolsFromSharedObjectFile() { return true; } -// Hide irrelevant command line options defined in LLVM libraries. -static void HideIrrelevantCommandLineOptions() { - llvm::StringMap &map = llvm::cl::getRegisteredOptions(); - for (llvm::StringMapEntry &p : map) { - if (p.second->Category == &header_linker_category) { - continue; - } - if (p.first().startswith("help")) { - continue; - } - p.second->setHiddenFlag(llvm::cl::Hidden); - } -} - int main(int argc, const char **argv) { - HideIrrelevantCommandLineOptions(); + HideIrrelevantCommandLineOptions(header_linker_category); llvm::cl::ParseCommandLineOptions(argc, argv, "header-linker"); if (so_file.empty() && version_script.empty()) { diff --git a/vndk/tools/header-checker/src/utils/command_line_utils.cpp b/vndk/tools/header-checker/src/utils/command_line_utils.cpp new file mode 100644 index 000000000..be8cb5f73 --- /dev/null +++ b/vndk/tools/header-checker/src/utils/command_line_utils.cpp @@ -0,0 +1,52 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "command_line_utils.h" + +#include +#include +#include + +#include + +namespace header_checker { +namespace utils { + + +static bool IsOptionInCategory(const llvm::cl::Option &option, + const llvm::cl::OptionCategory &category) { + const llvm::SmallVectorImpl &categories = + option.Categories; + auto iter = std::find(categories.begin(), categories.end(), &category); + return iter != categories.end(); +} + + +void HideIrrelevantCommandLineOptions( + const llvm::cl::OptionCategory &category) { + llvm::StringMap &map = llvm::cl::getRegisteredOptions(); + for (llvm::StringMapEntry &p : map) { + if (IsOptionInCategory(*p.second, category)) { + continue; + } + if (p.first().startswith("help")) { + continue; + } + p.second->setHiddenFlag(llvm::cl::Hidden); + } +} + + +} // namespace utils +} // namespace header_checker diff --git a/vndk/tools/header-checker/src/utils/command_line_utils.h b/vndk/tools/header-checker/src/utils/command_line_utils.h new file mode 100644 index 000000000..d0bd48414 --- /dev/null +++ b/vndk/tools/header-checker/src/utils/command_line_utils.h @@ -0,0 +1,32 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef COMMAND_LINE_UTILS_H_ +#define COMMAND_LINE_UTILS_H_ + +#include + + +namespace header_checker { +namespace utils { + + +// Hide irrelevant command line options defined in LLVM libraries. +void HideIrrelevantCommandLineOptions(const llvm::cl::OptionCategory &category); + + +} // namespace utils +} // namespace header_checker + +#endif // COMMAND_LINE_UTILS_H_