versioner: Build SymbolDatabase from version scripts
This commit adds a version script parser so that versioner can build
SymbolDatabase from version scripts.
Bug: 113263746
Test: ./bionic/tools/versioner/run_tests.py
Change-Id: Iedcfe36b51a62693668e07b86aa13592096262db
diff --git a/tools/versioner/src/versioner.cpp b/tools/versioner/src/versioner.cpp
index af0c067..73eff0e 100644
--- a/tools/versioner/src/versioner.cpp
+++ b/tools/versioner/src/versioner.cpp
@@ -33,7 +33,6 @@
#include <iostream>
#include <map>
#include <memory>
-#include <optional>
#include <set>
#include <sstream>
#include <string>
@@ -519,8 +518,11 @@
}
case 'r': {
- Arch arch = arch_from_string(optarg);
- selected_architectures.insert(arch);
+ std::optional<Arch> arch = arch_from_string(optarg);
+ if (!arch) {
+ errx(1, "unknown architecture '%s'", optarg);
+ }
+ selected_architectures.insert(*arch);
break;
}
@@ -613,6 +615,9 @@
std::string versioner_dir = to_string(top) + "/bionic/tools/versioner";
location.header_path = versioner_dir + "/current";
location.dependency_dir = versioner_dir + "/dependencies";
+ if (platform_dir.empty()) {
+ platform_dir = versioner_dir + "/platforms";
+ }
} else {
if (!android::base::Realpath(argv[optind], &location.header_path)) {
err(1, "failed to get realpath for path '%s'", argv[optind]);
@@ -653,6 +658,12 @@
compilation_types = generateCompilationTypes(selected_architectures, selected_levels);
+ // Do this before compiling so that we can early exit if the platforms don't match what we
+ // expect.
+ if (!platform_dir.empty()) {
+ symbol_database = parsePlatforms(compilation_types, platform_dir);
+ }
+
auto start = std::chrono::high_resolution_clock::now();
std::unique_ptr<HeaderDatabase> declaration_database =
compileHeaders(compilation_types, location);