diff options
author | 2022-02-08 10:42:17 +0000 | |
---|---|---|
committer | 2022-02-08 11:07:17 +0000 | |
commit | c9607e3cebb5fa942fec1d40b4a36a31ca5fb7c7 (patch) | |
tree | 470bf375a5538f1b2857e70ada334a71bf05d914 /test/generate-boot-image | |
parent | be9e23a61983cd4a3aa7c20f2e96d56333d92cf7 (diff) |
Revert^3 "Generate a primary boot image for testing."
This reverts commit 5791123eeefd60d39b2ef1e62817ec9a1346b2af.
Reason for revert: Broke LUCI tests again.
Change-Id: I2481f9a147f8ae25930e30c0b717c139fd93fbdb
Diffstat (limited to 'test/generate-boot-image')
-rw-r--r-- | test/generate-boot-image/Android.bp | 56 | ||||
-rw-r--r-- | test/generate-boot-image/generate-boot-image.cc | 157 |
2 files changed, 0 insertions, 213 deletions
diff --git a/test/generate-boot-image/Android.bp b/test/generate-boot-image/Android.bp deleted file mode 100644 index 4b56c5370b..0000000000 --- a/test/generate-boot-image/Android.bp +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright (C) 2022 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. -// - -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "art_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["art_license"], -} - -art_cc_binary { - name: "generate-boot-image", - defaults: [ - "art_defaults", - ], - host_supported: false, - compile_multilib: "both", - multilib: { - lib32: { - suffix: "32", - }, - lib64: { - suffix: "64", - }, - }, - required: [ - "dex2oat", - ], - srcs: ["generate-boot-image.cc"], - shared_libs: [ - "libbase", - "liblog", - ], - static_libs: [ - "libartbase", - ], - tidy: true, - tidy_flags: [ - "-format-style=file", - ], -} diff --git a/test/generate-boot-image/generate-boot-image.cc b/test/generate-boot-image/generate-boot-image.cc deleted file mode 100644 index 91440644c6..0000000000 --- a/test/generate-boot-image/generate-boot-image.cc +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2022 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. - */ - -/** A commandline tool to generate a primary boot image for testing. */ - -#include <sys/stat.h> -#include <sysexits.h> - -#include <algorithm> -#include <cstdlib> -#include <string> -#include <vector> - -#ifdef __ANDROID__ -#include <android/api-level.h> -#endif - -#include "android-base/stringprintf.h" -#include "android-base/strings.h" -#include "arch/instruction_set.h" -#include "base/file_utils.h" -#include "base/globals.h" -#include "base/os.h" - -namespace art { - -namespace { - -using ::android::base::Join; -using ::android::base::Split; -using ::android::base::StringPrintf; - -std::string GetCompilerExecutable() { - std::string compiler_executable = GetArtBinDir() + "/dex2oat"; - if (kIsDebugBuild) { - compiler_executable += 'd'; - } - compiler_executable += Is64BitInstructionSet(kRuntimeISA) ? "64" : "32"; - return compiler_executable; -} - -std::vector<std::string> GetDexFiles() { - const char* bootclasspath_env = getenv("BOOTCLASSPATH"); - CHECK_NE(bootclasspath_env, nullptr); - std::vector<std::string> dex_files = Split(bootclasspath_env, ":"); - std::string art_root = GetArtRoot(); -// Java core libraries are located in a different location on old versions. We need to rewrite the -// locations to match where the testing scripts actually place Java core libraries. -#ifdef __ANDROID__ - if (android_get_device_api_level() <= __ANDROID_API_Q__) { - for (std::string& dex_file : dex_files) { - dex_file = android::base::StringReplace( - dex_file, "/apex/com.android.runtime", art_root, /*all=*/false); - } - } -#endif - auto end = std::remove_if(dex_files.begin(), dex_files.end(), [&](const std::string& file) { - return !android::base::StartsWith(file, art_root); - }); - dex_files.erase(end, dex_files.end()); - return dex_files; -} - -// Joins a list of commandline args into a single string, where each part is quoted with double -// quotes. Note that this is a naive implementation that does NOT escape existing double quotes, -// which is fine since we don't have existing double quotes in the args in this particular use case -// and this code is never used in production. -std::string BuildCommand(const std::vector<std::string>& args) { - std::string command = ""; - for (const std::string& arg : args) { - if (!command.empty()) { - command += " "; - } - command += '"' + arg + '"'; - } - return command; -} - -int GenerateBootImage(const std::string& dir, const std::string& compiler_filter) { - std::string isa = GetInstructionSetString(kRuntimeISA); - - std::vector<std::string> args; - args.push_back(GetCompilerExecutable()); - - std::vector<std::string> dex_files = GetDexFiles(); - args.push_back("--runtime-arg"); - args.push_back("-Xbootclasspath:" + Join(dex_files, ":")); - for (const std::string& file : dex_files) { - args.push_back("--dex-file=" + file); - } - - args.push_back("--instruction-set=" + isa); - args.push_back(StringPrintf("--base=0x%08x", ART_BASE_ADDRESS)); - args.push_back("--compiler-filter=" + compiler_filter); - args.push_back(StringPrintf("--profile-file=%s/etc/boot-image.prof", GetArtRoot().c_str())); - args.push_back("--avoid-storing-invocation"); - args.push_back("--generate-debug-info"); - args.push_back("--generate-build-id"); - args.push_back("--image-format=lz4hc"); - args.push_back("--strip"); - args.push_back("--android-root=out/empty"); - - std::string path = StringPrintf("%s/%s", dir.c_str(), isa.c_str()); - if (!OS::DirectoryExists(path.c_str())) { - CHECK_EQ(mkdir(path.c_str(), S_IRWXU), 0); - } - args.push_back(StringPrintf("--image=%s/boot.art", path.c_str())); - args.push_back(StringPrintf("--oat-file=%s/boot.oat", path.c_str())); - - int exit_code = system(BuildCommand(args).c_str()); - if (exit_code != 0) { - LOG(ERROR) << "dex2oat invocation failed. Exit code: " << exit_code; - } - return exit_code; -} - -} // namespace -} // namespace art - -int main(int argc, char** argv) { - android::base::InitLogging(argv, android::base::LogdLogger(android::base::SYSTEM)); - - std::string dir = ""; - // Set the compiler filter to `verify` by default to make test preparation faster. - std::string compiler_filter = "verify"; - for (int i = 1; i < argc; i++) { - std::string_view arg{argv[i]}; - if (android::base::ConsumePrefix(&arg, "--output-dir=")) { - dir = arg; - } else if (android::base::ConsumePrefix(&arg, "--compiler-filter=")) { - compiler_filter = arg; - } else { - LOG(ERROR) << android::base::StringPrintf("Unrecognized argument: '%s'", argv[i]); - exit(EX_USAGE); - } - } - - if (dir.empty()) { - LOG(ERROR) << "--output-dir must be specified"; - exit(EX_USAGE); - } - - return art::GenerateBootImage(dir, compiler_filter); -} |