Merge "[rust] Add SourceProviders as crates support."
diff --git a/rust/compiler.go b/rust/compiler.go
index ec059c3..c2b7e56 100644
--- a/rust/compiler.go
+++ b/rust/compiler.go
@@ -24,7 +24,7 @@
"android/soong/rust/config"
)
-func getEdition(compiler *baseCompiler) string {
+func (compiler *baseCompiler) edition() string {
return proptools.StringDefault(compiler.Properties.Edition, config.DefaultEdition)
}
@@ -160,7 +160,7 @@
}
flags.RustFlags = append(flags.RustFlags, compiler.Properties.Flags...)
flags.RustFlags = append(flags.RustFlags, compiler.featuresToFlags(compiler.Properties.Features)...)
- flags.RustFlags = append(flags.RustFlags, "--edition="+getEdition(compiler))
+ flags.RustFlags = append(flags.RustFlags, "--edition="+compiler.edition())
flags.LinkFlags = append(flags.LinkFlags, compiler.Properties.Ld_flags...)
flags.GlobalRustFlags = append(flags.GlobalRustFlags, config.GlobalRustFlags...)
flags.GlobalRustFlags = append(flags.GlobalRustFlags, ctx.toolchain().ToolchainRustFlags())
diff --git a/rust/config/allowed_list.go b/rust/config/allowed_list.go
index 0204cd2..9c9a136 100644
--- a/rust/config/allowed_list.go
+++ b/rust/config/allowed_list.go
@@ -7,6 +7,7 @@
"external/crosvm",
"external/adhd",
"prebuilts/rust",
+ "system/security",
}
RustModuleTypes = []string{
diff --git a/rust/project_json.go b/rust/project_json.go
index a50e73a..41dd194 100644
--- a/rust/project_json.go
+++ b/rust/project_json.go
@@ -92,7 +92,7 @@
// appendLibraryAndDeps creates a rustProjectCrate for the module argument and
// appends it to the rustProjectJson struct. It visits the dependencies of the
// module depth-first. If the current module is already in knownCrates, its
-// its dependencies are merged. Returns a tuple (id, crate_name, ok).
+// dependencies are merged. Returns a tuple (id, crate_name, ok).
func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson,
knownCrates map[string]crateInfo, module android.Module) (int, string, bool) {
rModule, ok := module.(*Module)
@@ -111,12 +111,13 @@
// We have seen this crate already; merge any new dependencies.
crate := project.Crates[cInfo.ID]
mergeDependencies(ctx, project, knownCrates, module, &crate, cInfo.Deps)
+ project.Crates[cInfo.ID] = crate
return cInfo.ID, crateName, true
}
crate := rustProjectCrate{Deps: make([]rustProjectDep, 0), Cfgs: make([]string, 0)}
src := rustLib.baseCompiler.Properties.Srcs[0]
crate.RootModule = path.Join(ctx.ModuleDir(rModule), src)
- crate.Edition = getEdition(rustLib.baseCompiler)
+ crate.Edition = rustLib.baseCompiler.edition()
deps := make(map[string]int)
mergeDependencies(ctx, project, knownCrates, module, &crate, deps)
diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go
index 497f14b..17afdb8 100644
--- a/sdk/cc_sdk_test.go
+++ b/sdk/cc_sdk_test.go
@@ -73,7 +73,6 @@
result := testSdkWithCc(t, `
sdk {
name: "mysdk",
- device_supported: false,
host_supported: true,
native_shared_libs: ["sdkmember"],
compile_multilib: "64",
@@ -81,7 +80,6 @@
cc_library_shared {
name: "sdkmember",
- device_supported: false,
host_supported: true,
srcs: ["Test.cpp"],
stl: "none",
@@ -96,14 +94,16 @@
cc_prebuilt_library_shared {
name: "mysdk_sdkmember@current",
sdk_member_name: "sdkmember",
- device_supported: false,
host_supported: true,
installable: false,
stl: "none",
compile_multilib: "64",
- arch: {
- x86_64: {
- srcs: ["x86_64/lib/sdkmember.so"],
+ target: {
+ android_arm64: {
+ srcs: ["android/arm64/lib/sdkmember.so"],
+ },
+ linux_glibc_x86_64: {
+ srcs: ["linux_glibc/x86_64/lib/sdkmember.so"],
},
},
}
@@ -111,31 +111,29 @@
cc_prebuilt_library_shared {
name: "sdkmember",
prefer: false,
- device_supported: false,
host_supported: true,
stl: "none",
compile_multilib: "64",
- arch: {
- x86_64: {
- srcs: ["x86_64/lib/sdkmember.so"],
+ target: {
+ android_arm64: {
+ srcs: ["android/arm64/lib/sdkmember.so"],
+ },
+ linux_glibc_x86_64: {
+ srcs: ["linux_glibc/x86_64/lib/sdkmember.so"],
},
},
}
sdk_snapshot {
name: "mysdk@current",
- device_supported: false,
host_supported: true,
native_shared_libs: ["mysdk_sdkmember@current"],
- target: {
- linux_glibc: {
- compile_multilib: "64",
- },
- },
+ compile_multilib: "64",
}
`),
checkAllCopyRules(`
-.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> x86_64/lib/sdkmember.so
+.intermediates/sdkmember/android_arm64_armv8-a_shared/sdkmember.so -> android/arm64/lib/sdkmember.so
+.intermediates/sdkmember/linux_glibc_x86_64_shared/sdkmember.so -> linux_glibc/x86_64/lib/sdkmember.so
`))
}
@@ -1527,11 +1525,7 @@
device_supported: false,
host_supported: true,
native_static_libs: ["myexports_mynativelib@current"],
- target: {
- linux_glibc: {
- compile_multilib: "64",
- },
- },
+ compile_multilib: "64",
}`),
checkAllCopyRules(`
include/Test.h -> include/include/Test.h
diff --git a/sdk/update.go b/sdk/update.go
index b8d73c6..25d50d2 100644
--- a/sdk/update.go
+++ b/sdk/update.go
@@ -323,19 +323,37 @@
// Add properties common to all os types.
s.addMemberPropertiesToPropertySet(builder, snapshotModule, commonDynamicMemberProperties)
+ // Optimize other per-variant properties, besides the dynamic member lists.
+ type variantProperties struct {
+ Compile_multilib string `android:"arch_variant"`
+ }
+ var variantPropertiesContainers []propertiesContainer
+ variantToProperties := make(map[*sdk]*variantProperties)
+ for _, sdkVariant := range sdkVariants {
+ props := &variantProperties{
+ Compile_multilib: sdkVariant.multilibUsages.String(),
+ }
+ variantPropertiesContainers = append(variantPropertiesContainers, &dynamicMemberPropertiesContainer{sdkVariant, props})
+ variantToProperties[sdkVariant] = props
+ }
+ commonVariantProperties := variantProperties{}
+ extractor = newCommonValueExtractor(commonVariantProperties)
+ extractCommonProperties(ctx, extractor, &commonVariantProperties, variantPropertiesContainers)
+ if commonVariantProperties.Compile_multilib != "" && commonVariantProperties.Compile_multilib != "both" {
+ // Compile_multilib defaults to both so only needs to be set when it's
+ // specified and not both.
+ snapshotModule.AddProperty("compile_multilib", commonVariantProperties.Compile_multilib)
+ }
+
// Iterate over the os types in a fixed order.
targetPropertySet := snapshotModule.AddPropertySet("target")
for _, osType := range s.getPossibleOsTypes() {
if sdkVariant, ok := osTypeToMemberProperties[osType]; ok {
osPropertySet := targetPropertySet.AddPropertySet(sdkVariant.Target().Os.Name)
- // Compile_multilib defaults to both and must always be set to both on the
- // device and so only needs to be set when targeted at the host and is neither
- // unspecified or both.
- multilib := sdkVariant.multilibUsages
- if (osType.Class == android.Host || osType.Class == android.HostCross) &&
- multilib != multilibNone && multilib != multilibBoth {
- osPropertySet.AddProperty("compile_multilib", multilib.String())
+ variantProps := variantToProperties[sdkVariant]
+ if variantProps.Compile_multilib != "" && variantProps.Compile_multilib != "both" {
+ osPropertySet.AddProperty("compile_multilib", variantProps.Compile_multilib)
}
s.addMemberPropertiesToPropertySet(builder, osPropertySet, sdkVariant.dynamicMemberTypeListProperties)