From 8fe14e6a49b472de975aec577c926830e0dcc0c6 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Mon, 19 Oct 2020 22:47:34 +0900 Subject: [PATCH] Enable sdk and sdk members in os_arch granularity This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change, when there is a member that returns IsHostOsDependent() == true, the sdk having the member and the member itself are disable for host and only the os that the member supports is explicitly enabled. However, that change will cause a problem when we add the support for the linux_bionic_arm64 target. The target is not enabled when building sdk snapshots. The only linux_bionic target that is enabled is 'linux_bionic_x86_64'. However, since the granularity is os which is linux_bionic, the snapshot is generated as follows. cc_prebuilt_binary { target: { host: { enabled: false, }, linux_bionic: { enabled: true, }, linux_bionic_x86_64: { srcs: ["x86_64/bin/..."], }, // no srcs for linux_bionic_arm64 }, } Above is a problem for linux_bionic_arm64 target because the target is enabled (via linux_bionic.enabled: true), but srcs is not provided. To fix the problem, the enabling of a target is done in a target (os_arch) granularity, rather than os granularity. For example, above now becomes ... cc_prebuilt_binary { target: { host: { enabled: false, }, linux_bionic_x86_64: { enabled: true, srcs: ["x86_64/bin/..."], }, }, } Only the targets that the snapshot actually can provide srcs are enabled and the rest of the host targets are disabled. Bug: 159685774 Test: m nothing Test: build/soong/scripts/build-aml-prebuilts.sh runtime-module-host-exports Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81 --- sdk/cc_sdk_test.go | 204 +++++++++++++++++++++++++-------------------- sdk/update.go | 64 +++++++------- 2 files changed, 148 insertions(+), 120 deletions(-) diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index c214e75c4..c1813ecd0 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -120,10 +120,8 @@ cc_prebuilt_library_shared { android_arm64: { srcs: ["android/arm64/lib/sdkmember.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/sdkmember.so"], }, }, @@ -143,10 +141,8 @@ cc_prebuilt_library_shared { android_arm64: { srcs: ["android/arm64/lib/sdkmember.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/sdkmember.so"], }, }, @@ -162,7 +158,7 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { enabled: true, }, }, @@ -670,20 +666,21 @@ cc_prebuilt_binary { enabled: false, }, linux_glibc: { - enabled: true, compile_multilib: "both", }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/bin/mynativebinary"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/bin/mynativebinary"], }, windows: { - enabled: true, compile_multilib: "64", }, windows_x86_64: { + enabled: true, srcs: ["windows/x86_64/bin/mynativebinary.exe"], }, }, @@ -701,20 +698,21 @@ cc_prebuilt_binary { enabled: false, }, linux_glibc: { - enabled: true, compile_multilib: "both", }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/bin/mynativebinary"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/bin/mynativebinary"], }, windows: { - enabled: true, compile_multilib: "64", }, windows_x86_64: { + enabled: true, srcs: ["windows/x86_64/bin/mynativebinary.exe"], }, }, @@ -727,15 +725,20 @@ module_exports_snapshot { host_supported: true, native_binaries: ["myexports_mynativebinary@current"], target: { + windows: { + compile_multilib: "64", + }, host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { enabled: true, }, - windows: { + linux_glibc_x86: { + enabled: true, + }, + windows_x86_64: { enabled: true, - compile_multilib: "64", }, }, } @@ -811,10 +814,8 @@ cc_prebuilt_binary { host: { enabled: false, }, - linux_bionic: { - enabled: true, - }, linux_bionic_x86_64: { + enabled: true, srcs: ["x86_64/bin/mynativebinary"], }, }, @@ -832,10 +833,8 @@ cc_prebuilt_binary { host: { enabled: false, }, - linux_bionic: { - enabled: true, - }, linux_bionic_x86_64: { + enabled: true, srcs: ["x86_64/bin/mynativebinary"], }, }, @@ -854,10 +853,8 @@ cc_prebuilt_library_shared { host: { enabled: false, }, - linux_bionic: { - enabled: true, - }, linux_bionic_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.so"], }, }, @@ -875,10 +872,8 @@ cc_prebuilt_library_shared { host: { enabled: false, }, - linux_bionic: { - enabled: true, - }, linux_bionic_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.so"], }, }, @@ -896,7 +891,7 @@ module_exports_snapshot { host: { enabled: false, }, - linux_bionic: { + linux_bionic_x86_64: { enabled: true, }, }, @@ -952,13 +947,12 @@ cc_prebuilt_binary { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/bin/linker"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/bin/linker"], }, }, @@ -978,13 +972,12 @@ cc_prebuilt_binary { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/bin/linker"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/bin/linker"], }, }, @@ -1000,7 +993,10 @@ module_exports_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -1345,14 +1341,13 @@ cc_prebuilt_library_shared { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.so"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/lib/mynativelib.so"], export_include_dirs: ["x86/include_gen/mynativelib"], }, @@ -1373,14 +1368,13 @@ cc_prebuilt_library_shared { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.so"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/lib/mynativelib.so"], export_include_dirs: ["x86/include_gen/mynativelib"], }, @@ -1397,7 +1391,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -1464,20 +1461,21 @@ cc_prebuilt_library_shared { enabled: false, }, linux_glibc: { - enabled: true, compile_multilib: "both", }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/mynativelib.so"], }, windows: { - enabled: true, compile_multilib: "64", }, windows_x86_64: { + enabled: true, srcs: ["windows/x86_64/lib/mynativelib.dll"], }, }, @@ -1495,20 +1493,21 @@ cc_prebuilt_library_shared { enabled: false, }, linux_glibc: { - enabled: true, compile_multilib: "both", }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/mynativelib.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/mynativelib.so"], }, windows: { - enabled: true, compile_multilib: "64", }, windows_x86_64: { + enabled: true, srcs: ["windows/x86_64/lib/mynativelib.dll"], }, }, @@ -1521,15 +1520,20 @@ sdk_snapshot { host_supported: true, native_shared_libs: ["mysdk_mynativelib@current"], target: { + windows: { + compile_multilib: "64", + }, host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { enabled: true, }, - windows: { + linux_glibc_x86: { + enabled: true, + }, + windows_x86_64: { enabled: true, - compile_multilib: "64", }, }, } @@ -1669,14 +1673,13 @@ cc_prebuilt_library_static { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.a"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/lib/mynativelib.a"], export_include_dirs: ["x86/include_gen/mynativelib"], }, @@ -1696,14 +1699,13 @@ cc_prebuilt_library_static { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.a"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, linux_glibc_x86: { + enabled: true, srcs: ["x86/lib/mynativelib.a"], export_include_dirs: ["x86/include_gen/mynativelib"], }, @@ -1720,7 +1722,10 @@ module_exports_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -1885,10 +1890,8 @@ cc_prebuilt_library_static { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.a"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, @@ -1908,10 +1911,8 @@ cc_prebuilt_library_static { host: { enabled: false, }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["x86_64/lib/mynativelib.a"], export_include_dirs: ["x86_64/include_gen/mynativelib"], }, @@ -1929,7 +1930,7 @@ module_exports_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { enabled: true, }, }, @@ -2027,7 +2028,10 @@ cc_prebuilt_library_headers { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2046,7 +2050,10 @@ cc_prebuilt_library_headers { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2062,7 +2069,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2118,9 +2128,14 @@ cc_prebuilt_library_headers { export_include_dirs: ["android/include/include-android"], }, linux_glibc: { - enabled: true, export_include_dirs: ["linux_glibc/include/include-host"], }, + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { + enabled: true, + }, }, } @@ -2140,9 +2155,14 @@ cc_prebuilt_library_headers { export_include_dirs: ["android/include/include-android"], }, linux_glibc: { - enabled: true, export_include_dirs: ["linux_glibc/include/include-host"], }, + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { + enabled: true, + }, }, } @@ -2155,7 +2175,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2346,13 +2369,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/sslvariants.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/sslvariants.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/sslvariants.so"], }, }, @@ -2377,13 +2399,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/sslvariants.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/sslvariants.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/sslvariants.so"], }, }, @@ -2398,7 +2419,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2536,13 +2560,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/stubslib.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/stubslib.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/stubslib.so"], }, }, @@ -2571,13 +2594,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/stubslib.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/stubslib.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/stubslib.so"], }, }, @@ -2592,7 +2614,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, @@ -2637,13 +2662,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/mylib.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/mylib-host.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/mylib-host.so"], }, }, @@ -2666,13 +2690,12 @@ cc_prebuilt_library_shared { android_arm: { srcs: ["android/arm/lib/mylib.so"], }, - linux_glibc: { - enabled: true, - }, linux_glibc_x86_64: { + enabled: true, srcs: ["linux_glibc/x86_64/lib/mylib-host.so"], }, linux_glibc_x86: { + enabled: true, srcs: ["linux_glibc/x86/lib/mylib-host.so"], }, }, @@ -2687,7 +2710,10 @@ sdk_snapshot { host: { enabled: false, }, - linux_glibc: { + linux_glibc_x86_64: { + enabled: true, + }, + linux_glibc_x86: { enabled: true, }, }, diff --git a/sdk/update.go b/sdk/update.go index f29b5a00c..7bf5dea0a 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -347,34 +347,11 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro targetPropertySet := snapshotModule.AddPropertySet("target") - // If host is supported and any member is host OS dependent then disable host - // by default, so that we can enable each host OS variant explicitly. This - // avoids problems with implicitly enabled OS variants when the snapshot is - // used, which might be different from this run (e.g. different build OS). - hasHostOsDependentMember := false - if s.HostSupported() { - for _, memberRef := range memberRefs { - if memberRef.memberType.IsHostOsDependent() { - hasHostOsDependentMember = true - break - } - } - if hasHostOsDependentMember { - hostPropertySet := targetPropertySet.AddPropertySet("host") - hostPropertySet.AddProperty("enabled", false) - } - } - // Iterate over the os types in a fixed order. for _, osType := range s.getPossibleOsTypes() { if sdkVariant, ok := osTypeToMemberProperties[osType]; ok { osPropertySet := targetPropertySet.AddPropertySet(sdkVariant.Target().Os.Name) - // Enable the variant explicitly when we've disabled it by default on host. - if hasHostOsDependentMember && osType.Class == android.Host { - osPropertySet.AddProperty("enabled", true) - } - variantProps := variantToProperties[sdkVariant] if variantProps.Compile_multilib != "" && variantProps.Compile_multilib != "both" { osPropertySet.AddProperty("compile_multilib", variantProps.Compile_multilib) @@ -384,6 +361,31 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro } } + // If host is supported and any member is host OS dependent then disable host + // by default, so that we can enable each host OS variant explicitly. This + // avoids problems with implicitly enabled OS variants when the snapshot is + // used, which might be different from this run (e.g. different build OS). + if s.HostSupported() { + var supportedHostTargets []string + for _, memberRef := range memberRefs { + if memberRef.memberType.IsHostOsDependent() && memberRef.variant.Target().Os.Class == android.Host { + targetString := memberRef.variant.Target().Os.String() + "_" + memberRef.variant.Target().Arch.ArchType.String() + if !android.InList(targetString, supportedHostTargets) { + supportedHostTargets = append(supportedHostTargets, targetString) + } + } + } + if len(supportedHostTargets) > 0 { + hostPropertySet := targetPropertySet.AddPropertySet("host") + hostPropertySet.AddProperty("enabled", false) + } + // Enable the _ variant explicitly when we've disabled it by default on host. + for _, hostTarget := range supportedHostTargets { + propertySet := targetPropertySet.AddPropertySet(hostTarget) + propertySet.AddProperty("enabled", true) + } + } + // Prune any empty property sets. snapshotModule.transform(pruneEmptySetTransformer{}) @@ -984,7 +986,7 @@ func newOsTypeSpecificInfo(ctx android.SdkMemberContext, osType android.OsType, archTypeName := archType.Name archVariants := variantsByArchName[archTypeName] - archInfo := newArchSpecificInfo(ctx, archType, osSpecificVariantPropertiesFactory, archVariants) + archInfo := newArchSpecificInfo(ctx, archType, osType, osSpecificVariantPropertiesFactory, archVariants) osInfo.archInfos = append(osInfo.archInfos, archInfo) } @@ -1067,11 +1069,6 @@ func (osInfo *osTypeSpecificInfo) addToPropertySet(ctx *memberContext, bpModule osPropertySet = targetPropertySet.AddPropertySet(osType.Name) archPropertySet = targetPropertySet - // Enable the variant explicitly when we've disabled it by default on host. - if ctx.memberType.IsHostOsDependent() && osType.Class == android.Host { - osPropertySet.AddProperty("enabled", true) - } - // Arch specific properties need to be added to an os and arch specific // section prefixed with _. archOsPrefix = osType.Name + "_" @@ -1105,6 +1102,7 @@ type archTypeSpecificInfo struct { baseInfo archType android.ArchType + osType android.OsType linkInfos []*linkTypeSpecificInfo } @@ -1113,10 +1111,10 @@ var _ propertiesContainer = (*archTypeSpecificInfo)(nil) // Create a new archTypeSpecificInfo for the specified arch type and its properties // structures populated with information from the variants. -func newArchSpecificInfo(ctx android.SdkMemberContext, archType android.ArchType, variantPropertiesFactory variantPropertiesFactoryFunc, archVariants []android.Module) *archTypeSpecificInfo { +func newArchSpecificInfo(ctx android.SdkMemberContext, archType android.ArchType, osType android.OsType, variantPropertiesFactory variantPropertiesFactoryFunc, archVariants []android.Module) *archTypeSpecificInfo { // Create an arch specific info into which the variant properties can be copied. - archInfo := &archTypeSpecificInfo{archType: archType} + archInfo := &archTypeSpecificInfo{archType: archType, osType: osType} // Create the properties into which the arch type specific properties will be // added. @@ -1180,6 +1178,10 @@ func (archInfo *archTypeSpecificInfo) optimizeProperties(ctx *memberContext, com func (archInfo *archTypeSpecificInfo) addToPropertySet(ctx *memberContext, archPropertySet android.BpPropertySet, archOsPrefix string) { archTypeName := archInfo.archType.Name archTypePropertySet := archPropertySet.AddPropertySet(archOsPrefix + archTypeName) + // Enable the _ variant explicitly when we've disabled it by default on host. + if ctx.memberType.IsHostOsDependent() && archInfo.osType.Class == android.Host { + archTypePropertySet.AddProperty("enabled", true) + } addSdkMemberPropertiesToSet(ctx, archInfo.Properties, archTypePropertySet) for _, linkInfo := range archInfo.linkInfos {