xref: /aosp_15_r20/cts/hostsidetests/library/Android.bp (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
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