// // Copyright (C) 2021 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. // Integration test for the R8 retracing tool. // The retracing tool is a developer tool and part of the build tools. // The following tests are structured so that the app and retrace tool // are invoked exactly as a normal build would. The check that they // produce the correct result is then postponed to a test so that a // retrace tool failure will not result in a build failure. // Rule to dexdump the content of a sample app. // The dexdump is used to simulate a raw stack trace from the app. package { // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "prebuilts_r8_license" // to get the below license kinds: // SPDX-license-identifier-Apache-2.0 default_applicable_licenses: ["prebuilts_r8_license"], } genrule { name: "r8retrace-dexdump-sample-app", out: ["dexdump.txt"], srcs: [":HelloActivityWithR8"], tools: ["dexdump", "extractmarker"], cmd: "$(location extractmarker) $(in) > $(out)" + " && $(location dexdump) -d $(in) >> $(out)", } // Tool and rule to create the raw stack trace from a dexdump. java_binary_host { name: "r8retrace-create-stacktrace-tool", main_class: "com.android.tools.r8.CreateStacktraceFromDexDumpTool", srcs: ["src/com/android/tools/r8/CreateStacktraceFromDexDumpTool.java"], } genrule { name: "r8retrace-create-stacktrace", out: ["stacktrace.txt"], srcs: [":r8retrace-dexdump-sample-app"], tools: ["r8retrace-create-stacktrace-tool"], cmd: "$(location r8retrace-create-stacktrace-tool) $(in) $(out)", } // Run retrace on the stack trace to produce a retraced stack trace. genrule { name: "r8retrace-run-retrace", out: ["retraced-stacktrace.txt"], srcs: [":r8retrace-create-stacktrace", ":HelloActivityWithR8{.proguard_map}"], tools: ["retrace"], cmd: "$(location retrace)" + " --map-search-path $(location :HelloActivityWithR8{.proguard_map})" + " $(location :r8retrace-create-stacktrace)" + " > $(out)", } // Test checks that the raw and retraced stack traces are as expected. // All the output files are added as resources here so that, in case of failure, their content // can be included in the error message. java_test_host { name: "r8retrace-check-retraced-stacktrace", test_suites: ["general-tests"], srcs: ["src/com/android/tools/r8/CheckRetracedStacktraceTest.java"], static_libs: ["junit"], java_resources: [ ":r8retrace-dexdump-sample-app", ":HelloActivityWithR8{.proguard_map}", ":r8retrace-create-stacktrace", ":r8retrace-run-retrace", ], }