Merge "Prevent dynamically created java_api_contribution from inheriting parent modules' visibility"
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index 0c1be6e..1353293 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -400,6 +400,9 @@
// not recursive due to conflicting workspace paths in tools/atest/bazel/rules
"tools/asuite/atest":/* recursive = */ false,
"tools/asuite/atest/bazel/reporter":/* recursive = */ true,
+
+ // TODO(b/266459895): remove this and the placeholder BUILD file after re-enabling libunwindstack
+ "external/rust/crates/rustc-demangle-capi":/* recursive = */ false,
}
Bp2buildModuleAlwaysConvertList = []string{
@@ -1367,6 +1370,30 @@
"prebuilt_kotlin-test",
// TODO(b/217750501) exclude_files property not supported
"prebuilt_currysrc_org.eclipse",
+
+ // TODO(b/266459895): re-enable libunwindstack
+ "libunwindstack",
+ "libunwindstack_stdout_log",
+ "libunwindstack_no_dex",
+ "libunwindstack_utils",
+ "unwind_reg_info",
+ "libunwindstack_local",
+ "unwind_for_offline",
+ "unwind",
+ "unwind_info",
+ "unwind_symbols",
+ "libc_malloc_debug",
+ "libfdtrack",
+ "mediaswcodec",
+ "libcodec2_hidl@1.0",
+ "libEGL",
+ "libstagefright_bufferqueue_helper_novndk",
+ "libGLESv2",
+ "libcodec2_hidl@1.1",
+ "libmedia_codecserviceregistrant",
+ "libcodec2_hidl@1.2",
+ "libutils_test",
+ "libutilscallstack",
}
// Bazel prod-mode allowlist. Modules in this list are built by Bazel
diff --git a/android/testing.go b/android/testing.go
index e4202ae..fc39a9c 100644
--- a/android/testing.go
+++ b/android/testing.go
@@ -1125,6 +1125,11 @@
config.katiEnabled = true
}
+func SetTrimmedApexEnabledForTests(config Config) {
+ config.productVariables.TrimmedApex = new(bool)
+ *config.productVariables.TrimmedApex = true
+}
+
func AndroidMkEntriesForTest(t *testing.T, ctx *TestContext, mod blueprint.Module) []AndroidMkEntries {
t.Helper()
var p AndroidMkEntriesProvider
diff --git a/android/util.go b/android/util.go
index 234bda3..947af69 100644
--- a/android/util.go
+++ b/android/util.go
@@ -144,22 +144,28 @@
return m
}
-// ListDifference checks if the two lists contain the same elements
-func ListDifference[T comparable](l1, l2 []T) []T {
- diff := []T{}
+// ListSetDifference checks if the two lists contain the same elements. It returns
+// a boolean which is true if there is a difference, and then returns lists of elements
+// that are in l1 but not l2, and l2 but not l1.
+func ListSetDifference[T comparable](l1, l2 []T) (bool, []T, []T) {
+ listsDiffer := false
+ diff1 := []T{}
+ diff2 := []T{}
m1 := setFromList(l1)
m2 := setFromList(l2)
- for _, t := range l1 {
+ for t := range m1 {
if _, ok := m2[t]; !ok {
- diff = append(diff, t)
+ diff1 = append(diff1, t)
+ listsDiffer = true
}
}
- for _, t := range l2 {
+ for t := range m2 {
if _, ok := m1[t]; !ok {
- diff = append(diff, t)
+ diff2 = append(diff2, t)
+ listsDiffer = true
}
}
- return diff
+ return listsDiffer, diff1, diff2
}
// Returns true if the given string s is prefixed with any string in the given prefix list.
diff --git a/apex/apex_test.go b/apex/apex_test.go
index ea068ee..31e848e 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -9862,3 +9862,70 @@
libcCoreVariant := result.ModuleForTests("libc.apiimport", "android_arm64_armv8-a_shared").Module()
android.AssertBoolEquals(t, "core variant should link against source libc", true, hasDep(libfooCoreVariant, libcCoreVariant))
}
+
+func TestTrimmedApex(t *testing.T) {
+ bp := `
+ apex {
+ name: "myapex",
+ key: "myapex.key",
+ native_shared_libs: ["libfoo","libbaz"],
+ min_sdk_version: "29",
+ trim_against: "mydcla",
+ }
+ apex {
+ name: "mydcla",
+ key: "myapex.key",
+ native_shared_libs: ["libfoo","libbar"],
+ min_sdk_version: "29",
+ file_contexts: ":myapex-file_contexts",
+ dynamic_common_lib_apex: true,
+ }
+ apex_key {
+ name: "myapex.key",
+ }
+ cc_library {
+ name: "libfoo",
+ shared_libs: ["libc"],
+ apex_available: ["myapex","mydcla"],
+ min_sdk_version: "29",
+ }
+ cc_library {
+ name: "libbar",
+ shared_libs: ["libc"],
+ apex_available: ["myapex","mydcla"],
+ min_sdk_version: "29",
+ }
+ cc_library {
+ name: "libbaz",
+ shared_libs: ["libc"],
+ apex_available: ["myapex","mydcla"],
+ min_sdk_version: "29",
+ }
+ cc_api_library {
+ name: "libc",
+ src: "libc.so",
+ min_sdk_version: "29",
+ recovery_available: true,
+ }
+ api_imports {
+ name: "api_imports",
+ shared_libs: [
+ "libc",
+ ],
+ header_libs: [],
+ }
+ `
+ ctx := testApex(t, bp)
+ module := ctx.ModuleForTests("myapex", "android_common_myapex_image")
+ apexRule := module.MaybeRule("apexRule")
+ if apexRule.Rule == nil {
+ t.Errorf("Expecting regular apex rule but a non regular apex rule found")
+ }
+
+ ctx = testApex(t, bp, android.FixtureModifyConfig(android.SetTrimmedApexEnabledForTests))
+ trimmedApexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("TrimmedApexRule")
+ libs_to_trim := trimmedApexRule.Args["libs_to_trim"]
+ android.AssertStringDoesContain(t, "missing lib to trim", libs_to_trim, "libfoo")
+ android.AssertStringDoesContain(t, "missing lib to trim", libs_to_trim, "libbar")
+ android.AssertStringDoesNotContain(t, "unexpected libs in the libs to trim", libs_to_trim, "libbaz")
+}
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index 067e34f..4d18f83 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -227,3 +227,82 @@
}),
}})
}
+
+func TestAndroidAppKotlinSrcs(t *testing.T) {
+ runAndroidAppTestCase(t, Bp2buildTestCase{
+ Description: "Android app with kotlin sources and common_srcs",
+ ModuleTypeUnderTest: "android_app",
+ ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+ Filesystem: map[string]string{
+ "res/res.png": "",
+ },
+ Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+android_app {
+ name: "foo",
+ srcs: ["a.java", "b.kt"],
+ certificate: ":foocert",
+ manifest: "fooManifest.xml",
+ libs: ["barLib"]
+}
+java_library{
+ name: "barLib",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
+ MakeNeverlinkDuplicateTarget("java_library", "barLib"),
+ MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
+ "srcs": `[
+ "a.java",
+ "b.kt",
+ ]`,
+ "manifest": `"fooManifest.xml"`,
+ "resource_files": `["res/res.png"]`,
+ "deps": `[":barLib-neverlink"]`,
+ }),
+ MakeBazelTarget("android_binary", "foo", AttrNameToString{
+ "deps": `[":foo_kt"]`,
+ "certificate": `":foocert"`,
+ "manifest": `"fooManifest.xml"`,
+ }),
+ }})
+}
+
+func TestAndroidAppCommonSrcs(t *testing.T) {
+ runAndroidAppTestCase(t, Bp2buildTestCase{
+ Description: "Android app with common_srcs",
+ ModuleTypeUnderTest: "android_app",
+ ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+ Filesystem: map[string]string{
+ "res/res.png": "",
+ },
+ Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+android_app {
+ name: "foo",
+ srcs: ["a.java"],
+ common_srcs: ["b.kt"],
+ certificate: "foocert",
+ manifest: "fooManifest.xml",
+ libs: ["barLib"],
+}
+java_library{
+ name: "barLib",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
+ MakeNeverlinkDuplicateTarget("java_library", "barLib"),
+ MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
+ "srcs": `["a.java"]`,
+ "common_srcs": `["b.kt"]`,
+ "manifest": `"fooManifest.xml"`,
+ "resource_files": `["res/res.png"]`,
+ "deps": `[":barLib-neverlink"]`,
+ }),
+ MakeBazelTarget("android_binary", "foo", AttrNameToString{
+ "deps": `[":foo_kt"]`,
+ "certificate_name": `"foocert"`,
+ "manifest": `"fooManifest.xml"`,
+ }),
+ }})
+}
diff --git a/cc/binary.go b/cc/binary.go
index 54c1abc..2f8ee7f 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -591,6 +591,8 @@
outputFilePath := android.PathForBazelOut(ctx, info.OutputFile)
handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
handler.module.linker.(*binaryDecorator).unstrippedOutputFile = android.PathForBazelOut(ctx, info.UnstrippedOutput)
+
+ handler.module.setAndroidMkVariablesFromCquery(info.CcAndroidMkInfo)
}
func binaryBp2buildAttrs(ctx android.TopDownMutatorContext, m *Module) binaryAttributes {
diff --git a/cc/cc.go b/cc/cc.go
index 753975e..c33c5e3 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -28,6 +28,7 @@
"github.com/google/blueprint/proptools"
"android/soong/android"
+ "android/soong/bazel/cquery"
"android/soong/cc/config"
"android/soong/fuzz"
"android/soong/genrule"
@@ -1891,14 +1892,6 @@
bazelCtx := ctx.Config().BazelContext
if ccInfo, err := bazelCtx.GetCcInfo(bazelModuleLabel, android.GetConfigKey(ctx)); err == nil {
c.tidyFiles = android.PathsForBazelOut(ctx, ccInfo.TidyFiles)
- c.Properties.AndroidMkSharedLibs = ccInfo.LocalSharedLibs
- c.Properties.AndroidMkStaticLibs = ccInfo.LocalStaticLibs
- c.Properties.AndroidMkWholeStaticLibs = ccInfo.LocalWholeStaticLibs
- }
- if unstrippedInfo, err := bazelCtx.GetCcUnstrippedInfo(bazelModuleLabel, android.GetConfigKey(ctx)); err == nil {
- c.Properties.AndroidMkSharedLibs = unstrippedInfo.LocalSharedLibs
- c.Properties.AndroidMkStaticLibs = unstrippedInfo.LocalStaticLibs
- c.Properties.AndroidMkWholeStaticLibs = unstrippedInfo.LocalWholeStaticLibs
}
c.bazelHandler.ProcessBazelQueryResponse(ctx, bazelModuleLabel)
@@ -2096,6 +2089,12 @@
}
}
+func (c *Module) setAndroidMkVariablesFromCquery(info cquery.CcAndroidMkInfo) {
+ c.Properties.AndroidMkSharedLibs = info.LocalSharedLibs
+ c.Properties.AndroidMkStaticLibs = info.LocalStaticLibs
+ c.Properties.AndroidMkWholeStaticLibs = info.LocalWholeStaticLibs
+}
+
func (c *Module) toolchain(ctx android.BaseModuleContext) config.Toolchain {
if c.cachedToolchain == nil {
c.cachedToolchain = config.FindToolchainWithContext(ctx)
diff --git a/cc/cc_test.go b/cc/cc_test.go
index 39cc073..62adfd3 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -3029,32 +3029,6 @@
}
}
-func checkWholeStaticLibs(t *testing.T, expected []string, module *Module) {
- t.Helper()
- actual := module.Properties.AndroidMkWholeStaticLibs
- if !reflect.DeepEqual(actual, expected) {
- t.Errorf("incorrect whole_static_libs"+
- "\nactual: %v"+
- "\nexpected: %v",
- actual,
- expected,
- )
- }
-}
-
-func checkSharedLibs(t *testing.T, expected []string, module *Module) {
- t.Helper()
- actual := module.Properties.AndroidMkSharedLibs
- if !reflect.DeepEqual(actual, expected) {
- t.Errorf("incorrect shared_libs"+
- "\nactual: %v"+
- "\nexpected: %v",
- actual,
- expected,
- )
- }
-}
-
const staticLibAndroidBp = `
cc_library {
name: "lib1",
@@ -3114,6 +3088,20 @@
whole_static_libs: ["whole_static_dep"],
shared_libs: ["shared_dep"],
}
+ cc_library_headers {
+ name: "lib_headers",
+ bazel_module: { label: "//:lib_headers" },
+ static_libs: ["static_dep"],
+ whole_static_libs: ["whole_static_dep"],
+ shared_libs: ["shared_dep"],
+ }
+ cc_prebuilt_library {
+ name: "lib_prebuilt",
+ bazel_module: { label: "//:lib_prebuilt" },
+ static_libs: ["static_dep"],
+ whole_static_libs: ["whole_static_dep"],
+ shared_libs: ["shared_dep"],
+ }
`
testCases := []struct {
@@ -3172,6 +3160,36 @@
LocalSharedLibs: []string{"shared_dep"},
},
},
+ {
+ name: "cc_library_headers",
+ moduleName: "lib_headers",
+ variant: "android_arm64_armv8-a",
+ androidMkInfo: cquery.CcAndroidMkInfo{
+ LocalStaticLibs: []string{"static_dep"},
+ LocalWholeStaticLibs: []string{"whole_static_dep"},
+ LocalSharedLibs: []string{"shared_dep"},
+ },
+ },
+ {
+ name: "prebuilt lib static",
+ moduleName: "lib_prebuilt",
+ variant: "android_arm64_armv8-a_static",
+ androidMkInfo: cquery.CcAndroidMkInfo{
+ LocalStaticLibs: []string{"static_dep"},
+ LocalWholeStaticLibs: []string{"whole_static_dep"},
+ LocalSharedLibs: []string{"shared_dep"},
+ },
+ },
+ {
+ name: "prebuilt lib shared",
+ moduleName: "lib_prebuilt",
+ variant: "android_arm64_armv8-a_shared",
+ androidMkInfo: cquery.CcAndroidMkInfo{
+ LocalStaticLibs: []string{"static_dep"},
+ LocalWholeStaticLibs: []string{"whole_static_dep"},
+ LocalSharedLibs: []string{"shared_dep"},
+ },
+ },
}
outputBaseDir := "out/bazel"
@@ -3191,6 +3209,16 @@
CcAndroidMkInfo: tc.androidMkInfo,
RootStaticArchives: []string{""},
},
+ "//:lib_headers": cquery.CcInfo{
+ CcAndroidMkInfo: tc.androidMkInfo,
+ OutputFiles: []string{""},
+ },
+ "//:lib_prebuilt": cquery.CcInfo{
+ CcAndroidMkInfo: tc.androidMkInfo,
+ },
+ "//:lib_prebuilt_bp2build_cc_library_static": cquery.CcInfo{
+ CcAndroidMkInfo: tc.androidMkInfo,
+ },
},
LabelToCcBinary: map[string]cquery.CcUnstrippedInfo{
"//:test": cquery.CcUnstrippedInfo{
@@ -3207,25 +3235,68 @@
module := ctx.ModuleForTests(tc.moduleName, tc.variant).Module().(*Module)
entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
- checkStaticLibs(t, tc.androidMkInfo.LocalStaticLibs, module)
- missingStaticDeps := android.ListDifference(entries.EntryMap["LOCAL_STATIC_LIBRARIES"], tc.androidMkInfo.LocalStaticLibs)
- if len(missingStaticDeps) > 0 {
- t.Errorf("expected LOCAL_STATIC_LIBRARIES to be %q"+
- " but was %q; difference: %q", tc.androidMkInfo.LocalStaticLibs, entries.EntryMap["LOCAL_STATIC_LIBRARIES"], missingStaticDeps)
+ if !reflect.DeepEqual(module.Properties.AndroidMkStaticLibs, tc.androidMkInfo.LocalStaticLibs) {
+ t.Errorf("incorrect static_libs"+
+ "\nactual: %v"+
+ "\nexpected: %v",
+ module.Properties.AndroidMkStaticLibs,
+ tc.androidMkInfo.LocalStaticLibs,
+ )
+ }
+ staticDepsDiffer, missingStaticDeps, additionalStaticDeps := android.ListSetDifference(
+ entries.EntryMap["LOCAL_STATIC_LIBRARIES"],
+ tc.androidMkInfo.LocalStaticLibs,
+ )
+ if staticDepsDiffer {
+ t.Errorf(
+ "expected LOCAL_STATIC_LIBRARIES to be %q but was %q; missing: %q; extra %q",
+ tc.androidMkInfo.LocalStaticLibs,
+ entries.EntryMap["LOCAL_STATIC_LIBRARIES"],
+ missingStaticDeps,
+ additionalStaticDeps,
+ )
}
- checkWholeStaticLibs(t, tc.androidMkInfo.LocalWholeStaticLibs, module)
- missingWholeStaticDeps := android.ListDifference(entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"], tc.androidMkInfo.LocalWholeStaticLibs)
- if len(missingWholeStaticDeps) > 0 {
- t.Errorf("expected LOCAL_WHOLE_STATIC_LIBRARIES to be %q"+
- " but was %q; difference: %q", tc.androidMkInfo.LocalWholeStaticLibs, entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"], missingWholeStaticDeps)
+ if !reflect.DeepEqual(module.Properties.AndroidMkWholeStaticLibs, tc.androidMkInfo.LocalWholeStaticLibs) {
+ t.Errorf("expected module.Properties.AndroidMkWholeStaticLibs to be %q, but was %q",
+ tc.androidMkInfo.LocalWholeStaticLibs,
+ module.Properties.AndroidMkWholeStaticLibs,
+ )
+ }
+ wholeStaticDepsDiffer, missingWholeStaticDeps, additionalWholeStaticDeps := android.ListSetDifference(
+ entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"],
+ tc.androidMkInfo.LocalWholeStaticLibs,
+ )
+ if wholeStaticDepsDiffer {
+ t.Errorf(
+ "expected LOCAL_WHOLE_STATIC_LIBRARIES to be %q but was %q; missing: %q; extra %q",
+ tc.androidMkInfo.LocalWholeStaticLibs,
+ entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"],
+ missingWholeStaticDeps,
+ additionalWholeStaticDeps,
+ )
}
- checkSharedLibs(t, tc.androidMkInfo.LocalSharedLibs, module)
- missingSharedDeps := android.ListDifference(entries.EntryMap["LOCAL_SHARED_LIBRARIES"], tc.androidMkInfo.LocalSharedLibs)
- if len(missingSharedDeps) > 0 {
- t.Errorf("expected LOCAL_SHARED_LIBRARIES to be %q"+
- " but was %q; difference: %q", tc.androidMkInfo.LocalSharedLibs, entries.EntryMap["LOCAL_SHARED_LIBRARIES"], missingSharedDeps)
+ if !reflect.DeepEqual(module.Properties.AndroidMkSharedLibs, tc.androidMkInfo.LocalSharedLibs) {
+ t.Errorf("incorrect shared_libs"+
+ "\nactual: %v"+
+ "\nexpected: %v",
+ module.Properties.AndroidMkSharedLibs,
+ tc.androidMkInfo.LocalSharedLibs,
+ )
+ }
+ sharedDepsDiffer, missingSharedDeps, additionalSharedDeps := android.ListSetDifference(
+ entries.EntryMap["LOCAL_SHARED_LIBRARIES"],
+ tc.androidMkInfo.LocalSharedLibs,
+ )
+ if sharedDepsDiffer {
+ t.Errorf(
+ "expected LOCAL_SHARED_LIBRARIES to be %q but was %q; missing %q; extra %q",
+ tc.androidMkInfo.LocalSharedLibs,
+ entries.EntryMap["LOCAL_SHARED_LIBRARIES"],
+ missingSharedDeps,
+ additionalSharedDeps,
+ )
}
})
}
diff --git a/cc/library.go b/cc/library.go
index 94984cb..b644728 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -937,6 +937,8 @@
// implementation.
i.(*libraryDecorator).collectedSnapshotHeaders = android.Paths{}
}
+
+ handler.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
}
func (library *libraryDecorator) setFlagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) {
diff --git a/cc/library_headers.go b/cc/library_headers.go
index c77d253..6440ee2 100644
--- a/cc/library_headers.go
+++ b/cc/library_headers.go
@@ -88,6 +88,8 @@
// validation will fail. For now, set this to an empty list.
// TODO(cparsons): More closely mirror the collectHeadersForSnapshot implementation.
h.library.collectedSnapshotHeaders = android.Paths{}
+
+ h.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
}
// cc_library_headers contains a set of c/c++ headers which are imported by
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index af83278..9e62bf8 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -462,6 +462,8 @@
}
h.module.maybeUnhideFromMake()
+
+ h.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
}
func (h *prebuiltLibraryBazelHandler) processStaticBazelQueryResponse(ctx android.ModuleContext, label string, ccInfo cquery.CcInfo) bool {
diff --git a/cc/test.go b/cc/test.go
index 4b968dc..5c4d548 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -652,6 +652,8 @@
outputFilePath := android.PathForBazelOut(ctx, info.OutputFile)
handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
handler.module.linker.(*testBinary).unstrippedOutputFile = android.PathForBazelOut(ctx, info.UnstrippedOutput)
+
+ handler.module.setAndroidMkVariablesFromCquery(info.CcAndroidMkInfo)
}
// binaryAttributes contains Bazel attributes corresponding to a cc test
diff --git a/java/app.go b/java/app.go
index 4d9c407..e7e52d4 100755
--- a/java/app.go
+++ b/java/app.go
@@ -1508,20 +1508,48 @@
certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableAppProperties.Certificate)
- attrs := &bazelAndroidAppAttributes{
- commonAttrs,
- aapt,
- deps,
+ appAttrs := &bazelAndroidAppAttributes{
// TODO(b/209576404): handle package name override by product variable PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES
- a.overridableAppProperties.Package_name,
- certificate,
- certificateName,
+ Custom_package: a.overridableAppProperties.Package_name,
+ Certificate: certificate,
+ Certificate_name: certificateName,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:rules.bzl",
}
- ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, attrs)
+
+ if !bp2BuildInfo.hasKotlinSrcs && len(a.properties.Common_srcs) == 0 {
+ appAttrs.javaCommonAttributes = commonAttrs
+ appAttrs.bazelAapt = aapt
+ appAttrs.Deps = deps
+ ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, appAttrs)
+ } else {
+ ktName := a.Name() + "_kt"
+ commonAttrs.Common_srcs = bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, a.properties.Common_srcs))
+ ctx.CreateBazelTargetModule(
+ bazel.BazelTargetModuleProperties{
+ Rule_class: "android_library",
+ Bzl_load_location: "//build/bazel/rules/android:rules.bzl",
+ },
+ android.CommonAttributes{Name: ktName},
+ &bazelAndroidLibrary{
+ javaLibraryAttributes: &javaLibraryAttributes{
+ javaCommonAttributes: commonAttrs,
+ Deps: deps,
+ },
+ bazelAapt: aapt,
+ },
+ )
+
+ appAttrs.bazelAapt = &bazelAapt{Manifest: aapt.Manifest}
+ appAttrs.Deps = bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + ktName})
+ ctx.CreateBazelTargetModule(
+ props,
+ android.CommonAttributes{Name: a.Name()},
+ appAttrs,
+ )
+ }
}
diff --git a/java/droiddoc.go b/java/droiddoc.go
index aa55f37..01a2c14 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -602,8 +602,15 @@
Flag("-J-Xmx1600m").
Flag("-J-XX:-OmitStackTraceInFastThrow").
Flag("-XDignore.symbol.file").
- FlagWithArg("-doclet ", "com.google.doclava.Doclava").
+ Flag("--ignore-source-errors").
+ // b/240421555: use a stub doclet until Doclava works with JDK 17
+ //FlagWithArg("-doclet ", "com.google.doclava.Doclava").
+ FlagWithArg("-doclet ", "com.google.stubdoclet.StubDoclet").
FlagWithInputList("-docletpath ", docletPath.Paths(), ":").
+ FlagWithArg("-Xmaxerrs ", "1").
+ FlagWithArg("-Xmaxwarns ", "1").
+ Flag("-J--add-exports=jdk.javadoc/jdk.javadoc.internal.doclets.formats.html=ALL-UNNAMED").
+ Flag("-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED").
FlagWithArg("-hdf page.build ", ctx.Config().BuildId()+"-$(cat "+buildNumberFile.String()+")").OrderOnly(buildNumberFile).
FlagWithArg("-hdf page.now ", `"$(date -d @$(cat `+ctx.Config().Getenv("BUILD_DATETIME_FILE")+`) "+%d %b %Y %k:%M")" `)
@@ -687,7 +694,7 @@
outDir, srcJarDir, srcJarList android.Path, sourcepaths android.Paths) *android.RuleBuilderCommand {
cmd := rule.Command().
- BuiltTool("soong_javac_wrapper").Tool(android.PathForSource(ctx, "prebuilts/jdk/jdk11/linux-x86/bin/javadoc")).
+ BuiltTool("soong_javac_wrapper").Tool(config.JavadocCmd(ctx)).
Flag(config.JavacVmFlags).
FlagWithArg("-encoding ", "UTF-8").
FlagWithRspFileInputList("@", android.PathForModuleOut(ctx, "javadoc.rsp"), srcs).
@@ -773,6 +780,8 @@
jsilver := ctx.Config().HostJavaToolPath(ctx, "jsilver.jar")
doclava := ctx.Config().HostJavaToolPath(ctx, "doclava.jar")
+ // b/240421555: use a stub doclet until Doclava works with JDK 17
+ stubdoclet := ctx.Config().HostJavaToolPath(ctx, "stubdoclet.jar")
outDir := android.PathForModuleOut(ctx, "out")
srcJarDir := android.PathForModuleOut(ctx, "srcjars")
@@ -800,7 +809,8 @@
if Bool(d.properties.Dokka_enabled) {
desc = "dokka"
} else {
- d.doclavaDocsFlags(ctx, cmd, classpath{jsilver, doclava})
+ // b/240421555: use a stub doclet until Doclava works with JDK 17
+ d.doclavaDocsFlags(ctx, cmd, classpath{jsilver, doclava, stubdoclet})
for _, o := range d.Javadoc.properties.Out {
cmd.ImplicitOutput(android.PathForModuleGen(ctx, o))
@@ -818,9 +828,9 @@
FlagWithArg("-C ", outDir.String()).
FlagWithArg("-D ", outDir.String())
- rule.Restat()
+ // rule.Restat()
- zipSyncCleanupCmd(rule, srcJarDir)
+ // zipSyncCleanupCmd(rule, srcJarDir)
rule.Build("javadoc", desc)
}
diff --git a/rust/bindgen.go b/rust/bindgen.go
index 1ad33a1..e81ec6b 100644
--- a/rust/bindgen.go
+++ b/rust/bindgen.go
@@ -29,7 +29,7 @@
defaultBindgenFlags = []string{""}
// bindgen should specify its own Clang revision so updating Clang isn't potentially blocked on bindgen failures.
- bindgenClangVersion = "clang-r468909b"
+ bindgenClangVersion = "clang-r475365b"
_ = pctx.VariableFunc("bindgenClangVersion", func(ctx android.PackageVarContext) string {
if override := ctx.Config().Getenv("LLVM_BINDGEN_PREBUILTS_VERSION"); override != "" {
diff --git a/rust/config/global.go b/rust/config/global.go
index 7549969..50ac1f7 100644
--- a/rust/config/global.go
+++ b/rust/config/global.go
@@ -51,6 +51,9 @@
// Use v0 mangling to distinguish from C++ symbols
"-C symbol-mangling-version=v0",
"--color always",
+ // TODO (b/267698452): Temporary workaround until the "no unstable
+ // features" policy is enforced.
+ "-A stable-features",
}
deviceGlobalRustFlags = []string{
diff --git a/scripts/check_boot_jars/package_allowed_list.txt b/scripts/check_boot_jars/package_allowed_list.txt
index a02c195..08bd80c 100644
--- a/scripts/check_boot_jars/package_allowed_list.txt
+++ b/scripts/check_boot_jars/package_allowed_list.txt
@@ -75,6 +75,7 @@
jdk\.internal\.ref
jdk\.internal\.reflect
jdk\.internal\.util
+jdk\.internal\.util\.jar
jdk\.internal\.vm\.annotation
jdk\.net
org\.w3c\.dom