diff options
| -rw-r--r-- | android/allowlists/allowlists.go | 1 | ||||
| -rw-r--r-- | bp2build/java_library_conversion_test.go | 49 | ||||
| -rw-r--r-- | bp2build/prebuilt_etc_conversion_test.go | 40 | ||||
| -rw-r--r-- | etc/prebuilt_etc.go | 12 | ||||
| -rw-r--r-- | genrule/allowlists.go | 1 | ||||
| -rw-r--r-- | java/base.go | 8 | ||||
| -rw-r--r-- | java/bootclasspath_fragment_test.go | 54 | ||||
| -rw-r--r-- | java/hiddenapi_modular.go | 16 | ||||
| -rw-r--r-- | java/java.go | 21 | ||||
| -rw-r--r-- | java/testing.go | 1 | ||||
| -rw-r--r-- | rust/config/arm_device.go | 1 | ||||
| -rw-r--r-- | rust/config/x86_64_device.go | 2 | ||||
| -rw-r--r-- | rust/config/x86_device.go | 1 | ||||
| -rw-r--r-- | rust/sanitize.go | 5 | ||||
| -rw-r--r-- | ui/build/config.go | 5 |
15 files changed, 190 insertions, 27 deletions
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 8e14a71f3..cc428e934 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -203,6 +203,7 @@ var ( "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 9cb9443cc..c88af1b55 100644 --- a/bp2build/java_library_conversion_test.go +++ b/bp2build/java_library_conversion_test.go @@ -192,6 +192,45 @@ func TestJavaLibraryJavaVersion(t *testing.T) { }) } +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 @@ func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) { }, Blueprint: `java_library { name: "java-lib-1", + srcs: ["foo.java"], java_resource_dirs: ["res", "res1"], sdk_version: "current", }`, @@ -433,9 +473,10 @@ func TestJavaLibraryResourcesWithMultipleDirs(t *testing.T) { "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 @@ func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) { 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 @@ func TestJavaLibraryJavaResourcesAndResourceDirs(t *testing.T) { "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 @@ filegroup { "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 1f372706b..c8cfd87ce 100644 --- a/bp2build/prebuilt_etc_conversion_test.go +++ b/bp2build/prebuilt_etc_conversion_test.go @@ -26,10 +26,17 @@ func runPrebuiltEtcTestCase(t *testing.T, tc Bp2buildTestCase) { 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 @@ func runPrebuiltUsrShareTestCase(t *testing.T, tc Bp2buildTestCase) { 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 @@ prebuilt_etc { 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 94235319a..ca2844244 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -508,6 +508,7 @@ func PrebuiltRootHostFactory() android.Module { // This module is host-only android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon) android.InitDefaultableModule(module) + android.InitBazelModule(module) return module } @@ -759,7 +760,7 @@ func (module *PrebuiltEtc) Bp2buildHelper(ctx android.Bp2buildMutatorContext) (* 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 @@ func (module *PrebuiltEtc) Bp2buildHelper(ctx android.Bp2buildMutatorContext) (* } 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 @@ func (module *PrebuiltEtc) Bp2buildHelper(ctx android.Bp2buildMutatorContext) (* // 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 8c78528ed..8552173a3 100644 --- a/genrule/allowlists.go +++ b/genrule/allowlists.go @@ -58,6 +58,7 @@ var ( "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 03198b550..53f22a7c0 100644 --- a/java/base.go +++ b/java/base.go @@ -1024,7 +1024,12 @@ func (j *Module) collectJavacFlags( 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 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath 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 888caad16..828de2179 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -316,6 +316,60 @@ func TestBootclasspathFragment_StubLibs(t *testing.T) { 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 f31f5d1a8..81be33dd1 100644 --- a/java/hiddenapi_modular.go +++ b/java/hiddenapi_modular.go @@ -38,10 +38,14 @@ type HiddenAPIScope struct { // 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 @@ func (l *HiddenAPIScope) scopeSpecificStubModule(ctx android.BaseModuleContext, 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 @@ var ( 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 @@ func (s StubDexJarsByModule) addStubDexJar(ctx android.ModuleContext, module and // 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 35fd7c2b8..3b20ea406 100644 --- a/java/java.go +++ b/java/java.go @@ -2775,7 +2775,7 @@ func addCLCFromDep(ctx android.ModuleContext, depModule android.Module, 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 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.Bp2buildMutatorContext 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 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.Bp2buildMutatorContext } } } + srcs.Append( + bazel.MakeLabelListAttribute( + android.BazelLabelForModuleSrcExcludes(ctx, + m.properties.Openjdk9.Srcs, + m.properties.Exclude_srcs))) srcs.ResolveExcludes() javaSrcPartition := "java" @@ -3029,8 +3034,9 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.Bp2buildMutatorContext 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 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.Bp2buildMutatorContext 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 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.Bp2buildMutatorContext } 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 446135116..16bdd80a1 100644 --- a/java/testing.go +++ b/java/testing.go @@ -491,6 +491,7 @@ func gatherRequiredDepsForTest() string { "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 42c1c0256..a5f4afb92 100644 --- a/rust/config/arm_device.go +++ b/rust/config/arm_device.go @@ -44,6 +44,7 @@ func init() { 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 45d1fd0a1..c797eefe3 100644 --- a/rust/config/x86_64_device.go +++ b/rust/config/x86_64_device.go @@ -53,7 +53,7 @@ func init() { 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 43f73400e..822f281a8 100644 --- a/rust/config/x86_device.go +++ b/rust/config/x86_device.go @@ -55,6 +55,7 @@ func init() { strings.Join(rustFlags, " ")) } + ExportedVars.ExportStringListStaticVariable("DEVICE_X86_RUSTC_FLAGS", x86RustFlags) } type toolchainX86 struct { diff --git a/rust/sanitize.go b/rust/sanitize.go index 2f5afd74d..0b1043597 100644 --- a/rust/sanitize.go +++ b/rust/sanitize.go @@ -203,6 +203,11 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) { 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 2e5921a2c..264d83e70 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -472,11 +472,6 @@ func NewConfig(ctx Context, args ...string) Config { } } - 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) |