diff options
| -rw-r--r-- | Android.bp | 115 | ||||
| -rw-r--r-- | android/arch.go | 22 | ||||
| -rw-r--r-- | android/bazel.go | 2 | ||||
| -rw-r--r-- | android/bazel_handler.go | 11 | ||||
| -rw-r--r-- | apex/apex.go | 16 | ||||
| -rw-r--r-- | apex/apex_test.go | 50 | ||||
| -rw-r--r-- | bazel/cquery/request_type.go | 19 | ||||
| -rw-r--r-- | bp2build/cc_library_headers_conversion_test.go | 11 | ||||
| -rw-r--r-- | bp2build/cc_library_static_conversion_test.go | 11 | ||||
| -rw-r--r-- | cc/cc.go | 4 | ||||
| -rw-r--r-- | cc/cc_test.go | 4 | ||||
| -rw-r--r-- | cc/library.go | 17 | ||||
| -rw-r--r-- | cc/linker.go | 3 | ||||
| -rw-r--r-- | cc/testing.go | 44 | ||||
| -rwxr-xr-x | java/app.go | 6 | ||||
| -rw-r--r-- | java/lint.go | 3 | ||||
| -rw-r--r-- | sdk/update.go | 2 |
17 files changed, 120 insertions, 220 deletions
diff --git a/Android.bp b/Android.bp index 9d5b07def..8f7f3e225 100644 --- a/Android.bp +++ b/Android.bp @@ -47,101 +47,6 @@ cc_defaults { // toolchain_library { - name: "libatomic", - defaults: ["linux_bionic_supported"], - vendor_available: true, - product_available: true, - ramdisk_available: true, - vendor_ramdisk_available: true, - recovery_available: true, - native_bridge_supported: true, - - arch: { - arm: { - src: "prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/arm-linux-androideabi/lib/libatomic.a", - }, - arm64: { - src: "prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/lib64/libatomic.a", - }, - x86: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/x86_64-linux-android/lib/libatomic.a", - }, - x86_64: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/x86_64-linux-android/lib64/libatomic.a", - }, - }, -} - -toolchain_library { - name: "libgcc", - defaults: ["linux_bionic_supported"], - vendor_available: true, - product_available: true, - recovery_available: true, - native_bridge_supported: true, - apex_available: [ - "//apex_available:platform", - "//apex_available:anyapex", - ], - - arch: { - arm: { - src: "prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a", - }, - arm64: { - src: "prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/libgcc.a", - }, - x86: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/32/libgcc.a", - }, - x86_64: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/libgcc.a", - }, - }, -} - -toolchain_library { - name: "libgcc_stripped", - defaults: ["linux_bionic_supported"], - vendor_available: true, - product_available: true, - ramdisk_available: true, - vendor_ramdisk_available: true, - recovery_available: true, - native_bridge_supported: true, - sdk_version: "current", - - arch: { - arm: { - src: "prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a", - repack_objects_to_keep: [], - enabled: false, - }, - arm64: { - src: "prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/libgcc.a", - repack_objects_to_keep: [ - "unwind-dw2.o", - "unwind-dw2-fde-dip.o", - ], - }, - x86: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/32/libgcc.a", - repack_objects_to_keep: [ - "unwind-dw2.o", - "unwind-dw2-fde-dip.o", - ], - }, - x86_64: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/libgcc.a", - repack_objects_to_keep: [ - "unwind-dw2.o", - "unwind-dw2-fde-dip.o", - ], - }, - }, -} - -toolchain_library { name: "libwinpthread", host_supported: true, enabled: false, @@ -159,26 +64,6 @@ toolchain_library { notice: ":mingw-libwinpthread-notice", } -toolchain_library { - name: "libgcov", - defaults: ["linux_bionic_supported"], - - arch: { - arm: { - src: "prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/lib/gcc/arm-linux-androideabi/4.9.x/libgcov.a", - }, - arm64: { - src: "prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9.x/libgcov.a", - }, - x86: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/32/libgcov.a", - }, - x86_64: { - src: "prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/lib/gcc/x86_64-linux-android/4.9.x/libgcov.a", - }, - }, -} - kernel_headers { name: "device_kernel_headers", vendor: true, diff --git a/android/arch.go b/android/arch.go index 3eff5d5e0..6826f3b0b 100644 --- a/android/arch.go +++ b/android/arch.go @@ -167,7 +167,8 @@ func newArch(name, multilib string) ArchType { return archType } -// ArchTypeList returns the 4 supported ArchTypes for arm, arm64, x86 and x86_64. +// ArchTypeList returns the a slice copy of the 4 supported ArchTypes for arm, +// arm64, x86 and x86_64. func ArchTypeList() []ArchType { return append([]ArchType(nil), archTypeList...) } @@ -266,7 +267,7 @@ func newOsType(name string, class OsClass, defDisabled bool, archTypes ...ArchTy DefaultDisabled: defDisabled, } - OsTypeList = append(OsTypeList, os) + osTypeList = append(osTypeList, os) if _, found := commonTargetMap[name]; found { panic(fmt.Errorf("Found Os type duplicate during OsType registration: %q", name)) @@ -280,7 +281,7 @@ func newOsType(name string, class OsClass, defDisabled bool, archTypes ...ArchTy // osByName returns the OsType that has the given name, or NoOsType if none match. func osByName(name string) OsType { - for _, os := range OsTypeList { + for _, os := range osTypeList { if os.Name == name { return os } @@ -312,9 +313,9 @@ var BuildArch = func() ArchType { }() var ( - // OsTypeList contains a list of all the supported OsTypes, including ones not supported + // osTypeList contains a list of all the supported OsTypes, including ones not supported // by the current build host or the target device. - OsTypeList []OsType + osTypeList []OsType // commonTargetMap maps names of OsTypes to the corresponding common Target, i.e. the // Target with the same OsType and the common ArchType. commonTargetMap = make(map[string]Target) @@ -347,6 +348,11 @@ var ( CommonArch = Arch{ArchType: Common} ) +// OsTypeList returns a slice copy of the supported OsTypes. +func OsTypeList() []OsType { + return append([]OsType(nil), osTypeList...) +} + // Target specifies the OS and architecture that a module is being compiled for. type Target struct { // Os the OS that the module is being compiled for (e.g. "linux_glibc", "android"). @@ -448,7 +454,7 @@ func osMutator(bpctx blueprint.BottomUpMutatorContext) { // Collect a list of OSTypes supported by this module based on the HostOrDevice value // passed to InitAndroidArchModule and the device_supported and host_supported properties. var moduleOSList []OsType - for _, os := range OsTypeList { + for _, os := range osTypeList { for _, t := range mctx.Config().Targets[os] { if base.supportsTarget(t) { moduleOSList = append(moduleOSList, os) @@ -838,7 +844,7 @@ func createArchPropTypeDesc(props reflect.Type) []archPropTypeDesc { "Arm_on_x86_64", "Native_bridge", } - for _, os := range OsTypeList { + for _, os := range osTypeList { // Add all the OSes. targets = append(targets, os.Field) @@ -1742,7 +1748,7 @@ func (m *ModuleBase) GetTargetProperties(dst interface{}) map[OsType]interface{} } // Iterate over the supported OS types - for _, os := range OsTypeList { + for _, os := range osTypeList { // e.g android, linux_bionic field := os.Field diff --git a/android/bazel.go b/android/bazel.go index a08da0e7b..b2170be79 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -174,8 +174,6 @@ var ( "liblinker_debuggerd_stub", // ruperts@, cc_library_static, depends on //system/libbase "libbionic_tests_headers_posix", // ruperts@, cc_library_static "libc_dns", // ruperts@, cc_library_static - "note_memtag_heap_async", // cparsons@, cc_library_static - "note_memtag_heap_sync", // cparsons@, cc_library_static } // Used for quicker lookups diff --git a/android/bazel_handler.go b/android/bazel_handler.go index 04b70d6b3..5b9d3bfe8 100644 --- a/android/bazel_handler.go +++ b/android/bazel_handler.go @@ -34,13 +34,6 @@ import ( "android/soong/shared" ) -type CqueryRequestType int - -const ( - getAllFiles CqueryRequestType = iota - getAllFilesAndCcObjectFiles -) - // Map key to describe bazel cquery requests. type cqueryKey struct { label string @@ -481,7 +474,7 @@ def %s(target): return id_string + ">>" + %s(target) ` - for _, requestType := range cquery.RequestTypes { + for requestType, _ := range requestTypeToCqueryIdEntries { labelMapName := requestType.Name() + "_Labels" functionName := requestType.Name() + "_Fn" labelRegistrationMapSection += fmt.Sprintf(mapDeclarationFormatString, @@ -688,7 +681,7 @@ func (c *bazelSingleton) GenerateBuildActions(ctx SingletonContext) { // Register bazel-owned build statements (obtained from the aquery invocation). for index, buildStatement := range ctx.Config().BazelContext.BuildStatementsToRegister() { if len(buildStatement.Command) < 1 { - panic(fmt.Sprintf("unhandled build statement: %s", buildStatement)) + panic(fmt.Sprintf("unhandled build statement: %v", buildStatement)) } rule := NewRuleBuilder(pctx, ctx) cmd := rule.Command() diff --git a/apex/apex.go b/apex/apex.go index 9d06e1c8f..bad382aa8 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1049,6 +1049,16 @@ func apexMutator(mctx android.BottomUpMutatorContext) { if a, ok := mctx.Module().(*apexBundle); ok && !a.vndkApex { apexBundleName := mctx.ModuleName() mctx.CreateVariations(apexBundleName) + if strings.HasPrefix(apexBundleName, "com.android.art") { + // Create an alias from the platform variant. This is done to make + // test_for dependencies work for modules that are split by the APEX + // mutator, since test_for dependencies always go to the platform variant. + // This doesn't happen for normal APEXes that are disjunct, so only do + // this for the overlapping ART APEXes. + // TODO(b/183882457): Remove this if the test_for functionality is + // refactored to depend on the proper APEX variants instead of platform. + mctx.CreateAliasVariation("", apexBundleName) + } } else if o, ok := mctx.Module().(*OverrideApex); ok { apexBundleName := o.GetOverriddenModuleName() if apexBundleName == "" { @@ -1056,6 +1066,10 @@ func apexMutator(mctx android.BottomUpMutatorContext) { return } mctx.CreateVariations(apexBundleName) + if strings.HasPrefix(apexBundleName, "com.android.art") { + // TODO(b/183882457): See note for CreateAliasVariation above. + mctx.CreateAliasVariation("", apexBundleName) + } } } @@ -2925,9 +2939,7 @@ func makeApexAvailableBaseline() map[string][]string { "com.google.android.material_material", "com.google.android.material_material-nodeps", - "libatomic", "libclang_rt", - "libgcc_stripped", "libprofile-clang-extras", "libprofile-clang-extras_ndk", "libprofile-extras", diff --git a/apex/apex_test.go b/apex/apex_test.go index e47bd1e03..87d551b74 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -6947,6 +6947,56 @@ func TestIndirectTestFor(t *testing.T) { ensureLinkedLibIs("myprivlib", "android_arm64_armv8-a_shared", "out/soong/.intermediates/mylib/", "android_arm64_armv8-a_shared/mylib.so") } +func TestTestForForLibInOtherApex(t *testing.T) { + // This case is only allowed for known overlapping APEXes, i.e. the ART APEXes. + _ = testApex(t, ` + apex { + name: "com.android.art", + key: "myapex.key", + native_shared_libs: ["mylib"], + updatable: false, + } + + apex { + name: "com.android.art.debug", + key: "myapex.key", + native_shared_libs: ["mylib", "mytestlib"], + updatable: false, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "mylib", + srcs: ["mylib.cpp"], + system_shared_libs: [], + stl: "none", + stubs: { + versions: ["1"], + }, + apex_available: ["com.android.art", "com.android.art.debug"], + } + + cc_library { + name: "mytestlib", + srcs: ["mylib.cpp"], + system_shared_libs: [], + shared_libs: ["mylib"], + stl: "none", + apex_available: ["com.android.art.debug"], + test_for: ["com.android.art"], + } + `, + android.MockFS{ + "system/sepolicy/apex/com.android.art-file_contexts": nil, + "system/sepolicy/apex/com.android.art.debug-file_contexts": nil, + }.AddToFixture()) +} + // TODO(jungjw): Move this to proptools func intPtr(i int) *int { return &i diff --git a/bazel/cquery/request_type.go b/bazel/cquery/request_type.go index bd1ece177..affb5cead 100644 --- a/bazel/cquery/request_type.go +++ b/bazel/cquery/request_type.go @@ -14,11 +14,6 @@ type GetOutputFilesAndCcObjectFiles_Result struct { CcObjectFiles []string } -var RequestTypes []RequestType = []RequestType{ - GetOutputFiles, - GetOutputFilesAndCcObjectFiles, -} - type RequestType interface { // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. @@ -83,7 +78,17 @@ func (g getOutputFilesAndCcObjectFilesType) ParseResult(rawString string) interf splitString := strings.Split(rawString, "|") outputFilesString := splitString[0] ccObjectsString := splitString[1] - outputFiles = strings.Split(outputFilesString, ", ") - ccObjects = strings.Split(ccObjectsString, ", ") + outputFiles = splitOrEmpty(outputFilesString, ", ") + ccObjects = splitOrEmpty(ccObjectsString, ", ") return GetOutputFilesAndCcObjectFiles_Result{outputFiles, ccObjects} } + +// splitOrEmpty is a modification of strings.Split() that returns an empty list +// if the given string is empty. +func splitOrEmpty(s string, sep string) []string { + if len(s) < 1 { + return []string{} + } else { + return strings.Split(s, sep) + } +} diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go index d828168ac..dbea37ae2 100644 --- a/bp2build/cc_library_headers_conversion_test.go +++ b/bp2build/cc_library_headers_conversion_test.go @@ -37,17 +37,6 @@ toolchain_library { recovery_available: true, native_bridge_supported: true, src: "", -} - -toolchain_library { - name: "libatomic", - defaults: ["linux_bionic_supported"], - vendor_available: true, - vendor_ramdisk_available: true, - product_available: true, - recovery_available: true, - native_bridge_supported: true, - src: "", }` ) diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index 7bf5fd3e4..467b0b286 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -37,17 +37,6 @@ toolchain_library { recovery_available: true, native_bridge_supported: true, src: "", -} - -toolchain_library { - name: "libatomic", - defaults: ["linux_bionic_supported"], - vendor_available: true, - vendor_ramdisk_available: true, - product_available: true, - recovery_available: true, - native_bridge_supported: true, - src: "", }` ) @@ -1646,12 +1646,12 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.hideApexVariantFromMake = true } + c.makeLinkType = GetMakeLinkType(actx, c) + if c.maybeGenerateBazelActions(actx) { return } - c.makeLinkType = GetMakeLinkType(actx, c) - ctx := &moduleContext{ ModuleContext: actx, moduleContextImpl: moduleContextImpl{ diff --git a/cc/cc_test.go b/cc/cc_test.go index 235232e12..465283db5 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2912,13 +2912,13 @@ func TestStaticLibDepExport(t *testing.T) { // Check the shared version of lib2. variant := "android_arm64_armv8-a_shared" module := ctx.ModuleForTests("lib2", variant).Module().(*Module) - checkStaticLibs(t, []string{"lib1", "libc++demangle", "libclang_rt.builtins-aarch64-android", "libatomic"}, module) + checkStaticLibs(t, []string{"lib1", "libc++demangle", "libclang_rt.builtins-aarch64-android"}, module) // Check the static version of lib2. variant = "android_arm64_armv8-a_static" module = ctx.ModuleForTests("lib2", variant).Module().(*Module) // libc++_static is linked additionally. - checkStaticLibs(t, []string{"lib1", "libc++_static", "libc++demangle", "libclang_rt.builtins-aarch64-android", "libatomic"}, module) + checkStaticLibs(t, []string{"lib1", "libc++_static", "libc++demangle", "libclang_rt.builtins-aarch64-android"}, module) } var compilerFlagsTestCases = []struct { diff --git a/cc/library.go b/cc/library.go index 50fff7f9d..11b673742 100644 --- a/cc/library.go +++ b/cc/library.go @@ -425,11 +425,14 @@ func (handler *staticLibraryBazelHandler) generateBazelBuildActions(ctx android. if !ok { return ok } - if len(outputPaths) != 1 { + if len(outputPaths) > 1 { // TODO(cparsons): This is actually expected behavior for static libraries with no srcs. // We should support this. - ctx.ModuleErrorf("expected exactly one output file for '%s', but got %s", label, objPaths) + ctx.ModuleErrorf("expected at most one output file for '%s', but got %s", label, objPaths) return false + } else if len(outputPaths) == 0 { + handler.module.outputFile = android.OptionalPath{} + return true } outputFilePath := android.PathForBazelOut(ctx, outputPaths[0]) handler.module.outputFile = android.OptionalPathForPath(outputFilePath) @@ -453,7 +456,15 @@ func (handler *staticLibraryBazelHandler) generateBazelBuildActions(ctx android. Direct(outputFilePath). Build(), }) - handler.module.outputFile = android.OptionalPathForPath(android.PathForBazelOut(ctx, objPaths[0])) + if i, ok := handler.module.linker.(snapshotLibraryInterface); ok { + // Dependencies on this library will expect collectedSnapshotHeaders to + // be set, otherwise validation will fail. For now, set this to an empty + // list. + // TODO(cparsons): More closely mirror the collectHeadersForSnapshot + // implementation. + i.(*libraryDecorator).collectedSnapshotHeaders = android.Paths{} + } + return ok } diff --git a/cc/linker.go b/cc/linker.go index 21281d2ce..ae333563b 100644 --- a/cc/linker.go +++ b/cc/linker.go @@ -321,10 +321,9 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { } if ctx.toolchain().Bionic() { - // libclang_rt.builtins and libatomic have to be last on the command line + // libclang_rt.builtins has to be last on the command line if !Bool(linker.Properties.No_libcrt) { deps.LateStaticLibs = append(deps.LateStaticLibs, config.BuiltinsRuntimeLibrary(ctx.toolchain())) - deps.LateStaticLibs = append(deps.LateStaticLibs, "libatomic") } deps.SystemSharedLibs = linker.Properties.System_shared_libs diff --git a/cc/testing.go b/cc/testing.go index 6e356557c..ff32bfffd 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -63,17 +63,6 @@ func GatherRequiredDepsForTest(oses ...android.OsType) string { func commonDefaultModules() string { return ` toolchain_library { - name: "libatomic", - defaults: ["linux_bionic_supported"], - vendor_available: true, - vendor_ramdisk_available: true, - product_available: true, - recovery_available: true, - native_bridge_supported: true, - src: "", - } - - toolchain_library { name: "libcompiler_rt-extras", vendor_available: true, vendor_ramdisk_available: true, @@ -200,29 +189,6 @@ func commonDefaultModules() string { srcs: [""], } - toolchain_library { - name: "libgcc", - defaults: ["linux_bionic_supported"], - vendor_available: true, - product_available: true, - recovery_available: true, - src: "", - apex_available: [ - "//apex_available:platform", - "//apex_available:anyapex", - ], - } - - toolchain_library { - name: "libgcc_stripped", - defaults: ["linux_bionic_supported"], - vendor_available: true, - product_available: true, - recovery_available: true, - sdk_version: "current", - src: "", - } - cc_library { name: "libc", defaults: ["linux_bionic_supported"], @@ -398,16 +364,6 @@ func commonDefaultModules() string { "//apex_available:anyapex", ], } - cc_library { - name: "libunwind_llvm", - no_libcrt: true, - nocrt: true, - system_shared_libs: [], - stl: "none", - vendor_available: true, - product_available: true, - recovery_available: true, - } cc_defaults { name: "crt_defaults", diff --git a/java/app.go b/java/app.go index dcb3bc66e..04406e734 100755 --- a/java/app.go +++ b/java/app.go @@ -380,7 +380,11 @@ func (a *AndroidApp) renameResourcesPackage() bool { } func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { - a.aapt.usesNonSdkApis = Bool(a.Module.deviceProperties.Platform_apis) + usePlatformAPI := proptools.Bool(a.Module.deviceProperties.Platform_apis) + if ctx.Module().(android.SdkContext).SdkVersion().Kind == android.SdkModule { + usePlatformAPI = true + } + a.aapt.usesNonSdkApis = usePlatformAPI // Ask manifest_fixer to add or update the application element indicating this app has no code. a.aapt.hasNoCode = !a.hasCode(ctx) diff --git a/java/lint.go b/java/lint.go index 475e8dc7c..a91278a90 100644 --- a/java/lint.go +++ b/java/lint.go @@ -392,6 +392,9 @@ func (l *linter) lint(ctx android.ModuleContext) { rule.Command().Text("rm -rf").Flag(lintPaths.cacheDir.String()).Flag(lintPaths.homeDir.String()) + // The HTML output contains a date, remove it to make the output deterministic. + rule.Command().Text(`sed -i.tmp -e 's|Check performed at .*\(</nav>\)|\1|'`).Output(html) + rule.Build("lint", "lint") l.outputs = lintOutputs{ diff --git a/sdk/update.go b/sdk/update.go index 828c7b67d..522a8887d 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -1350,7 +1350,7 @@ func (s *sdk) createMemberSnapshot(ctx *memberContext, member *sdkMember, bpModu // Compute the list of possible os types that this sdk could support. func (s *sdk) getPossibleOsTypes() []android.OsType { var osTypes []android.OsType - for _, osType := range android.OsTypeList { + for _, osType := range android.OsTypeList() { if s.DeviceSupported() { if osType.Class == android.Device && osType != android.Fuchsia { osTypes = append(osTypes, osType) |