1*f1fd37cbSAndroid Build Coastguard Worker// 2*f1fd37cbSAndroid Build Coastguard Worker// Copyright (C) 2021 The Android Open Source Project 3*f1fd37cbSAndroid Build Coastguard Worker// 4*f1fd37cbSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 5*f1fd37cbSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 6*f1fd37cbSAndroid Build Coastguard Worker// You may obtain a copy of the License at 7*f1fd37cbSAndroid Build Coastguard Worker// 8*f1fd37cbSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 9*f1fd37cbSAndroid Build Coastguard Worker// 10*f1fd37cbSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 11*f1fd37cbSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 12*f1fd37cbSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f1fd37cbSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 14*f1fd37cbSAndroid Build Coastguard Worker// limitations under the License. 15*f1fd37cbSAndroid Build Coastguard Worker 16*f1fd37cbSAndroid Build Coastguard Worker// Integration test for the R8 retracing tool. 17*f1fd37cbSAndroid Build Coastguard Worker 18*f1fd37cbSAndroid Build Coastguard Worker// The retracing tool is a developer tool and part of the build tools. 19*f1fd37cbSAndroid Build Coastguard Worker// The following tests are structured so that the app and retrace tool 20*f1fd37cbSAndroid Build Coastguard Worker// are invoked exactly as a normal build would. The check that they 21*f1fd37cbSAndroid Build Coastguard Worker// produce the correct result is then postponed to a test so that a 22*f1fd37cbSAndroid Build Coastguard Worker// retrace tool failure will not result in a build failure. 23*f1fd37cbSAndroid Build Coastguard Worker 24*f1fd37cbSAndroid Build Coastguard Worker// Rule to dexdump the content of a sample app. 25*f1fd37cbSAndroid Build Coastguard Worker// The dexdump is used to simulate a raw stack trace from the app. 26*f1fd37cbSAndroid Build Coastguard Workerpackage { 27*f1fd37cbSAndroid Build Coastguard Worker default_team: "trendy_team_android_developer_tools", 28*f1fd37cbSAndroid Build Coastguard Worker // See: http://go/android-license-faq 29*f1fd37cbSAndroid Build Coastguard Worker // A large-scale-change added 'default_applicable_licenses' to import 30*f1fd37cbSAndroid Build Coastguard Worker // all of the 'license_kinds' from "prebuilts_r8_license" 31*f1fd37cbSAndroid Build Coastguard Worker // to get the below license kinds: 32*f1fd37cbSAndroid Build Coastguard Worker // SPDX-license-identifier-Apache-2.0 33*f1fd37cbSAndroid Build Coastguard Worker default_applicable_licenses: ["prebuilts_r8_license"], 34*f1fd37cbSAndroid Build Coastguard Worker} 35*f1fd37cbSAndroid Build Coastguard Worker 36*f1fd37cbSAndroid Build Coastguard Workerjava_genrule { 37*f1fd37cbSAndroid Build Coastguard Worker name: "r8retrace-dexdump-sample-app", 38*f1fd37cbSAndroid Build Coastguard Worker out: ["dexdump.txt"], 39*f1fd37cbSAndroid Build Coastguard Worker srcs: [":HelloActivityWithR8"], 40*f1fd37cbSAndroid Build Coastguard Worker tools: [ 41*f1fd37cbSAndroid Build Coastguard Worker "dexdump", 42*f1fd37cbSAndroid Build Coastguard Worker "extractmarker", 43*f1fd37cbSAndroid Build Coastguard Worker ], 44*f1fd37cbSAndroid Build Coastguard Worker cmd: "$(location extractmarker) $(in) > $(out)" + 45*f1fd37cbSAndroid Build Coastguard Worker " && $(location dexdump) -d $(in) >> $(out)", 46*f1fd37cbSAndroid Build Coastguard Worker} 47*f1fd37cbSAndroid Build Coastguard Worker 48*f1fd37cbSAndroid Build Coastguard Worker// Tool and rule to create the raw stack trace from a dexdump. 49*f1fd37cbSAndroid Build Coastguard Workerjava_binary_host { 50*f1fd37cbSAndroid Build Coastguard Worker name: "r8retrace-create-stacktrace-tool", 51*f1fd37cbSAndroid Build Coastguard Worker main_class: "com.android.tools.r8.CreateStacktraceFromDexDumpTool", 52*f1fd37cbSAndroid Build Coastguard Worker srcs: ["src/com/android/tools/r8/CreateStacktraceFromDexDumpTool.java"], 53*f1fd37cbSAndroid Build Coastguard Worker} 54*f1fd37cbSAndroid Build Coastguard Worker 55*f1fd37cbSAndroid Build Coastguard Workerjava_genrule { 56*f1fd37cbSAndroid Build Coastguard Worker name: "r8retrace-create-stacktrace", 57*f1fd37cbSAndroid Build Coastguard Worker out: ["stacktrace.txt"], 58*f1fd37cbSAndroid Build Coastguard Worker srcs: [":r8retrace-dexdump-sample-app"], 59*f1fd37cbSAndroid Build Coastguard Worker tools: ["r8retrace-create-stacktrace-tool"], 60*f1fd37cbSAndroid Build Coastguard Worker cmd: "$(location r8retrace-create-stacktrace-tool) $(in) $(out)", 61*f1fd37cbSAndroid Build Coastguard Worker} 62*f1fd37cbSAndroid Build Coastguard Worker 63*f1fd37cbSAndroid Build Coastguard Worker// Run retrace on the stack trace to produce a retraced stack trace. 64*f1fd37cbSAndroid Build Coastguard Workerjava_genrule { 65*f1fd37cbSAndroid Build Coastguard Worker name: "r8retrace-run-retrace", 66*f1fd37cbSAndroid Build Coastguard Worker out: ["retraced-stacktrace.txt"], 67*f1fd37cbSAndroid Build Coastguard Worker tools: ["retrace"], 68*f1fd37cbSAndroid Build Coastguard Worker tool_files: [ 69*f1fd37cbSAndroid Build Coastguard Worker ":r8.jar.map", 70*f1fd37cbSAndroid Build Coastguard Worker ":r8retrace-create-stacktrace", 71*f1fd37cbSAndroid Build Coastguard Worker ":HelloActivityWithR8{.proguard_map}", 72*f1fd37cbSAndroid Build Coastguard Worker ], 73*f1fd37cbSAndroid Build Coastguard Worker cmd: "$(location retrace)" + 74*f1fd37cbSAndroid Build Coastguard Worker " --cwd-relative-search-paths" + 75*f1fd37cbSAndroid Build Coastguard Worker " --map-search-path $(location :HelloActivityWithR8{.proguard_map})" + 76*f1fd37cbSAndroid Build Coastguard Worker " $(location :r8retrace-create-stacktrace)" + 77*f1fd37cbSAndroid Build Coastguard Worker " > $(out)", 78*f1fd37cbSAndroid Build Coastguard Worker} 79*f1fd37cbSAndroid Build Coastguard Worker 80*f1fd37cbSAndroid Build Coastguard Worker// Test checks that the raw and retraced stack traces are as expected. 81*f1fd37cbSAndroid Build Coastguard Worker// All the output files are added as resources here so that, in case of failure, their content 82*f1fd37cbSAndroid Build Coastguard Worker// can be included in the error message. 83*f1fd37cbSAndroid Build Coastguard Workerjava_test_host { 84*f1fd37cbSAndroid Build Coastguard Worker name: "r8retrace-check-retraced-stacktrace", 85*f1fd37cbSAndroid Build Coastguard Worker test_suites: ["general-tests"], 86*f1fd37cbSAndroid Build Coastguard Worker srcs: ["src/com/android/tools/r8/CheckRetracedStacktraceTest.java"], 87*f1fd37cbSAndroid Build Coastguard Worker static_libs: ["junit"], 88*f1fd37cbSAndroid Build Coastguard Worker device_common_java_resources: [ 89*f1fd37cbSAndroid Build Coastguard Worker ":r8retrace-dexdump-sample-app", 90*f1fd37cbSAndroid Build Coastguard Worker ":HelloActivityWithR8{.proguard_map}", 91*f1fd37cbSAndroid Build Coastguard Worker ":r8retrace-create-stacktrace", 92*f1fd37cbSAndroid Build Coastguard Worker ":r8retrace-run-retrace", 93*f1fd37cbSAndroid Build Coastguard Worker ], 94*f1fd37cbSAndroid Build Coastguard Worker} 95