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