Merge "Allowlist mainline_modules_sdks_test" into main
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index 8e14a71..cc428e9 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -203,6 +203,7 @@
"external/pcre": Bp2BuildDefaultTrueRecursively,
"external/perfmark/api": Bp2BuildDefaultTrueRecursively,
"external/protobuf": Bp2BuildDefaultTrueRecursively,
+ "external/python/pyfakefs/pyfakefs": Bp2BuildDefaultTrueRecursively,
"external/python/pyyaml/lib/yaml": Bp2BuildDefaultTrueRecursively,
"external/python/six": Bp2BuildDefaultTrueRecursively,
"external/python/jinja/src": Bp2BuildDefaultTrueRecursively,
diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go
index 9cb9443..c88af1b 100644
--- a/bp2build/java_library_conversion_test.go
+++ b/bp2build/java_library_conversion_test.go
@@ -192,6 +192,45 @@
})
}
+func TestJavaLibraryOpenjdk9(t *testing.T) {
+ runJavaLibraryTestCase(t, Bp2buildTestCase{
+ Blueprint: `java_library {
+ name: "java-lib-1",
+ srcs: ["a.java"],
+ exclude_srcs: ["b.java"],
+ javacflags: ["flag"],
+ target: {
+ android: {
+ srcs: ["android.java"],
+ },
+ },
+ openjdk9: {
+ srcs: ["b.java", "foo.java"],
+ javacflags: ["extraflag"],
+ },
+ sdk_version: "current",
+}`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
+ "srcs": `[
+ "a.java",
+ "foo.java",
+ ] + select({
+ "//build/bazel_common_rules/platforms/os:android": ["android.java"],
+ "//conditions:default": [],
+ })`,
+ "sdk_version": `"current"`,
+ "javacopts": `[
+ "flag",
+ "extraflag",
+ ]`,
+ }),
+ MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
+ },
+ })
+
+}
+
func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
StubbedBuildDefinitions: []string{"plugin2"},
@@ -424,6 +463,7 @@
},
Blueprint: `java_library {
name: "java-lib-1",
+ srcs: ["foo.java"],
java_resource_dirs: ["res", "res1"],
sdk_version: "current",
}`,
@@ -433,9 +473,10 @@
"resources": `["res1/b.res"]`,
}),
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "additional_resources": `["java-lib-1_resource_dir_res1"]`,
+ "deps": `["java-lib-1_resource_dir_res1"]`,
"resources": `["res/a.res"]`,
"resource_strip_prefix": `"res"`,
+ "srcs": `["foo.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
@@ -453,6 +494,7 @@
java_resources: ["res1", "res2"],
java_resource_dirs: ["resdir"],
sdk_version: "current",
+ srcs: ["foo.java"],
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_resources", "java-lib-1_resource_dir_resdir", AttrNameToString{
@@ -460,12 +502,13 @@
"resources": `["resdir/a.res"]`,
}),
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
- "additional_resources": `["java-lib-1_resource_dir_resdir"]`,
+ "deps": `["java-lib-1_resource_dir_resdir"]`,
"resource_strip_prefix": `"."`,
"resources": `[
"res1",
"res2",
]`,
+ "srcs": `["foo.java"]`,
"sdk_version": `"current"`,
}),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
@@ -1025,7 +1068,7 @@
"srcs": `["a.java"]`,
"resources": `["a.res"]`,
"resource_strip_prefix": `"."`,
- "additional_resources": `[
+ "deps": `[
"java-lib-1_filegroup_resources_filegroup1",
"java-lib-1_filegroup_resources_filegroup2",
]`,
diff --git a/bp2build/prebuilt_etc_conversion_test.go b/bp2build/prebuilt_etc_conversion_test.go
index 1f37270..c8cfd87 100644
--- a/bp2build/prebuilt_etc_conversion_test.go
+++ b/bp2build/prebuilt_etc_conversion_test.go
@@ -26,10 +26,17 @@
t.Helper()
(&tc).ModuleTypeUnderTest = "prebuilt_etc"
(&tc).ModuleTypeUnderTestFactory = etc.PrebuiltEtcFactory
- RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
+ RunBp2BuildTestCase(t, registerPrebuiltModuleTypes, tc)
}
-func registerPrebuiltEtcModuleTypes(ctx android.RegistrationContext) {
+func runPrebuiltRootHostTestCase(t *testing.T, tc Bp2buildTestCase) {
+ t.Helper()
+ (&tc).ModuleTypeUnderTest = "prebuilt_root_host"
+ (&tc).ModuleTypeUnderTestFactory = etc.PrebuiltRootHostFactory
+ RunBp2BuildTestCase(t, registerPrebuiltModuleTypes, tc)
+}
+
+func registerPrebuiltModuleTypes(ctx android.RegistrationContext) {
}
func TestPrebuiltEtcSimple(t *testing.T) {
@@ -160,7 +167,7 @@
t.Helper()
(&tc).ModuleTypeUnderTest = "prebuilt_usr_share"
(&tc).ModuleTypeUnderTestFactory = etc.PrebuiltUserShareFactory
- RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
+ RunBp2BuildTestCase(t, registerPrebuiltModuleTypes, tc)
}
func registerPrebuiltUsrShareModuleTypes(ctx android.RegistrationContext) {
@@ -360,3 +367,30 @@
ExpectedBazelTargets: []string{},
})
}
+
+func TestPrebuiltRootHostWithWildCardInSrc(t *testing.T) {
+ runPrebuiltRootHostTestCase(t, Bp2buildTestCase{
+ Description: "prebuilt_root_host - src string has wild card",
+ Filesystem: map[string]string{
+ "prh.dat": "",
+ },
+ Blueprint: `
+prebuilt_root_host {
+ name: "prh_test",
+ src: "*.dat",
+ filename_from_src: true,
+ relative_install_path: "test/install/path",
+ bazel_module: { bp2build_available: true },
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("prebuilt_file", "prh_test", AttrNameToString{
+ "filename": `"prh.dat"`,
+ "src": `"prh.dat"`,
+ "dir": `"./test/install/path"`,
+ "target_compatible_with": `select({
+ "//build/bazel_common_rules/platforms/os:android": ["@platforms//:incompatible"],
+ "//conditions:default": [],
+ })`,
+ })}})
+}
diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go
index 9423531..ca28442 100644
--- a/etc/prebuilt_etc.go
+++ b/etc/prebuilt_etc.go
@@ -508,6 +508,7 @@
// This module is host-only
android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
android.InitDefaultableModule(module)
+ android.InitBazelModule(module)
return module
}
@@ -759,7 +760,7 @@
filename = *moduleProps.Filename
} else if moduleProps.Filename_from_src != nil && *moduleProps.Filename_from_src {
if moduleProps.Src != nil {
- filename = *moduleProps.Src
+ filename = android.BazelLabelForModuleSrcSingle(ctx, *moduleProps.Src).Label
}
filenameFromSrc = true
} else {
@@ -767,8 +768,8 @@
}
var dir = module.installDirBase
- if subDir := module.subdirProperties.Sub_dir; subDir != nil {
- dir = dir + "/" + *subDir
+ if module.SubDir() != "" {
+ dir = dir + "/" + module.SubDir()
}
var installable bazel.BoolAttribute
@@ -796,8 +797,9 @@
// which we treat as *PrebuiltFile*
func (module *PrebuiltEtc) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
var dir = module.installDirBase
- // prebuilt_file supports only `etc` or `usr/share`
- if !(dir == "etc" || dir == "usr/share") {
+ // prebuilt_file only supports "etc" or "usr/share" or "." as module installDirBase
+ if !(dir == "etc" || dir == "usr/share" || dir == ".") {
+ ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_TYPE_UNSUPPORTED, "")
return
}
diff --git a/genrule/allowlists.go b/genrule/allowlists.go
index 8c78528..8552173 100644
--- a/genrule/allowlists.go
+++ b/genrule/allowlists.go
@@ -58,6 +58,7 @@
"BlueberryFacadeGeneratedStub_h",
"BluetoothGeneratedDumpsysBinarySchema_bfbs",
"BluetoothGeneratedDumpsysDataSchema_h",
+ "CompilationTestCases_package-dex-usage",
"ControlEnvProxyServerProto_cc",
"ControlEnvProxyServerProto_h",
"CtsApkVerityTestDebugFiles",
diff --git a/java/base.go b/java/base.go
index 03198b5..53f22a7 100644
--- a/java/base.go
+++ b/java/base.go
@@ -1024,7 +1024,12 @@
if flags.javaVersion.usesJavaModules() {
javacFlags = append(javacFlags, j.properties.Openjdk9.Javacflags...)
+ } else if len(j.properties.Openjdk9.Javacflags) > 0 {
+ // java version defaults higher than openjdk 9, these conditionals should no longer be necessary
+ ctx.PropertyErrorf("openjdk9.javacflags", "JDK version defaults to higher than 9")
+ }
+ if flags.javaVersion.usesJavaModules() {
if j.properties.Patch_module != nil {
// Manually specify build directory in case it is not under the repo root.
// (javac doesn't seem to expand into symbolic links when searching for patch-module targets, so
@@ -1101,6 +1106,9 @@
if flags.javaVersion.usesJavaModules() {
j.properties.Srcs = append(j.properties.Srcs, j.properties.Openjdk9.Srcs...)
+ } else if len(j.properties.Openjdk9.Javacflags) > 0 {
+ // java version defaults higher than openjdk 9, these conditionals should no longer be necessary
+ ctx.PropertyErrorf("openjdk9.srcs", "JDK version defaults to higher than 9")
}
srcFiles := android.PathsForModuleSrcExcludes(ctx, j.properties.Srcs, j.properties.Exclude_srcs)
diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go
index 888caad..828de21 100644
--- a/java/bootclasspath_fragment_test.go
+++ b/java/bootclasspath_fragment_test.go
@@ -316,6 +316,60 @@
android.AssertPathsRelativeToTopEquals(t, "widest dex stubs jar", expectedWidestPaths, info.TransitiveStubDexJarsByScope.StubDexJarsForWidestAPIScope())
}
+func TestFromTextWidestApiScope(t *testing.T) {
+ result := android.GroupFixturePreparers(
+ prepareForTestWithBootclasspathFragment,
+ PrepareForTestWithJavaSdkLibraryFiles,
+ android.FixtureModifyConfig(func(config android.Config) {
+ config.SetBuildFromTextStub(true)
+ }),
+ FixtureWithLastReleaseApis("mysdklibrary", "android-non-updatable"),
+ FixtureConfigureApexBootJars("someapex:mysdklibrary"),
+ ).RunTestWithBp(t, `
+ bootclasspath_fragment {
+ name: "myfragment",
+ contents: ["mysdklibrary"],
+ additional_stubs: [
+ "android-non-updatable",
+ ],
+ hidden_api: {
+ split_packages: ["*"],
+ },
+ }
+ java_sdk_library {
+ name: "mysdklibrary",
+ srcs: ["a.java"],
+ shared_library: false,
+ public: {enabled: true},
+ system: {enabled: true},
+ }
+ java_sdk_library {
+ name: "android-non-updatable",
+ srcs: ["b.java"],
+ compile_dex: true,
+ public: {
+ enabled: true,
+ },
+ system: {
+ enabled: true,
+ },
+ test: {
+ enabled: true,
+ },
+ module_lib: {
+ enabled: true,
+ },
+ }
+ `)
+
+ fragment := result.ModuleForTests("myfragment", "android_common")
+ dependencyStubDexFlag := "--dependency-stub-dex=out/soong/.intermediates/default/java/android-non-updatable.stubs.test_module_lib/android_common/dex/android-non-updatable.stubs.test_module_lib.jar"
+ stubFlagsCommand := fragment.Output("modular-hiddenapi/stub-flags.csv").RuleParams.Command
+ android.AssertStringDoesContain(t,
+ "Stub flags generating command does not include the expected dependency stub dex file",
+ stubFlagsCommand, dependencyStubDexFlag)
+}
+
func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForTestWithBootclasspathFragment,
diff --git a/java/hiddenapi_modular.go b/java/hiddenapi_modular.go
index f31f5d1..81be33d 100644
--- a/java/hiddenapi_modular.go
+++ b/java/hiddenapi_modular.go
@@ -38,10 +38,14 @@
// The option needed to passed to "hiddenapi list".
hiddenAPIListOption string
- // The name sof the source stub library modules that contain the API provided by the platform,
+ // The names of the source stub library modules that contain the API provided by the platform,
// i.e. by modules that are not in an APEX.
nonUpdatableSourceModule string
+ // The names of from-text stub library modules that contain the API provided by the platform,
+ // i.e. by modules that are not in an APEX.
+ nonUpdatableFromTextModule string
+
// The names of the prebuilt stub library modules that contain the API provided by the platform,
// i.e. by modules that are not in an APEX.
nonUpdatablePrebuiltModule string
@@ -86,6 +90,9 @@
if ctx.Config().AlwaysUsePrebuiltSdks() {
return l.nonUpdatablePrebuiltModule
} else {
+ if l.nonUpdatableFromTextModule != "" && ctx.Config().BuildFromTextStub() {
+ return l.nonUpdatableFromTextModule
+ }
return l.nonUpdatableSourceModule
}
} else {
@@ -117,8 +124,9 @@
hiddenAPIListOption: "--test-stub-classpath",
})
ModuleLibHiddenAPIScope = initHiddenAPIScope(&HiddenAPIScope{
- name: "module-lib",
- sdkKind: android.SdkModule,
+ name: "module-lib",
+ sdkKind: android.SdkModule,
+ nonUpdatableFromTextModule: "android-non-updatable.stubs.test_module_lib",
})
CorePlatformHiddenAPIScope = initHiddenAPIScope(&HiddenAPIScope{
name: "core-platform",
@@ -647,7 +655,7 @@
// public version is provided by the art.module.public.api module. In those cases it is necessary
// to treat all those modules as they were the same name, otherwise it will result in multiple
// definitions of a single class being passed to hidden API processing which will cause an error.
- if name == scope.nonUpdatablePrebuiltModule || name == scope.nonUpdatableSourceModule {
+ if name == scope.nonUpdatablePrebuiltModule || name == scope.nonUpdatableSourceModule || name == scope.nonUpdatableFromTextModule {
// Treat all *android-non-updatable* modules as if they were part of an android-non-updatable
// java_sdk_library.
// TODO(b/192067200): Remove once android-non-updatable is a java_sdk_library or equivalent.
diff --git a/java/java.go b/java/java.go
index 35fd7c2..3b20ea4 100644
--- a/java/java.go
+++ b/java/java.go
@@ -2775,7 +2775,7 @@
type javaResourcesAttributes struct {
Resources bazel.LabelListAttribute
Resource_strip_prefix *string
- Additional_resources bazel.LabelListAttribute
+ Additional_resources bazel.LabelListAttribute `blueprint:"mutated"`
}
func (m *Library) getResourceFilegroupStripPrefix(ctx android.Bp2buildMutatorContext, resourceFilegroup string) (*string, bool) {
@@ -2935,8 +2935,8 @@
archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{})
for axis, configToProps := range archVariantProps {
- for config, _props := range configToProps {
- if archProps, ok := _props.(*CommonProperties); ok {
+ for config, p := range configToProps {
+ if archProps, ok := p.(*CommonProperties); ok {
archSrcs := android.BazelLabelForModuleSrcExcludes(ctx, archProps.Srcs, archProps.Exclude_srcs)
srcs.SetSelectValue(axis, config, archSrcs)
if archProps.Jarjar_rules != nil {
@@ -2946,6 +2946,11 @@
}
}
}
+ srcs.Append(
+ bazel.MakeLabelListAttribute(
+ android.BazelLabelForModuleSrcExcludes(ctx,
+ m.properties.Openjdk9.Srcs,
+ m.properties.Exclude_srcs)))
srcs.ResolveExcludes()
javaSrcPartition := "java"
@@ -3029,8 +3034,9 @@
plugins := bazel.MakeLabelListAttribute(
android.BazelLabelForModuleDeps(ctx, m.properties.Plugins),
)
- if m.properties.Javacflags != nil {
- javacopts = bazel.MakeStringListAttribute(m.properties.Javacflags)
+ if m.properties.Javacflags != nil || m.properties.Openjdk9.Javacflags != nil {
+ javacopts = bazel.MakeStringListAttribute(
+ append(append([]string{}, m.properties.Javacflags...), m.properties.Openjdk9.Javacflags...))
}
epEnabled := m.properties.Errorprone.Enabled
@@ -3046,9 +3052,11 @@
javacopts.Append(bazel.MakeStringListAttribute([]string{"-XepDisableAllChecks"}))
}
+ resourcesAttrs := m.convertJavaResourcesAttributes(ctx)
+
commonAttrs := &javaCommonAttributes{
Srcs: javaSrcs,
- javaResourcesAttributes: m.convertJavaResourcesAttributes(ctx),
+ javaResourcesAttributes: resourcesAttrs,
Plugins: plugins,
Javacopts: javacopts,
Java_version: bazel.StringAttribute{Value: m.properties.Java_version},
@@ -3071,6 +3079,7 @@
}
depLabels := &javaDependencyLabels{}
+ deps.Append(resourcesAttrs.Additional_resources)
depLabels.Deps = deps
for axis, configToProps := range archVariantProps {
diff --git a/java/testing.go b/java/testing.go
index 4461351..16bdd80 100644
--- a/java/testing.go
+++ b/java/testing.go
@@ -491,6 +491,7 @@
"android-non-updatable.stubs.system.from-text": systemDroidstubs,
"android-non-updatable.stubs.test.from-text": testDroidstubs,
"android-non-updatable.stubs.module_lib.from-text": moduleLibDroidstubs,
+ "android-non-updatable.stubs.test_module_lib": moduleLibDroidstubs,
}
for _, droidstubs := range droidstubsStructs {
diff --git a/rust/config/arm_device.go b/rust/config/arm_device.go
index 42c1c02..a5f4afb 100644
--- a/rust/config/arm_device.go
+++ b/rust/config/arm_device.go
@@ -44,6 +44,7 @@
strings.Join(rustFlags, " "))
}
+ ExportedVars.ExportStringListStaticVariable("DEVICE_ARM_RUSTC_FLAGS", ArmRustFlags)
}
type toolchainArm struct {
diff --git a/rust/config/x86_64_device.go b/rust/config/x86_64_device.go
index 45d1fd0..c797eef 100644
--- a/rust/config/x86_64_device.go
+++ b/rust/config/x86_64_device.go
@@ -53,7 +53,7 @@
pctx.StaticVariable("X86_64"+variant+"VariantRustFlags",
strings.Join(rustFlags, " "))
}
-
+ ExportedVars.ExportStringListStaticVariable("DEVICE_X86_64_RUSTC_FLAGS", x86_64RustFlags)
}
type toolchainX86_64 struct {
diff --git a/rust/config/x86_device.go b/rust/config/x86_device.go
index 43f7340..822f281 100644
--- a/rust/config/x86_device.go
+++ b/rust/config/x86_device.go
@@ -55,6 +55,7 @@
strings.Join(rustFlags, " "))
}
+ ExportedVars.ExportStringListStaticVariable("DEVICE_X86_RUSTC_FLAGS", x86RustFlags)
}
type toolchainX86 struct {
diff --git a/rust/sanitize.go b/rust/sanitize.go
index 2f5afd7..0b10435 100644
--- a/rust/sanitize.go
+++ b/rust/sanitize.go
@@ -203,6 +203,11 @@
s.Address = nil
}
+ // TODO: Remove once b/304507701 is resolved
+ if Bool(s.Address) && ctx.Host() {
+ s.Address = nil
+ }
+
// Memtag_heap is only implemented on AArch64.
if ctx.Arch().ArchType != android.Arm64 || !ctx.Os().Bionic() {
s.Memtag_heap = nil
diff --git a/ui/build/config.go b/ui/build/config.go
index 2e5921a..264d83e 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -472,11 +472,6 @@
}
}
- if ret.BuildFromTextStub() {
- // TODO(b/271443071): support hidden api check for from-text stub build
- ret.environ.Set("UNSAFE_DISABLE_HIDDENAPI_FLAGS", "true")
- }
-
bpd := ret.BazelMetricsDir()
if err := os.RemoveAll(bpd); err != nil {
ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err)