xref: /aosp_15_r20/external/jacoco/Android.bp (revision 7e63c1270baf9bfa84f5b6aecf17bd0c1a75af94)
1*7e63c127SSorin Basca//
2*7e63c127SSorin Basca// Copyright (C) 2016 The Android Open Source Project
3*7e63c127SSorin Basca//
4*7e63c127SSorin Basca// Licensed under the Apache License, Version 2.0 (the "License");
5*7e63c127SSorin Basca// you may not use this file except in compliance with the License.
6*7e63c127SSorin Basca// You may obtain a copy of the License at
7*7e63c127SSorin Basca//
8*7e63c127SSorin Basca//      http://www.apache.org/licenses/LICENSE-2.0
9*7e63c127SSorin Basca//
10*7e63c127SSorin Basca// Unless required by applicable law or agreed to in writing, software
11*7e63c127SSorin Basca// distributed under the License is distributed on an "AS IS" BASIS,
12*7e63c127SSorin Basca// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*7e63c127SSorin Basca// See the License for the specific language governing permissions and
14*7e63c127SSorin Basca// limitations under the License.
15*7e63c127SSorin Basca//
16*7e63c127SSorin Basca
17*7e63c127SSorin Basca// Build jacoco-agent from sources for the platform
18*7e63c127SSorin Basca//
19*7e63c127SSorin Basca// Note: this is only intended to be used for the platform development. This is *not* intended
20*7e63c127SSorin Basca// to be used in the SDK where apps can use the official jacoco release.
21*7e63c127SSorin Bascapackage {
22*7e63c127SSorin Basca    default_applicable_licenses: ["external_jacoco_license"],
23*7e63c127SSorin Basca}
24*7e63c127SSorin Basca
25*7e63c127SSorin Basca// Added automatically by a large-scale-change that took the approach of
26*7e63c127SSorin Basca// 'apply every license found to every target'. While this makes sure we respect
27*7e63c127SSorin Basca// every license restriction, it may not be entirely correct.
28*7e63c127SSorin Basca//
29*7e63c127SSorin Basca// e.g. GPL in an MIT project might only apply to the contrib/ directory.
30*7e63c127SSorin Basca//
31*7e63c127SSorin Basca// Please consider splitting the single license below into multiple licenses,
32*7e63c127SSorin Basca// taking care not to lose any license_kind information, and overriding the
33*7e63c127SSorin Basca// default license using the 'licenses: [...]' property on targets as needed.
34*7e63c127SSorin Basca//
35*7e63c127SSorin Basca// For unused files, consider creating a 'fileGroup' with "//visibility:private"
36*7e63c127SSorin Basca// to attach the license to, and including a comment whether the files may be
37*7e63c127SSorin Basca// used in the current project.
38*7e63c127SSorin Basca//
39*7e63c127SSorin Basca// large-scale-change included anything that looked like it might be a license
40*7e63c127SSorin Basca// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
41*7e63c127SSorin Basca//
42*7e63c127SSorin Basca// Please consider removing redundant or irrelevant files from 'license_text:'.
43*7e63c127SSorin Basca// See: http://go/android-license-faq
44*7e63c127SSorin Bascalicense {
45*7e63c127SSorin Basca    name: "external_jacoco_license",
46*7e63c127SSorin Basca    visibility: [":__subpackages__"],
47*7e63c127SSorin Basca    license_kinds: [
48*7e63c127SSorin Basca        "SPDX-license-identifier-Apache-2.0",
49*7e63c127SSorin Basca        "SPDX-license-identifier-BSD",
50*7e63c127SSorin Basca        "SPDX-license-identifier-EPL",
51*7e63c127SSorin Basca        "SPDX-license-identifier-MIT",
52*7e63c127SSorin Basca    ],
53*7e63c127SSorin Basca    license_text: [
54*7e63c127SSorin Basca        "LICENSE.md",
55*7e63c127SSorin Basca        "NOTICE",
56*7e63c127SSorin Basca    ],
57*7e63c127SSorin Basca}
58*7e63c127SSorin Basca
59*7e63c127SSorin Bascajava_library {
60*7e63c127SSorin Basca    name: "jacocoagent",
61*7e63c127SSorin Basca    host_supported: true,
62*7e63c127SSorin Basca    installable: true,
63*7e63c127SSorin Basca    manifest: "org.jacoco.agent/src/MANIFEST.MF",
64*7e63c127SSorin Basca
65*7e63c127SSorin Basca    apex_available: [
66*7e63c127SSorin Basca        "//apex_available:anyapex",
67*7e63c127SSorin Basca        "//apex_available:platform",
68*7e63c127SSorin Basca    ],
69*7e63c127SSorin Basca
70*7e63c127SSorin Basca    srcs: [
71*7e63c127SSorin Basca        "org.jacoco.core/src/**/*.java",
72*7e63c127SSorin Basca        "org.jacoco.agent/src/**/*.java",
73*7e63c127SSorin Basca        "org.jacoco.agent.rt/src/**/*.java",
74*7e63c127SSorin Basca    ],
75*7e63c127SSorin Basca
76*7e63c127SSorin Basca    // Some Jacoco source files depend on classes that do not exist in Android.
77*7e63c127SSorin Basca    // While these classes are not executed at runtime (because we use offline
78*7e63c127SSorin Basca    // instrumentation), they will cause issues when compiling them with ART
79*7e63c127SSorin Basca    // during dex pre-opting. Therefore, it would prevent from applying code
80*7e63c127SSorin Basca    // coverage on classes in the bootclasspath (frameworks, services, ...) or
81*7e63c127SSorin Basca    // system apps.
82*7e63c127SSorin Basca    // Note: we still may need to update the source code to cut dependencies in
83*7e63c127SSorin Basca    // mandatory jacoco classes.
84*7e63c127SSorin Basca    target: {
85*7e63c127SSorin Basca        android: {
86*7e63c127SSorin Basca            exclude_srcs: [
87*7e63c127SSorin Basca                "org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java",
88*7e63c127SSorin Basca                "org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/PreMain.java",
89*7e63c127SSorin Basca                "org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java",
90*7e63c127SSorin Basca                "org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java",
91*7e63c127SSorin Basca            ],
92*7e63c127SSorin Basca        },
93*7e63c127SSorin Basca        host: {
94*7e63c127SSorin Basca            dist: {
95*7e63c127SSorin Basca                targets: [
96*7e63c127SSorin Basca                    "dist_files",
97*7e63c127SSorin Basca                    "apps_only",
98*7e63c127SSorin Basca                ],
99*7e63c127SSorin Basca            },
100*7e63c127SSorin Basca        }
101*7e63c127SSorin Basca    },
102*7e63c127SSorin Basca
103*7e63c127SSorin Basca    // In order to include Jacoco in core libraries, we cannot depend on
104*7e63c127SSorin Basca    // anything in the bootclasspath (or we would create dependency cycle).
105*7e63c127SSorin Basca    // Therefore we compile against the SDK android.jar which gives the same
106*7e63c127SSorin Basca    // APIs Jacoco depends on.
107*7e63c127SSorin Basca    sdk_version: "9",
108*7e63c127SSorin Basca
109*7e63c127SSorin Basca    // TODO(b/69671801): there's no bytecode on the device, so these shouldn't
110*7e63c127SSorin Basca    // be necessary.
111*7e63c127SSorin Basca    static_libs: [
112*7e63c127SSorin Basca        "asm-9.6",
113*7e63c127SSorin Basca        "asm-commons-9.6",
114*7e63c127SSorin Basca        "asm-tree-9.6",
115*7e63c127SSorin Basca    ],
116*7e63c127SSorin Basca    errorprone: {
117*7e63c127SSorin Basca        javacflags: [
118*7e63c127SSorin Basca            "-Xep:EqualsHashCode:WARN",
119*7e63c127SSorin Basca            "-Xep:ReturnValueIgnored:WARN",
120*7e63c127SSorin Basca        ],
121*7e63c127SSorin Basca    },
122*7e63c127SSorin Basca}
123*7e63c127SSorin Basca
124*7e63c127SSorin Basca// Generates stubs containing the classes that will be referenced by instrumented bytecode.
125*7e63c127SSorin Bascadroidstubs {
126*7e63c127SSorin Basca    name: "jacoco-stubs-gen",
127*7e63c127SSorin Basca    srcs: [
128*7e63c127SSorin Basca        "org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java",
129*7e63c127SSorin Basca        "org.jacoco.core/src/org/jacoco/core/data/IExecutionData.java",
130*7e63c127SSorin Basca    ],
131*7e63c127SSorin Basca}
132*7e63c127SSorin Basca
133*7e63c127SSorin Basca// A stubs target containing the parts of JaCoCo that we need to add to the hidden API whitelist.
134*7e63c127SSorin Bascajava_library {
135*7e63c127SSorin Basca    name: "jacoco-stubs",
136*7e63c127SSorin Basca    compile_dex: true,
137*7e63c127SSorin Basca    srcs: [":jacoco-stubs-gen"],
138*7e63c127SSorin Basca}
139*7e63c127SSorin Basca
140*7e63c127SSorin Basca// Build jacoco-cli from sources for the platform
141*7e63c127SSorin Basca
142*7e63c127SSorin Basca// TODO(jeffrygaston) it'd be nice to keep the build process and/or list of source files in sync with
143*7e63c127SSorin Basca// what is defined in the pom.xml files, although it's probably much more trouble than it's worth
144*7e63c127SSorin Bascajava_library_host {
145*7e63c127SSorin Basca    name: "jacoco-cli",
146*7e63c127SSorin Basca
147*7e63c127SSorin Basca    manifest: "org.jacoco.cli/src/MANIFEST.MF",
148*7e63c127SSorin Basca
149*7e63c127SSorin Basca    srcs: [
150*7e63c127SSorin Basca        "org.jacoco.cli/src/**/*.java",
151*7e63c127SSorin Basca    ],
152*7e63c127SSorin Basca
153*7e63c127SSorin Basca    static_libs: [
154*7e63c127SSorin Basca        "jacoco-report",
155*7e63c127SSorin Basca        "jacoco-core",
156*7e63c127SSorin Basca    ],
157*7e63c127SSorin Basca
158*7e63c127SSorin Basca    dist: {
159*7e63c127SSorin Basca        targets: [
160*7e63c127SSorin Basca            "dist_files",
161*7e63c127SSorin Basca            "apps_only",
162*7e63c127SSorin Basca        ],
163*7e63c127SSorin Basca    },
164*7e63c127SSorin Basca
165*7e63c127SSorin Basca    // b/267831518: Pin tradefed and dependencies to Java 11.
166*7e63c127SSorin Basca    java_version: "11",
167*7e63c127SSorin Basca}
168*7e63c127SSorin Basca
169*7e63c127SSorin Bascajava_library_host {
170*7e63c127SSorin Basca    name: "jacoco-core",
171*7e63c127SSorin Basca
172*7e63c127SSorin Basca    srcs: [
173*7e63c127SSorin Basca        "org.jacoco.core/src/**/*.java",
174*7e63c127SSorin Basca    ],
175*7e63c127SSorin Basca
176*7e63c127SSorin Basca    java_resource_dirs: [
177*7e63c127SSorin Basca        "org.jacoco.core/src",
178*7e63c127SSorin Basca    ],
179*7e63c127SSorin Basca
180*7e63c127SSorin Basca    static_libs: [
181*7e63c127SSorin Basca        "asm-9.6",
182*7e63c127SSorin Basca        "asm-commons-9.6",
183*7e63c127SSorin Basca        "asm-tree-9.6",
184*7e63c127SSorin Basca        "args4j-2.0.28",
185*7e63c127SSorin Basca    ],
186*7e63c127SSorin Basca
187*7e63c127SSorin Basca    // b/267831518: Pin tradefed and dependencies to Java 11.
188*7e63c127SSorin Basca    java_version: "11",
189*7e63c127SSorin Basca
190*7e63c127SSorin Basca    errorprone: {
191*7e63c127SSorin Basca        javacflags: [
192*7e63c127SSorin Basca            "-Xep:EqualsHashCode:WARN",
193*7e63c127SSorin Basca            "-Xep:ReturnValueIgnored:WARN",
194*7e63c127SSorin Basca        ],
195*7e63c127SSorin Basca    },
196*7e63c127SSorin Basca}
197*7e63c127SSorin Basca
198*7e63c127SSorin Bascajava_library_host {
199*7e63c127SSorin Basca    name: "jacoco-report",
200*7e63c127SSorin Basca
201*7e63c127SSorin Basca    srcs: [
202*7e63c127SSorin Basca        "org.jacoco.report/src/**/*.java",
203*7e63c127SSorin Basca    ],
204*7e63c127SSorin Basca
205*7e63c127SSorin Basca    // b/267831518: Pin tradefed and dependencies to Java 11.
206*7e63c127SSorin Basca    java_version: "11",
207*7e63c127SSorin Basca
208*7e63c127SSorin Basca    java_resource_dirs: [
209*7e63c127SSorin Basca        "org.jacoco.report/src",
210*7e63c127SSorin Basca    ],
211*7e63c127SSorin Basca
212*7e63c127SSorin Basca    static_libs: [
213*7e63c127SSorin Basca        "jacoco-core",
214*7e63c127SSorin Basca    ],
215*7e63c127SSorin Basca}
216