diff options
-rw-r--r-- | Android.bp | 2 | ||||
-rw-r--r-- | android/filegroup.go (renamed from genrule/filegroup.go) | 33 | ||||
-rw-r--r-- | android/module.go | 1 | ||||
-rw-r--r-- | android/prebuilt.go | 19 | ||||
-rw-r--r-- | android/prebuilt_test.go | 14 | ||||
-rw-r--r-- | cc/builder.go | 2 | ||||
-rw-r--r-- | cc/cc.go | 3 | ||||
-rw-r--r-- | cc/cc_test.go | 3 | ||||
-rw-r--r-- | cc/test_data_test.go | 3 | ||||
-rw-r--r-- | java/java.go | 29 | ||||
-rw-r--r-- | java/java_test.go | 29 |
11 files changed, 80 insertions, 58 deletions
@@ -46,6 +46,7 @@ bootstrap_go_package { "android/defaults.go", "android/defs.go", "android/expand.go", + "android/filegroup.go", "android/hooks.go", "android/makevars.go", "android/module.go", @@ -186,7 +187,6 @@ bootstrap_go_package { "soong-shared", ], srcs: [ - "genrule/filegroup.go", "genrule/genrule.go", ], pluginFor: ["soong_build"], diff --git a/genrule/filegroup.go b/android/filegroup.go index 2cff5fee..b284ce02 100644 --- a/genrule/filegroup.go +++ b/android/filegroup.go @@ -12,17 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -package genrule +package android import ( - "android/soong/android" "io" "strings" "text/template" ) func init() { - android.RegisterModuleType("filegroup", FileGroupFactory) + RegisterModuleType("filegroup", FileGroupFactory) } type fileGroupProperties struct { @@ -43,34 +42,34 @@ type fileGroupProperties struct { } type fileGroup struct { - android.ModuleBase + ModuleBase properties fileGroupProperties - srcs android.Paths + srcs Paths } -var _ android.SourceFileProducer = (*fileGroup)(nil) +var _ SourceFileProducer = (*fileGroup)(nil) // filegroup modules contain a list of files, and can be used to export files across package // boundaries. filegroups (and genrules) can be referenced from srcs properties of other modules // using the syntax ":module". -func FileGroupFactory() android.Module { +func FileGroupFactory() Module { module := &fileGroup{} module.AddProperties(&module.properties) - android.InitAndroidModule(module) + InitAndroidModule(module) return module } -func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) { - android.ExtractSourcesDeps(ctx, fg.properties.Srcs) - android.ExtractSourcesDeps(ctx, fg.properties.Exclude_srcs) +func (fg *fileGroup) DepsMutator(ctx BottomUpMutatorContext) { + ExtractSourcesDeps(ctx, fg.properties.Srcs) + ExtractSourcesDeps(ctx, fg.properties.Exclude_srcs) } -func (fg *fileGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) { +func (fg *fileGroup) GenerateAndroidBuildActions(ctx ModuleContext) { fg.srcs = ctx.ExpandSourcesSubDir(fg.properties.Srcs, fg.properties.Exclude_srcs, String(fg.properties.Path)) } -func (fg *fileGroup) Srcs() android.Paths { - return append(android.Paths{}, fg.srcs...) +func (fg *fileGroup) Srcs() Paths { + return append(Paths{}, fg.srcs...) } var androidMkTemplate = template.Must(template.New("filegroup").Parse(` @@ -81,9 +80,9 @@ endif .KATI_READONLY := {{.makeVar}} `)) -func (fg *fileGroup) AndroidMk() android.AndroidMkData { - return android.AndroidMkData{ - Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { +func (fg *fileGroup) AndroidMk() AndroidMkData { + return AndroidMkData{ + Custom: func(w io.Writer, name, prefix, moduleDir string, data AndroidMkData) { if makeVar := String(fg.properties.Export_to_make_var); makeVar != "" { androidMkTemplate.Execute(w, map[string]string{ "makeVar": makeVar, diff --git a/android/module.go b/android/module.go index a011f571..3bd256a4 100644 --- a/android/module.go +++ b/android/module.go @@ -323,6 +323,7 @@ func InitAndroidModule(m Module) { &base.nameProperties, &base.commonProperties, &base.variableProperties) + base.customizableProperties = m.GetProperties() } func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib) { diff --git a/android/prebuilt.go b/android/prebuilt.go index 9356aabb..47c5cf53 100644 --- a/android/prebuilt.go +++ b/android/prebuilt.go @@ -59,7 +59,9 @@ func (p *Prebuilt) SingleSourcePath(ctx ModuleContext) Path { return nil } - return PathForModuleSrc(ctx, (*p.srcs)[0]) + // Return the singleton source after expanding any filegroup in the + // sources. + return ctx.ExpandSource((*p.srcs)[0], "") } func InitPrebuiltModule(module PrebuiltInterface, srcs *[]string) { @@ -79,7 +81,7 @@ func RegisterPrebuiltsPreArchMutators(ctx RegisterMutatorsContext) { func RegisterPrebuiltsPostDepsMutators(ctx RegisterMutatorsContext) { ctx.TopDown("prebuilt_select", PrebuiltSelectModuleMutator).Parallel() - ctx.BottomUp("prebuilt_replace", PrebuiltReplaceMutator).Parallel() + ctx.BottomUp("prebuilt_postdeps", PrebuiltPostDepsMutator).Parallel() } // prebuiltMutator ensures that there is always a module with an undecorated name, and marks @@ -119,10 +121,12 @@ func PrebuiltSelectModuleMutator(ctx TopDownMutatorContext) { } } -// PrebuiltReplaceMutator replaces dependencies on the source module with dependencies on the -// prebuilt when both modules exist and the prebuilt should be used. When the prebuilt should not -// be used, disable installing it. -func PrebuiltReplaceMutator(ctx BottomUpMutatorContext) { +// PrebuiltPostDepsMutator does two operations. It replace dependencies on the +// source module with dependencies on the prebuilt when both modules exist and +// the prebuilt should be used. When the prebuilt should not be used, disable +// installing it. Secondly, it also adds a sourcegroup to any filegroups found +// in the prebuilt's 'Srcs' property. +func PrebuiltPostDepsMutator(ctx BottomUpMutatorContext) { if m, ok := ctx.Module().(PrebuiltInterface); ok && m.Prebuilt() != nil { p := m.Prebuilt() name := m.base().BaseModuleName() @@ -133,6 +137,9 @@ func PrebuiltReplaceMutator(ctx BottomUpMutatorContext) { } else { m.SkipInstall() } + if len(*p.srcs) > 0 { + ExtractSourceDeps(ctx, &(*p.srcs)[0]) + } } } diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go index 69ce16a3..cd1ffae1 100644 --- a/android/prebuilt_test.go +++ b/android/prebuilt_test.go @@ -109,6 +109,19 @@ var prebuiltsTests = []struct { }`, prebuilt: false, }, + { + name: "prebuilt file from filegroup preferred", + modules: ` + filegroup { + name: "fg", + } + prebuilt { + name: "bar", + prefer: true, + srcs: [":fg"], + }`, + prebuilt: true, + }, } func TestPrebuilts(t *testing.T) { @@ -125,6 +138,7 @@ func TestPrebuilts(t *testing.T) { ctx := NewTestContext() ctx.PreArchMutators(RegisterPrebuiltsPreArchMutators) ctx.PostDepsMutators(RegisterPrebuiltsPostDepsMutators) + ctx.RegisterModuleType("filegroup", ModuleFactoryAdaptor(FileGroupFactory)) ctx.RegisterModuleType("prebuilt", ModuleFactoryAdaptor(newPrebuiltModule)) ctx.RegisterModuleType("source", ModuleFactoryAdaptor(newSourceModule)) ctx.Register() diff --git a/cc/builder.go b/cc/builder.go index a88df888..cec00564 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -205,7 +205,7 @@ var ( distAbiDiffDir := android.PathForDist(ctx, "abidiffs") commandStr += "|| (echo ' ---- Please update abi references by running platform/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l ${libName} ----'" if distAbiDiffDir.Valid() { - commandStr += ") && (mkdir -p " + distAbiDiffDir.String() + " && cp ${out} " + distAbiDiffDir.String() + commandStr += " && (mkdir -p " + distAbiDiffDir.String() + " && cp ${out} " + distAbiDiffDir.String() + ")" } commandStr += " && exit 1)" return blueprint.RuleParams{ @@ -539,13 +539,14 @@ func (ctx *moduleContextImpl) isVndkExt() bool { // Create source abi dumps if the module belongs to the list of VndkLibraries. func (ctx *moduleContextImpl) createVndkSourceAbiDump() bool { + skipAbiChecks := ctx.ctx.Config().IsEnvTrue("SKIP_ABI_CHECKS") isUnsanitizedVariant := true sanitize := ctx.mod.sanitize if sanitize != nil { isUnsanitizedVariant = sanitize.isUnsanitizedVariant() } vendorAvailable := Bool(ctx.mod.VendorProperties.Vendor_available) - return isUnsanitizedVariant && ctx.ctx.Device() && ((ctx.useVndk() && ctx.isVndk() && vendorAvailable) || inList(ctx.baseModuleName(), llndkLibraries)) + return !skipAbiChecks && isUnsanitizedVariant && ctx.ctx.Device() && ((ctx.useVndk() && ctx.isVndk() && vendorAvailable) || inList(ctx.baseModuleName(), llndkLibraries)) } func (ctx *moduleContextImpl) selectedStl() string { diff --git a/cc/cc_test.go b/cc/cc_test.go index 10c1aba7..9b4cc0fa 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -16,7 +16,6 @@ package cc import ( "android/soong/android" - "android/soong/genrule" "fmt" "io/ioutil" @@ -62,7 +61,7 @@ func createTestContext(t *testing.T, config android.Config, bp string) *android. ctx.RegisterModuleType("llndk_headers", android.ModuleFactoryAdaptor(llndkHeadersFactory)) ctx.RegisterModuleType("vendor_public_library", android.ModuleFactoryAdaptor(vendorPublicLibraryFactory)) ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(objectFactory)) - ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(genrule.FileGroupFactory)) + ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory)) ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("image", vendorMutator).Parallel() ctx.BottomUp("link", linkageMutator).Parallel() diff --git a/cc/test_data_test.go b/cc/test_data_test.go index 4a7b0f75..56c3e38c 100644 --- a/cc/test_data_test.go +++ b/cc/test_data_test.go @@ -22,7 +22,6 @@ import ( "testing" "android/soong/android" - "android/soong/genrule" ) type dataFile struct { @@ -129,7 +128,7 @@ func TestDataTests(t *testing.T) { "dir/bar/baz": nil, }) ctx.RegisterModuleType("filegroup", - android.ModuleFactoryAdaptor(genrule.FileGroupFactory)) + android.ModuleFactoryAdaptor(android.FileGroupFactory)) ctx.RegisterModuleType("test", android.ModuleFactoryAdaptor(newTest)) ctx.Register() diff --git a/java/java.go b/java/java.go index bc58df3a..277cdafd 100644 --- a/java/java.go +++ b/java/java.go @@ -387,24 +387,29 @@ func decodeSdkDep(ctx android.BaseContext, v string) sdkDep { } } - toFile := func(v string) sdkDep { - isCore := strings.HasPrefix(v, "core_") - if isCore { - v = strings.TrimPrefix(v, "core_") + toPrebuilt := func(sdk string) sdkDep { + var api, v string + if strings.Contains(sdk, "_") { + t := strings.Split(sdk, "_") + api = t[0] + v = t[1] + } else { + api = "public" + v = sdk } - dir := filepath.Join("prebuilts/sdk", v) + dir := filepath.Join("prebuilts", "sdk", v, api) jar := filepath.Join(dir, "android.jar") - if isCore { - jar = filepath.Join(dir, "core.jar") - } - aidl := filepath.Join(dir, "framework.aidl") + // There's no aidl for other SDKs yet. + // TODO(77525052): Add aidl files for other SDKs too. + public_dir := filepath.Join("prebuilts", "sdk", v, "public") + aidl := filepath.Join(public_dir, "framework.aidl") jarPath := android.ExistentPathForSource(ctx, jar) aidlPath := android.ExistentPathForSource(ctx, aidl) if (!jarPath.Valid() || !aidlPath.Valid()) && ctx.Config().AllowMissingDependencies() { return sdkDep{ invalidVersion: true, - module: "sdk_v" + v, + module: fmt.Sprintf("sdk_%s_%s_android", api, v), } } @@ -439,7 +444,7 @@ func decodeSdkDep(ctx android.BaseContext, v string) sdkDep { } if ctx.Config().UnbundledBuild() && v != "" { - return toFile(v) + return toPrebuilt(v) } switch v { @@ -457,7 +462,7 @@ func decodeSdkDep(ctx android.BaseContext, v string) sdkDep { case "core_current": return toModule("core.current.stubs", "") default: - return toFile(v) + return toPrebuilt(v) } } diff --git a/java/java_test.go b/java/java_test.go index 0e7bb18b..d4f2be19 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -78,7 +78,7 @@ func testContext(config android.Config, bp string, ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory)) ctx.RegisterModuleType("java_system_modules", android.ModuleFactoryAdaptor(SystemModulesFactory)) ctx.RegisterModuleType("java_genrule", android.ModuleFactoryAdaptor(genRuleFactory)) - ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(genrule.FileGroupFactory)) + ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory)) ctx.RegisterModuleType("genrule", android.ModuleFactoryAdaptor(genrule.GenRuleFactory)) ctx.RegisterModuleType("droiddoc", android.ModuleFactoryAdaptor(DroiddocFactory)) ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory)) @@ -151,17 +151,14 @@ func testContext(config android.Config, bp string, "java-fg/b.java": nil, "java-fg/c.java": nil, - "prebuilts/sdk/14/android.jar": nil, - "prebuilts/sdk/14/framework.aidl": nil, - "prebuilts/sdk/current/android.jar": nil, - "prebuilts/sdk/current/framework.aidl": nil, - "prebuilts/sdk/current/core.jar": nil, - "prebuilts/sdk/system_current/android.jar": nil, - "prebuilts/sdk/system_current/framework.aidl": nil, - "prebuilts/sdk/system_14/android.jar": nil, - "prebuilts/sdk/system_14/framework.aidl": nil, - "prebuilts/sdk/test_current/android.jar": nil, - "prebuilts/sdk/test_current/framework.aidl": nil, + "prebuilts/sdk/14/public/android.jar": nil, + "prebuilts/sdk/14/public/framework.aidl": nil, + "prebuilts/sdk/14/system/android.jar": nil, + "prebuilts/sdk/current/public/android.jar": nil, + "prebuilts/sdk/current/public/framework.aidl": nil, + "prebuilts/sdk/current/public/core.jar": nil, + "prebuilts/sdk/current/system/android.jar": nil, + "prebuilts/sdk/current/test/android.jar": nil, // For framework-res, which is an implicit dependency for framework "AndroidManifest.xml": nil, @@ -340,7 +337,7 @@ var classpathTestcases = []struct { properties: `sdk_version: "14",`, bootclasspath: []string{`""`}, system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath - classpath: []string{"prebuilts/sdk/14/android.jar"}, + classpath: []string{"prebuilts/sdk/14/public/android.jar"}, }, { @@ -362,7 +359,7 @@ var classpathTestcases = []struct { properties: `sdk_version: "system_14",`, bootclasspath: []string{`""`}, system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath - classpath: []string{"prebuilts/sdk/system_14/android.jar"}, + classpath: []string{"prebuilts/sdk/14/system/android.jar"}, }, { @@ -864,9 +861,9 @@ func TestTurbine(t *testing.T) { if len(barTurbineCombined.Inputs) != 2 || barTurbineCombined.Inputs[1].String() != fooHeaderJar { t.Errorf("bar turbine combineJar inputs %v does not contain %q", barTurbineCombined.Inputs, fooHeaderJar) } - if !strings.Contains(bazJavac.Args["classpath"], "prebuilts/sdk/14/android.jar") { + if !strings.Contains(bazJavac.Args["classpath"], "prebuilts/sdk/14/public/android.jar") { t.Errorf("baz javac classpath %v does not contain %q", bazJavac.Args["classpath"], - "prebuilts/sdk/14/android.jar") + "prebuilts/sdk/14/public/android.jar") } } |