diff options
author | Hsin-Yi Chen <hsinyichen@google.com> | 2024-04-05 01:22:16 +0800 |
---|---|---|
committer | Hsin-Yi Chen <hsinyichen@google.com> | 2024-04-11 18:44:32 +0800 |
commit | b35ab566dc27eac059b29a7c2ce90b082c47928f (patch) | |
tree | 063df29e5f8baee12d59abb2cf3b3e34804af471 | |
parent | 8471b71856b7b015c89df8b470023aea685f7753 (diff) | |
download | development-b35ab566dc27eac059b29a7c2ce90b082c47928f.tar.gz |
Simplify the constructor of HeaderAbiLinker
VersionScriptParser is initialized outside of HeaderAbiLinker so that
the constructor of HeaderAbiLinker takes fewer parameters.
Test: ./test.py
Bug: 314010764
Change-Id: Ifca216875a7311fab98be70457fa92b906a976a7
-rw-r--r-- | vndk/tools/header-checker/src/linker/header_abi_linker.cpp | 107 |
1 files changed, 53 insertions, 54 deletions
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 98e6226c2..657504ecc 100644 --- a/vndk/tools/header-checker/src/linker/header_abi_linker.cpp +++ b/vndk/tools/header-checker/src/linker/header_abi_linker.cpp @@ -128,23 +128,17 @@ static llvm::cl::opt<std::size_t> sources_per_thread( class HeaderAbiLinker { public: - HeaderAbiLinker( - const std::vector<std::string> &dump_files, - const std::vector<std::string> &exported_header_dirs, - const std::string &version_script, - const std::string &so_file, - const std::string &linked_dump, - const std::string &arch, - const std::string &api, - const utils::ApiLevelMap &api_level_map, - const std::vector<std::string> &excluded_symbol_versions, - const std::vector<std::string> &excluded_symbol_tags) - : dump_files_(dump_files), exported_header_dirs_(exported_header_dirs), - version_script_(version_script), so_file_(so_file), - out_dump_name_(linked_dump), - arch_(arch), api_(api), api_level_map_(api_level_map), - excluded_symbol_versions_(excluded_symbol_versions), - excluded_symbol_tags_(excluded_symbol_tags) {} + HeaderAbiLinker(const std::vector<std::string> &dump_files, + const std::vector<std::string> &exported_header_dirs, + repr::VersionScriptParser &version_script_parser, + const std::string &version_script, const std::string &so_file, + const std::string &linked_dump) + : dump_files_(dump_files), + exported_header_dirs_(exported_header_dirs), + version_script_parser_(version_script_parser), + version_script_(version_script), + so_file_(so_file), + out_dump_name_(linked_dump) {} bool LinkAndDump(); @@ -187,14 +181,10 @@ class HeaderAbiLinker { private: const std::vector<std::string> &dump_files_; const std::vector<std::string> &exported_header_dirs_; + repr::VersionScriptParser &version_script_parser_; const std::string &version_script_; const std::string &so_file_; const std::string &out_dump_name_; - const std::string &arch_; - const std::string &api_; - const utils::ApiLevelMap &api_level_map_; - const std::vector<std::string> &excluded_symbol_versions_; - const std::vector<std::string> &excluded_symbol_tags_; std::set<std::string> exported_headers_; @@ -429,30 +419,13 @@ bool HeaderAbiLinker::ReadExportedSymbols() { } bool HeaderAbiLinker::ReadExportedSymbolsFromVersionScript() { - std::optional<utils::ApiLevel> api_level = api_level_map_.Parse(api_); - if (!api_level) { - llvm::errs() << "-api must be either \"current\" or an integer (e.g. 21)\n"; - return false; - } - std::ifstream stream(version_script_, std::ios_base::in); if (!stream) { llvm::errs() << "Failed to open version script file\n"; return false; } - repr::VersionScriptParser parser; - parser.SetArch(arch_); - parser.SetApiLevel(api_level.value()); - parser.SetApiLevelMap(api_level_map_); - for (auto &&version : excluded_symbol_versions_) { - parser.AddExcludedSymbolVersion(version); - } - for (auto &&tag : excluded_symbol_tags_) { - parser.AddExcludedSymbolTag(tag); - } - - version_script_symbols_ = parser.Parse(stream); + version_script_symbols_ = version_script_parser_.Parse(stream); if (!version_script_symbols_) { llvm::errs() << "Failed to parse version script file\n"; return false; @@ -477,35 +450,61 @@ bool HeaderAbiLinker::ReadExportedSymbolsFromSharedObjectFile() { return true; } -int main(int argc, const char **argv) { - HideIrrelevantCommandLineOptions(header_linker_category); - llvm::cl::ParseCommandLineOptions(argc, argv, "header-linker"); - - if (so_file.empty() && version_script.empty()) { - llvm::errs() << "One of -so or -v needs to be specified\n"; - return -1; - } - +static bool InitializeVersionScriptParser(repr::VersionScriptParser &parser) { utils::ApiLevelMap api_level_map; if (!api_map.empty()) { std::ifstream stream(api_map); if (!stream) { llvm::errs() << "Failed to open " << api_map << "\n"; - return -1; + return false; } if (!api_level_map.Load(stream)) { llvm::errs() << "Failed to load " << api_map << "\n"; - return -1; + return false; } } + std::optional<utils::ApiLevel> api_level = api_level_map.Parse(api); + if (!api_level) { + llvm::errs() << "-api must be \"current\", an integer, or a codename in " + "-api-map\n"; + return false; + } + + parser.SetArch(arch); + parser.SetApiLevel(api_level.value()); + parser.SetApiLevelMap(api_level_map); + for (auto &&version : excluded_symbol_versions) { + parser.AddExcludedSymbolVersion(version); + } + for (auto &&tag : excluded_symbol_tags) { + parser.AddExcludedSymbolTag(tag); + } + + return true; +} + +int main(int argc, const char **argv) { + HideIrrelevantCommandLineOptions(header_linker_category); + llvm::cl::ParseCommandLineOptions(argc, argv, "header-linker"); + + if (so_file.empty() && version_script.empty()) { + llvm::errs() << "One of -so or -v needs to be specified\n"; + return -1; + } + + repr::VersionScriptParser version_script_parser; + if (!InitializeVersionScriptParser(version_script_parser)) { + return -1; + } + if (no_filter) { static_cast<std::vector<std::string> &>(exported_header_dirs).clear(); } - HeaderAbiLinker Linker(dump_files, exported_header_dirs, version_script, - so_file, linked_dump, arch, api, api_level_map, - excluded_symbol_versions, excluded_symbol_tags); + HeaderAbiLinker Linker(dump_files, exported_header_dirs, + version_script_parser, version_script, so_file, + linked_dump); if (!Linker.LinkAndDump()) { llvm::errs() << "Failed to link and dump elements\n"; |