xref: /aosp_15_r20/prebuilts/r8/tests/Android.bp (revision f1fd37cb3c4ec94650f99d456d82ac1dac2c58ba)
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