1*b7c941bbSAndroid Build Coastguard Worker// Copyright (C) 2020 The Android Open Source Project 2*b7c941bbSAndroid Build Coastguard Worker// 3*b7c941bbSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*b7c941bbSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*b7c941bbSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*b7c941bbSAndroid Build Coastguard Worker// 7*b7c941bbSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*b7c941bbSAndroid Build Coastguard Worker// 9*b7c941bbSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*b7c941bbSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*b7c941bbSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*b7c941bbSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*b7c941bbSAndroid Build Coastguard Worker// limitations under the License. 14*b7c941bbSAndroid Build Coastguard Worker 15*b7c941bbSAndroid Build Coastguard Workerpackage { 16*b7c941bbSAndroid Build Coastguard Worker default_applicable_licenses: ["Android-Apache-2.0"], 17*b7c941bbSAndroid Build Coastguard Worker default_team: "trendy_team_native_tools_libraries", 18*b7c941bbSAndroid Build Coastguard Worker} 19*b7c941bbSAndroid Build Coastguard Worker 20*b7c941bbSAndroid Build Coastguard Workerjava_test_host { 21*b7c941bbSAndroid Build Coastguard Worker name: "CtsUsesNativeLibraryTest", 22*b7c941bbSAndroid Build Coastguard Worker defaults: ["cts_defaults"], 23*b7c941bbSAndroid Build Coastguard Worker srcs: ["src/**/*.java"], 24*b7c941bbSAndroid Build Coastguard Worker test_suites: [ 25*b7c941bbSAndroid Build Coastguard Worker "cts", 26*b7c941bbSAndroid Build Coastguard Worker "general-tests", 27*b7c941bbSAndroid Build Coastguard Worker ], 28*b7c941bbSAndroid Build Coastguard Worker libs: [ 29*b7c941bbSAndroid Build Coastguard Worker "cts-tradefed", 30*b7c941bbSAndroid Build Coastguard Worker "tradefed", 31*b7c941bbSAndroid Build Coastguard Worker "compatibility-host-util", 32*b7c941bbSAndroid Build Coastguard Worker ], 33*b7c941bbSAndroid Build Coastguard Worker java_resource_dirs: ["res"], 34*b7c941bbSAndroid Build Coastguard Worker device_common_data: [":CtsUseNativeLibraryBuildPackage"], 35*b7c941bbSAndroid Build Coastguard Worker} 36*b7c941bbSAndroid Build Coastguard Worker 37*b7c941bbSAndroid Build Coastguard Worker// Note that this app is built as a java library. The actual app is built 38*b7c941bbSAndroid Build Coastguard Worker// by the test (CtsUsesNativeLibraryTest) while the test is running. 39*b7c941bbSAndroid Build Coastguard Worker// This java library is appended to the built apk by the test. 40*b7c941bbSAndroid Build Coastguard Workerjava_library { 41*b7c941bbSAndroid Build Coastguard Worker name: "CtsUsesNativeLibraryTestApp", 42*b7c941bbSAndroid Build Coastguard Worker srcs: ["src_target/**/*.java"], 43*b7c941bbSAndroid Build Coastguard Worker static_libs: [ 44*b7c941bbSAndroid Build Coastguard Worker "androidx.test.core", 45*b7c941bbSAndroid Build Coastguard Worker "androidx.test.runner", 46*b7c941bbSAndroid Build Coastguard Worker "androidx.test.rules", 47*b7c941bbSAndroid Build Coastguard Worker "compatibility-device-util-axt", 48*b7c941bbSAndroid Build Coastguard Worker ], 49*b7c941bbSAndroid Build Coastguard Worker sdk_version: "test_current", 50*b7c941bbSAndroid Build Coastguard Worker compile_dex: true, 51*b7c941bbSAndroid Build Coastguard Worker installable: false, 52*b7c941bbSAndroid Build Coastguard Worker visibility: ["//visibility:private"], 53*b7c941bbSAndroid Build Coastguard Worker} 54*b7c941bbSAndroid Build Coastguard Worker 55*b7c941bbSAndroid Build Coastguard Worker// These are collection of tools and libraries that are required to build 56*b7c941bbSAndroid Build Coastguard Worker// an apk by the test. This zip file is extracted by the test and files 57*b7c941bbSAndroid Build Coastguard Worker// in the zip are executed from there. 58*b7c941bbSAndroid Build Coastguard Worker// 59*b7c941bbSAndroid Build Coastguard Worker// There are two tricks used here: 1) host tools such as aapt2 are listed 60*b7c941bbSAndroid Build Coastguard Worker// in the `tools` property although they technically are inputs of the zip, 61*b7c941bbSAndroid Build Coastguard Worker// not the tools for creating the zip. However, since the java test is not 62*b7c941bbSAndroid Build Coastguard Worker// specific to arch, it can't (transitively) depend on arch-specific (x86) 63*b7c941bbSAndroid Build Coastguard Worker// host tools. To work-around the problem, they are listed in the `tools` 64*b7c941bbSAndroid Build Coastguard Worker// property, and then used as inputs in the `cmd`. 65*b7c941bbSAndroid Build Coastguard Worker// 66*b7c941bbSAndroid Build Coastguard Worker// 2) signapk and libconscrypt_openjdk_jni are listed in the `host_required` 67*b7c941bbSAndroid Build Coastguard Worker// property instead of `tools` or `srcs`. This is because those modules are 68*b7c941bbSAndroid Build Coastguard Worker// neither specific to arch (thus can't be in tools), nor provide source (thus 69*b7c941bbSAndroid Build Coastguard Worker// can't be in srcs). To access them, their location in the soong intermediate 70*b7c941bbSAndroid Build Coastguard Worker// directory is manually searched in the cmd, while dependencies to them are 71*b7c941bbSAndroid Build Coastguard Worker// created using the `required` property. 72*b7c941bbSAndroid Build Coastguard Workerjava_genrule { 73*b7c941bbSAndroid Build Coastguard Worker name: "CtsUseNativeLibraryBuildPackage", 74*b7c941bbSAndroid Build Coastguard Worker // srcs, tools, required are all "essentially" inputs of the zip 75*b7c941bbSAndroid Build Coastguard Worker // (except for soong_zip which is actually the tool) 76*b7c941bbSAndroid Build Coastguard Worker srcs: [ 77*b7c941bbSAndroid Build Coastguard Worker ":CtsUsesNativeLibraryTestApp", 78*b7c941bbSAndroid Build Coastguard Worker ":sdk_public_30_android.jar", 79*b7c941bbSAndroid Build Coastguard Worker "testkey.pk8", 80*b7c941bbSAndroid Build Coastguard Worker "testkey.x509.pem", 81*b7c941bbSAndroid Build Coastguard Worker ], 82*b7c941bbSAndroid Build Coastguard Worker tools: [ 83*b7c941bbSAndroid Build Coastguard Worker "aapt2", 84*b7c941bbSAndroid Build Coastguard Worker "soong_zip", 85*b7c941bbSAndroid Build Coastguard Worker "merge_zips", 86*b7c941bbSAndroid Build Coastguard Worker // To make signapk.jar be generated under HOST_SOONG_OUT before this rule runes 87*b7c941bbSAndroid Build Coastguard Worker "signapk", 88*b7c941bbSAndroid Build Coastguard Worker ], 89*b7c941bbSAndroid Build Coastguard Worker host_required: [ 90*b7c941bbSAndroid Build Coastguard Worker "signapk", 91*b7c941bbSAndroid Build Coastguard Worker "libconscrypt_openjdk_jni", 92*b7c941bbSAndroid Build Coastguard Worker ], 93*b7c941bbSAndroid Build Coastguard Worker out: ["CtsUseNativeLibraryBuildPackage.zip"], 94*b7c941bbSAndroid Build Coastguard Worker // Copied from system/apex/apexer/Android.bp 95*b7c941bbSAndroid Build Coastguard Worker cmd: "HOST_OUT_BIN=$$(dirname $(location soong_zip)) && " + 96*b7c941bbSAndroid Build Coastguard Worker "HOST_SOONG_OUT=$$(dirname $$(dirname $$HOST_OUT_BIN)) && " + 97*b7c941bbSAndroid Build Coastguard Worker "SIGNAPK_JAR=$$(find $$HOST_SOONG_OUT -name \"signapk*\") && " + 98*b7c941bbSAndroid Build Coastguard Worker "LIBCONSCRYPT_OPENJDK_JNI=$$(find $$HOST_SOONG_OUT -name \"libconscrypt_openjdk_jni.*\") && " + 99*b7c941bbSAndroid Build Coastguard Worker "rm -rf $(genDir)/content && " + 100*b7c941bbSAndroid Build Coastguard Worker "mkdir -p $(genDir)/content && " + 101*b7c941bbSAndroid Build Coastguard Worker "cp $(location aapt2) $(genDir)/content && " + 102*b7c941bbSAndroid Build Coastguard Worker "cp $(location merge_zips) $(genDir)/content && " + 103*b7c941bbSAndroid Build Coastguard Worker "cp $(location :sdk_public_30_android.jar) $(genDir)/content && " + 104*b7c941bbSAndroid Build Coastguard Worker "cp $(location :CtsUsesNativeLibraryTestApp) $(genDir)/content && " + 105*b7c941bbSAndroid Build Coastguard Worker "cp $(location testkey.pk8) $(genDir)/content && " + 106*b7c941bbSAndroid Build Coastguard Worker "cp $(location testkey.x509.pem) $(genDir)/content && " + 107*b7c941bbSAndroid Build Coastguard Worker "cp $$SIGNAPK_JAR $(genDir)/content && " + 108*b7c941bbSAndroid Build Coastguard Worker "cp $$LIBCONSCRYPT_OPENJDK_JNI $(genDir)/content && " + 109*b7c941bbSAndroid Build Coastguard Worker "$(location soong_zip) -C $(genDir)/content -D $(genDir)/content -o $(out) && " + 110*b7c941bbSAndroid Build Coastguard Worker "rm -rf $(genDir)/content ", 111*b7c941bbSAndroid Build Coastguard Worker visibility: ["//visibility:private"], 112*b7c941bbSAndroid Build Coastguard Worker} 113