1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2019 The Android Open Source Project 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage sysprop 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "os" 19*333d2b36SAndroid Build Coastguard Worker "strings" 20*333d2b36SAndroid Build Coastguard Worker "testing" 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 23*333d2b36SAndroid Build Coastguard Worker "android/soong/cc" 24*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 25*333d2b36SAndroid Build Coastguard Worker "android/soong/rust" 26*333d2b36SAndroid Build Coastguard Worker 27*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 28*333d2b36SAndroid Build Coastguard Worker) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) { 31*333d2b36SAndroid Build Coastguard Worker os.Exit(m.Run()) 32*333d2b36SAndroid Build Coastguard Worker} 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Workerfunc test(t *testing.T, bp string) *android.TestResult { 35*333d2b36SAndroid Build Coastguard Worker t.Helper() 36*333d2b36SAndroid Build Coastguard Worker 37*333d2b36SAndroid Build Coastguard Worker bp += ` 38*333d2b36SAndroid Build Coastguard Worker cc_library { 39*333d2b36SAndroid Build Coastguard Worker name: "libbase", 40*333d2b36SAndroid Build Coastguard Worker host_supported: true, 41*333d2b36SAndroid Build Coastguard Worker } 42*333d2b36SAndroid Build Coastguard Worker 43*333d2b36SAndroid Build Coastguard Worker cc_library_headers { 44*333d2b36SAndroid Build Coastguard Worker name: "libbase_headers", 45*333d2b36SAndroid Build Coastguard Worker vendor_available: true, 46*333d2b36SAndroid Build Coastguard Worker product_available: true, 47*333d2b36SAndroid Build Coastguard Worker recovery_available: true, 48*333d2b36SAndroid Build Coastguard Worker } 49*333d2b36SAndroid Build Coastguard Worker 50*333d2b36SAndroid Build Coastguard Worker java_library { 51*333d2b36SAndroid Build Coastguard Worker name: "sysprop-library-stub-platform", 52*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 53*333d2b36SAndroid Build Coastguard Worker } 54*333d2b36SAndroid Build Coastguard Worker 55*333d2b36SAndroid Build Coastguard Worker java_library { 56*333d2b36SAndroid Build Coastguard Worker name: "sysprop-library-stub-vendor", 57*333d2b36SAndroid Build Coastguard Worker soc_specific: true, 58*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 59*333d2b36SAndroid Build Coastguard Worker } 60*333d2b36SAndroid Build Coastguard Worker 61*333d2b36SAndroid Build Coastguard Worker java_library { 62*333d2b36SAndroid Build Coastguard Worker name: "sysprop-library-stub-product", 63*333d2b36SAndroid Build Coastguard Worker product_specific: true, 64*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 65*333d2b36SAndroid Build Coastguard Worker } 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Worker rust_library { 68*333d2b36SAndroid Build Coastguard Worker name: "librustutils", 69*333d2b36SAndroid Build Coastguard Worker crate_name: "rustutils", 70*333d2b36SAndroid Build Coastguard Worker srcs: ["librustutils/lib.rs"], 71*333d2b36SAndroid Build Coastguard Worker product_available: true, 72*333d2b36SAndroid Build Coastguard Worker vendor_available: true, 73*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 74*333d2b36SAndroid Build Coastguard Worker } 75*333d2b36SAndroid Build Coastguard Worker 76*333d2b36SAndroid Build Coastguard Worker rust_library { 77*333d2b36SAndroid Build Coastguard Worker name: "liblog_rust", 78*333d2b36SAndroid Build Coastguard Worker crate_name: "log", 79*333d2b36SAndroid Build Coastguard Worker srcs: ["log/src/lib.rs"], 80*333d2b36SAndroid Build Coastguard Worker product_available: true, 81*333d2b36SAndroid Build Coastguard Worker vendor_available: true, 82*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 83*333d2b36SAndroid Build Coastguard Worker } 84*333d2b36SAndroid Build Coastguard Worker ` 85*333d2b36SAndroid Build Coastguard Worker 86*333d2b36SAndroid Build Coastguard Worker mockFS := android.MockFS{ 87*333d2b36SAndroid Build Coastguard Worker "a.java": nil, 88*333d2b36SAndroid Build Coastguard Worker "b.java": nil, 89*333d2b36SAndroid Build Coastguard Worker "c.java": nil, 90*333d2b36SAndroid Build Coastguard Worker "d.cpp": nil, 91*333d2b36SAndroid Build Coastguard Worker "api/sysprop-platform-current.txt": nil, 92*333d2b36SAndroid Build Coastguard Worker "api/sysprop-platform-latest.txt": nil, 93*333d2b36SAndroid Build Coastguard Worker "api/sysprop-platform-on-product-current.txt": nil, 94*333d2b36SAndroid Build Coastguard Worker "api/sysprop-platform-on-product-latest.txt": nil, 95*333d2b36SAndroid Build Coastguard Worker "api/sysprop-vendor-current.txt": nil, 96*333d2b36SAndroid Build Coastguard Worker "api/sysprop-vendor-latest.txt": nil, 97*333d2b36SAndroid Build Coastguard Worker "api/sysprop-vendor-on-product-current.txt": nil, 98*333d2b36SAndroid Build Coastguard Worker "api/sysprop-vendor-on-product-latest.txt": nil, 99*333d2b36SAndroid Build Coastguard Worker "api/sysprop-odm-current.txt": nil, 100*333d2b36SAndroid Build Coastguard Worker "api/sysprop-odm-latest.txt": nil, 101*333d2b36SAndroid Build Coastguard Worker "framework/aidl/a.aidl": nil, 102*333d2b36SAndroid Build Coastguard Worker 103*333d2b36SAndroid Build Coastguard Worker // For framework-res, which is an implicit dependency for framework 104*333d2b36SAndroid Build Coastguard Worker "AndroidManifest.xml": nil, 105*333d2b36SAndroid Build Coastguard Worker "build/make/target/product/security/testkey": nil, 106*333d2b36SAndroid Build Coastguard Worker 107*333d2b36SAndroid Build Coastguard Worker "build/soong/scripts/jar-wrapper.sh": nil, 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker "jdk8/jre/lib/jce.jar": nil, 110*333d2b36SAndroid Build Coastguard Worker "jdk8/jre/lib/rt.jar": nil, 111*333d2b36SAndroid Build Coastguard Worker "jdk8/lib/tools.jar": nil, 112*333d2b36SAndroid Build Coastguard Worker 113*333d2b36SAndroid Build Coastguard Worker "bar-doc/a.java": nil, 114*333d2b36SAndroid Build Coastguard Worker "bar-doc/b.java": nil, 115*333d2b36SAndroid Build Coastguard Worker "bar-doc/IFoo.aidl": nil, 116*333d2b36SAndroid Build Coastguard Worker "bar-doc/known_oj_tags.txt": nil, 117*333d2b36SAndroid Build Coastguard Worker "external/doclava/templates-sdk": nil, 118*333d2b36SAndroid Build Coastguard Worker 119*333d2b36SAndroid Build Coastguard Worker "cert/new_cert.x509.pem": nil, 120*333d2b36SAndroid Build Coastguard Worker "cert/new_cert.pk8": nil, 121*333d2b36SAndroid Build Coastguard Worker 122*333d2b36SAndroid Build Coastguard Worker "android/sysprop/PlatformProperties.sysprop": nil, 123*333d2b36SAndroid Build Coastguard Worker "com/android/VendorProperties.sysprop": nil, 124*333d2b36SAndroid Build Coastguard Worker "com/android2/OdmProperties.sysprop": nil, 125*333d2b36SAndroid Build Coastguard Worker 126*333d2b36SAndroid Build Coastguard Worker "librustutils/lib.rs": nil, 127*333d2b36SAndroid Build Coastguard Worker "log/src/lib.rs": nil, 128*333d2b36SAndroid Build Coastguard Worker } 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 131*333d2b36SAndroid Build Coastguard Worker cc.PrepareForTestWithCcDefaultModules, 132*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaDefaultModules, 133*333d2b36SAndroid Build Coastguard Worker rust.PrepareForTestWithRustDefaultModules, 134*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithSyspropBuildComponents, 135*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 136*333d2b36SAndroid Build Coastguard Worker variables.DeviceSystemSdkVersions = []string{"28"} 137*333d2b36SAndroid Build Coastguard Worker variables.DeviceCurrentApiLevelForVendorModules = proptools.StringPtr("28") 138*333d2b36SAndroid Build Coastguard Worker }), 139*333d2b36SAndroid Build Coastguard Worker java.FixtureWithPrebuiltApis(map[string][]string{ 140*333d2b36SAndroid Build Coastguard Worker "28": {}, 141*333d2b36SAndroid Build Coastguard Worker "29": {}, 142*333d2b36SAndroid Build Coastguard Worker "30": {}, 143*333d2b36SAndroid Build Coastguard Worker }), 144*333d2b36SAndroid Build Coastguard Worker mockFS.AddToFixture(), 145*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(bp), 146*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 147*333d2b36SAndroid Build Coastguard Worker 148*333d2b36SAndroid Build Coastguard Worker return result 149*333d2b36SAndroid Build Coastguard Worker} 150*333d2b36SAndroid Build Coastguard Worker 151*333d2b36SAndroid Build Coastguard Workerfunc TestSyspropLibrary(t *testing.T) { 152*333d2b36SAndroid Build Coastguard Worker result := test(t, ` 153*333d2b36SAndroid Build Coastguard Worker sysprop_library { 154*333d2b36SAndroid Build Coastguard Worker name: "sysprop-platform", 155*333d2b36SAndroid Build Coastguard Worker apex_available: ["//apex_available:platform"], 156*333d2b36SAndroid Build Coastguard Worker srcs: ["android/sysprop/PlatformProperties.sysprop"], 157*333d2b36SAndroid Build Coastguard Worker api_packages: ["android.sysprop"], 158*333d2b36SAndroid Build Coastguard Worker property_owner: "Platform", 159*333d2b36SAndroid Build Coastguard Worker vendor_available: true, 160*333d2b36SAndroid Build Coastguard Worker host_supported: true, 161*333d2b36SAndroid Build Coastguard Worker } 162*333d2b36SAndroid Build Coastguard Worker 163*333d2b36SAndroid Build Coastguard Worker sysprop_library { 164*333d2b36SAndroid Build Coastguard Worker name: "sysprop-platform-on-product", 165*333d2b36SAndroid Build Coastguard Worker srcs: ["android/sysprop/PlatformProperties.sysprop"], 166*333d2b36SAndroid Build Coastguard Worker api_packages: ["android.sysprop"], 167*333d2b36SAndroid Build Coastguard Worker property_owner: "Platform", 168*333d2b36SAndroid Build Coastguard Worker product_specific: true, 169*333d2b36SAndroid Build Coastguard Worker } 170*333d2b36SAndroid Build Coastguard Worker 171*333d2b36SAndroid Build Coastguard Worker sysprop_library { 172*333d2b36SAndroid Build Coastguard Worker name: "sysprop-vendor", 173*333d2b36SAndroid Build Coastguard Worker srcs: ["com/android/VendorProperties.sysprop"], 174*333d2b36SAndroid Build Coastguard Worker api_packages: ["com.android"], 175*333d2b36SAndroid Build Coastguard Worker property_owner: "Vendor", 176*333d2b36SAndroid Build Coastguard Worker vendor: true, 177*333d2b36SAndroid Build Coastguard Worker } 178*333d2b36SAndroid Build Coastguard Worker 179*333d2b36SAndroid Build Coastguard Worker sysprop_library { 180*333d2b36SAndroid Build Coastguard Worker name: "sysprop-vendor-on-product", 181*333d2b36SAndroid Build Coastguard Worker srcs: ["com/android/VendorProperties.sysprop"], 182*333d2b36SAndroid Build Coastguard Worker api_packages: ["com.android"], 183*333d2b36SAndroid Build Coastguard Worker property_owner: "Vendor", 184*333d2b36SAndroid Build Coastguard Worker product_specific: true, 185*333d2b36SAndroid Build Coastguard Worker } 186*333d2b36SAndroid Build Coastguard Worker 187*333d2b36SAndroid Build Coastguard Worker sysprop_library { 188*333d2b36SAndroid Build Coastguard Worker name: "sysprop-odm", 189*333d2b36SAndroid Build Coastguard Worker srcs: ["com/android2/OdmProperties.sysprop"], 190*333d2b36SAndroid Build Coastguard Worker api_packages: ["com.android2"], 191*333d2b36SAndroid Build Coastguard Worker property_owner: "Odm", 192*333d2b36SAndroid Build Coastguard Worker device_specific: true, 193*333d2b36SAndroid Build Coastguard Worker } 194*333d2b36SAndroid Build Coastguard Worker 195*333d2b36SAndroid Build Coastguard Worker java_library { 196*333d2b36SAndroid Build Coastguard Worker name: "java-platform", 197*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 198*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 199*333d2b36SAndroid Build Coastguard Worker libs: ["sysprop-platform"], 200*333d2b36SAndroid Build Coastguard Worker } 201*333d2b36SAndroid Build Coastguard Worker 202*333d2b36SAndroid Build Coastguard Worker java_library { 203*333d2b36SAndroid Build Coastguard Worker name: "java-platform-private", 204*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 205*333d2b36SAndroid Build Coastguard Worker platform_apis: true, 206*333d2b36SAndroid Build Coastguard Worker libs: ["sysprop-platform"], 207*333d2b36SAndroid Build Coastguard Worker } 208*333d2b36SAndroid Build Coastguard Worker 209*333d2b36SAndroid Build Coastguard Worker java_library { 210*333d2b36SAndroid Build Coastguard Worker name: "java-product", 211*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 212*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 213*333d2b36SAndroid Build Coastguard Worker product_specific: true, 214*333d2b36SAndroid Build Coastguard Worker libs: ["sysprop-platform", "sysprop-vendor-on-product"], 215*333d2b36SAndroid Build Coastguard Worker } 216*333d2b36SAndroid Build Coastguard Worker 217*333d2b36SAndroid Build Coastguard Worker java_library { 218*333d2b36SAndroid Build Coastguard Worker name: "java-vendor", 219*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 220*333d2b36SAndroid Build Coastguard Worker sdk_version: "system_current", 221*333d2b36SAndroid Build Coastguard Worker soc_specific: true, 222*333d2b36SAndroid Build Coastguard Worker libs: ["sysprop-platform", "sysprop-vendor"], 223*333d2b36SAndroid Build Coastguard Worker } 224*333d2b36SAndroid Build Coastguard Worker 225*333d2b36SAndroid Build Coastguard Worker cc_library { 226*333d2b36SAndroid Build Coastguard Worker name: "cc-client-platform", 227*333d2b36SAndroid Build Coastguard Worker srcs: ["d.cpp"], 228*333d2b36SAndroid Build Coastguard Worker static_libs: ["libsysprop-platform"], 229*333d2b36SAndroid Build Coastguard Worker } 230*333d2b36SAndroid Build Coastguard Worker 231*333d2b36SAndroid Build Coastguard Worker cc_library_static { 232*333d2b36SAndroid Build Coastguard Worker name: "cc-client-platform-static", 233*333d2b36SAndroid Build Coastguard Worker srcs: ["d.cpp"], 234*333d2b36SAndroid Build Coastguard Worker whole_static_libs: ["libsysprop-platform"], 235*333d2b36SAndroid Build Coastguard Worker } 236*333d2b36SAndroid Build Coastguard Worker 237*333d2b36SAndroid Build Coastguard Worker cc_library { 238*333d2b36SAndroid Build Coastguard Worker name: "cc-client-product", 239*333d2b36SAndroid Build Coastguard Worker srcs: ["d.cpp"], 240*333d2b36SAndroid Build Coastguard Worker product_specific: true, 241*333d2b36SAndroid Build Coastguard Worker static_libs: ["libsysprop-platform-on-product", "libsysprop-vendor-on-product"], 242*333d2b36SAndroid Build Coastguard Worker } 243*333d2b36SAndroid Build Coastguard Worker 244*333d2b36SAndroid Build Coastguard Worker cc_library { 245*333d2b36SAndroid Build Coastguard Worker name: "cc-client-vendor", 246*333d2b36SAndroid Build Coastguard Worker srcs: ["d.cpp"], 247*333d2b36SAndroid Build Coastguard Worker soc_specific: true, 248*333d2b36SAndroid Build Coastguard Worker static_libs: ["libsysprop-platform", "libsysprop-vendor"], 249*333d2b36SAndroid Build Coastguard Worker } 250*333d2b36SAndroid Build Coastguard Worker 251*333d2b36SAndroid Build Coastguard Worker cc_binary_host { 252*333d2b36SAndroid Build Coastguard Worker name: "hostbin", 253*333d2b36SAndroid Build Coastguard Worker static_libs: ["libsysprop-platform"], 254*333d2b36SAndroid Build Coastguard Worker } 255*333d2b36SAndroid Build Coastguard Worker `) 256*333d2b36SAndroid Build Coastguard Worker 257*333d2b36SAndroid Build Coastguard Worker // Check for generated cc_library 258*333d2b36SAndroid Build Coastguard Worker for _, variant := range []string{ 259*333d2b36SAndroid Build Coastguard Worker "android_vendor_arm_armv7-a-neon_shared", 260*333d2b36SAndroid Build Coastguard Worker "android_vendor_arm_armv7-a-neon_static", 261*333d2b36SAndroid Build Coastguard Worker "android_vendor_arm64_armv8-a_shared", 262*333d2b36SAndroid Build Coastguard Worker "android_vendor_arm64_armv8-a_static", 263*333d2b36SAndroid Build Coastguard Worker } { 264*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("libsysprop-platform", variant) 265*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("libsysprop-vendor", variant) 266*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("libsysprop-odm", variant) 267*333d2b36SAndroid Build Coastguard Worker } 268*333d2b36SAndroid Build Coastguard Worker 269*333d2b36SAndroid Build Coastguard Worker // product variant of vendor-owned sysprop_library 270*333d2b36SAndroid Build Coastguard Worker for _, variant := range []string{ 271*333d2b36SAndroid Build Coastguard Worker "android_product_arm_armv7-a-neon_shared", 272*333d2b36SAndroid Build Coastguard Worker "android_product_arm_armv7-a-neon_static", 273*333d2b36SAndroid Build Coastguard Worker "android_product_arm64_armv8-a_shared", 274*333d2b36SAndroid Build Coastguard Worker "android_product_arm64_armv8-a_static", 275*333d2b36SAndroid Build Coastguard Worker } { 276*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("libsysprop-vendor-on-product", variant) 277*333d2b36SAndroid Build Coastguard Worker } 278*333d2b36SAndroid Build Coastguard Worker 279*333d2b36SAndroid Build Coastguard Worker for _, variant := range []string{ 280*333d2b36SAndroid Build Coastguard Worker "android_arm_armv7-a-neon_shared", 281*333d2b36SAndroid Build Coastguard Worker "android_arm_armv7-a-neon_static", 282*333d2b36SAndroid Build Coastguard Worker "android_arm64_armv8-a_shared", 283*333d2b36SAndroid Build Coastguard Worker "android_arm64_armv8-a_static", 284*333d2b36SAndroid Build Coastguard Worker } { 285*333d2b36SAndroid Build Coastguard Worker library := result.ModuleForTests("libsysprop-platform", variant).Module().(*cc.Module) 286*333d2b36SAndroid Build Coastguard Worker expectedApexAvailableOnLibrary := []string{"//apex_available:platform"} 287*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "apex available property on libsysprop-platform", expectedApexAvailableOnLibrary, library.ApexProperties.Apex_available) 288*333d2b36SAndroid Build Coastguard Worker } 289*333d2b36SAndroid Build Coastguard Worker 290*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("sysprop-platform", "android_common") 291*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("sysprop-platform_public", "android_common") 292*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("sysprop-vendor", "android_common") 293*333d2b36SAndroid Build Coastguard Worker result.ModuleForTests("sysprop-vendor-on-product", "android_common") 294*333d2b36SAndroid Build Coastguard Worker 295*333d2b36SAndroid Build Coastguard Worker // Check for exported includes 296*333d2b36SAndroid Build Coastguard Worker coreVariant := "android_arm64_armv8-a_static" 297*333d2b36SAndroid Build Coastguard Worker vendorVariant := "android_vendor_arm64_armv8-a_static" 298*333d2b36SAndroid Build Coastguard Worker productVariant := "android_product_arm64_armv8-a_static" 299*333d2b36SAndroid Build Coastguard Worker 300*333d2b36SAndroid Build Coastguard Worker platformInternalPath := "libsysprop-platform/android_arm64_armv8-a_static/gen/sysprop/include" 301*333d2b36SAndroid Build Coastguard Worker platformPublicVendorPath := "libsysprop-platform/android_vendor_arm64_armv8-a_static/gen/sysprop/public/include" 302*333d2b36SAndroid Build Coastguard Worker 303*333d2b36SAndroid Build Coastguard Worker platformOnProductPath := "libsysprop-platform-on-product/android_product_arm64_armv8-a_static/gen/sysprop/public/include" 304*333d2b36SAndroid Build Coastguard Worker 305*333d2b36SAndroid Build Coastguard Worker vendorInternalPath := "libsysprop-vendor/android_vendor_arm64_armv8-a_static/gen/sysprop/include" 306*333d2b36SAndroid Build Coastguard Worker vendorOnProductPath := "libsysprop-vendor-on-product/android_product_arm64_armv8-a_static/gen/sysprop/public/include" 307*333d2b36SAndroid Build Coastguard Worker 308*333d2b36SAndroid Build Coastguard Worker platformClient := result.ModuleForTests("cc-client-platform", coreVariant) 309*333d2b36SAndroid Build Coastguard Worker platformFlags := platformClient.Rule("cc").Args["cFlags"] 310*333d2b36SAndroid Build Coastguard Worker 311*333d2b36SAndroid Build Coastguard Worker // platform should use platform's internal header 312*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "flags for platform", platformFlags, platformInternalPath) 313*333d2b36SAndroid Build Coastguard Worker 314*333d2b36SAndroid Build Coastguard Worker platformStaticClient := result.ModuleForTests("cc-client-platform-static", coreVariant) 315*333d2b36SAndroid Build Coastguard Worker platformStaticFlags := platformStaticClient.Rule("cc").Args["cFlags"] 316*333d2b36SAndroid Build Coastguard Worker 317*333d2b36SAndroid Build Coastguard Worker // platform-static should use platform's internal header 318*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "flags for platform-static", platformStaticFlags, platformInternalPath) 319*333d2b36SAndroid Build Coastguard Worker 320*333d2b36SAndroid Build Coastguard Worker productClient := result.ModuleForTests("cc-client-product", productVariant) 321*333d2b36SAndroid Build Coastguard Worker productFlags := productClient.Rule("cc").Args["cFlags"] 322*333d2b36SAndroid Build Coastguard Worker 323*333d2b36SAndroid Build Coastguard Worker // Product should use platform's and vendor's public headers 324*333d2b36SAndroid Build Coastguard Worker if !strings.Contains(productFlags, platformOnProductPath) || 325*333d2b36SAndroid Build Coastguard Worker !strings.Contains(productFlags, vendorOnProductPath) { 326*333d2b36SAndroid Build Coastguard Worker t.Errorf("flags for product must contain %#v and %#v, but was %#v.", 327*333d2b36SAndroid Build Coastguard Worker platformOnProductPath, vendorOnProductPath, productFlags) 328*333d2b36SAndroid Build Coastguard Worker } 329*333d2b36SAndroid Build Coastguard Worker 330*333d2b36SAndroid Build Coastguard Worker vendorClient := result.ModuleForTests("cc-client-vendor", vendorVariant) 331*333d2b36SAndroid Build Coastguard Worker vendorFlags := vendorClient.Rule("cc").Args["cFlags"] 332*333d2b36SAndroid Build Coastguard Worker 333*333d2b36SAndroid Build Coastguard Worker // Vendor should use platform's public header and vendor's internal header 334*333d2b36SAndroid Build Coastguard Worker if !strings.Contains(vendorFlags, platformPublicVendorPath) || 335*333d2b36SAndroid Build Coastguard Worker !strings.Contains(vendorFlags, vendorInternalPath) { 336*333d2b36SAndroid Build Coastguard Worker t.Errorf("flags for vendor must contain %#v and %#v, but was %#v.", 337*333d2b36SAndroid Build Coastguard Worker platformPublicVendorPath, vendorInternalPath, vendorFlags) 338*333d2b36SAndroid Build Coastguard Worker } 339*333d2b36SAndroid Build Coastguard Worker 340*333d2b36SAndroid Build Coastguard Worker // Java modules linking against system API should use public stub 341*333d2b36SAndroid Build Coastguard Worker javaSystemApiClient := result.ModuleForTests("java-platform", "android_common").Rule("javac") 342*333d2b36SAndroid Build Coastguard Worker syspropPlatformPublic := result.ModuleForTests("sysprop-platform_public", "android_common").Description("for turbine") 343*333d2b36SAndroid Build Coastguard Worker if g, w := javaSystemApiClient.Implicits.Strings(), syspropPlatformPublic.Output.String(); !android.InList(w, g) { 344*333d2b36SAndroid Build Coastguard Worker t.Errorf("system api client should use public stub %q, got %q", w, g) 345*333d2b36SAndroid Build Coastguard Worker } 346*333d2b36SAndroid Build Coastguard Worker} 347*333d2b36SAndroid Build Coastguard Worker 348*333d2b36SAndroid Build Coastguard Workerfunc TestApexAvailabilityIsForwarded(t *testing.T) { 349*333d2b36SAndroid Build Coastguard Worker result := test(t, ` 350*333d2b36SAndroid Build Coastguard Worker sysprop_library { 351*333d2b36SAndroid Build Coastguard Worker name: "sysprop-platform", 352*333d2b36SAndroid Build Coastguard Worker apex_available: ["//apex_available:platform"], 353*333d2b36SAndroid Build Coastguard Worker srcs: ["android/sysprop/PlatformProperties.sysprop"], 354*333d2b36SAndroid Build Coastguard Worker api_packages: ["android.sysprop"], 355*333d2b36SAndroid Build Coastguard Worker property_owner: "Platform", 356*333d2b36SAndroid Build Coastguard Worker } 357*333d2b36SAndroid Build Coastguard Worker `) 358*333d2b36SAndroid Build Coastguard Worker 359*333d2b36SAndroid Build Coastguard Worker expected := []string{"//apex_available:platform"} 360*333d2b36SAndroid Build Coastguard Worker 361*333d2b36SAndroid Build Coastguard Worker ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module) 362*333d2b36SAndroid Build Coastguard Worker propFromCc := ccModule.ApexProperties.Apex_available 363*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "apex_available forwarding to cc module", expected, propFromCc) 364*333d2b36SAndroid Build Coastguard Worker 365*333d2b36SAndroid Build Coastguard Worker javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library) 366*333d2b36SAndroid Build Coastguard Worker propFromJava := javaModule.ApexProperties.Apex_available 367*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "apex_available forwarding to java module", expected, propFromJava) 368*333d2b36SAndroid Build Coastguard Worker 369*333d2b36SAndroid Build Coastguard Worker rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module) 370*333d2b36SAndroid Build Coastguard Worker propFromRust := rustModule.ApexProperties.Apex_available 371*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "apex_available forwarding to rust module", expected, propFromRust) 372*333d2b36SAndroid Build Coastguard Worker} 373*333d2b36SAndroid Build Coastguard Worker 374*333d2b36SAndroid Build Coastguard Workerfunc TestMinSdkVersionIsForwarded(t *testing.T) { 375*333d2b36SAndroid Build Coastguard Worker result := test(t, ` 376*333d2b36SAndroid Build Coastguard Worker sysprop_library { 377*333d2b36SAndroid Build Coastguard Worker name: "sysprop-platform", 378*333d2b36SAndroid Build Coastguard Worker srcs: ["android/sysprop/PlatformProperties.sysprop"], 379*333d2b36SAndroid Build Coastguard Worker api_packages: ["android.sysprop"], 380*333d2b36SAndroid Build Coastguard Worker property_owner: "Platform", 381*333d2b36SAndroid Build Coastguard Worker cpp: { 382*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 383*333d2b36SAndroid Build Coastguard Worker }, 384*333d2b36SAndroid Build Coastguard Worker java: { 385*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 386*333d2b36SAndroid Build Coastguard Worker }, 387*333d2b36SAndroid Build Coastguard Worker rust: { 388*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 389*333d2b36SAndroid Build Coastguard Worker } 390*333d2b36SAndroid Build Coastguard Worker } 391*333d2b36SAndroid Build Coastguard Worker `) 392*333d2b36SAndroid Build Coastguard Worker 393*333d2b36SAndroid Build Coastguard Worker ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module) 394*333d2b36SAndroid Build Coastguard Worker propFromCc := proptools.String(ccModule.Properties.Min_sdk_version) 395*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "min_sdk_version forwarding to cc module", "29", propFromCc) 396*333d2b36SAndroid Build Coastguard Worker 397*333d2b36SAndroid Build Coastguard Worker javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library) 398*333d2b36SAndroid Build Coastguard Worker propFromJava := javaModule.MinSdkVersionString() 399*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "min_sdk_version forwarding to java module", "30", propFromJava) 400*333d2b36SAndroid Build Coastguard Worker 401*333d2b36SAndroid Build Coastguard Worker rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module) 402*333d2b36SAndroid Build Coastguard Worker propFromRust := proptools.String(rustModule.Properties.Min_sdk_version) 403*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "min_sdk_version forwarding to rust module", "29", propFromRust) 404*333d2b36SAndroid Build Coastguard Worker} 405