Merge changes I646f303b,I294ca692
* changes:
Add support for Exynos-M2.
Override mcpu option of ToolingCFlags when mcpu is eyxnos-m2.
diff --git a/android/defaults.go b/android/defaults.go
index 84f0a3d..4bf872e 100644
--- a/android/defaults.go
+++ b/android/defaults.go
@@ -29,16 +29,16 @@
Defaults []string
}
-type DefaultableModule struct {
+type DefaultableModuleBase struct {
defaultsProperties defaultsProperties
defaultableProperties []interface{}
}
-func (d *DefaultableModule) defaults() *defaultsProperties {
+func (d *DefaultableModuleBase) defaults() *defaultsProperties {
return &d.defaultsProperties
}
-func (d *DefaultableModule) setProperties(props []interface{}) {
+func (d *DefaultableModuleBase) setProperties(props []interface{}) {
d.defaultableProperties = props
}
@@ -48,17 +48,21 @@
applyDefaults(TopDownMutatorContext, []Defaults)
}
-var _ Defaultable = (*DefaultableModule)(nil)
-
-func InitDefaultableModule(module Module, d Defaultable) {
-
- d.setProperties(module.GetProperties())
-
- module.AddProperties(d.defaults())
+type DefaultableModule interface {
+ Module
+ Defaultable
}
-type DefaultsModule struct {
- DefaultableModule
+var _ Defaultable = (*DefaultableModuleBase)(nil)
+
+func InitDefaultableModule(module DefaultableModule) {
+ module.(Defaultable).setProperties(module.(Module).GetProperties())
+
+ module.AddProperties(module.defaults())
+}
+
+type DefaultsModuleBase struct {
+ DefaultableModuleBase
defaultProperties []interface{}
}
@@ -68,31 +72,31 @@
properties() []interface{}
}
-func (d *DefaultsModule) isDefaults() bool {
+func (d *DefaultsModuleBase) isDefaults() bool {
return true
}
-func (d *DefaultsModule) properties() []interface{} {
+func (d *DefaultsModuleBase) properties() []interface{} {
return d.defaultableProperties
}
-func InitDefaultsModule(module Module, d Defaults) {
+func InitDefaultsModule(module DefaultableModule) {
module.AddProperties(
&hostAndDeviceProperties{},
&commonProperties{},
&variableProperties{})
InitArchModule(module)
- InitDefaultableModule(module, d)
+ InitDefaultableModule(module)
module.AddProperties(&module.base().nameProperties)
module.base().module = module
}
-var _ Defaults = (*DefaultsModule)(nil)
+var _ Defaults = (*DefaultsModuleBase)(nil)
-func (defaultable *DefaultableModule) applyDefaults(ctx TopDownMutatorContext,
+func (defaultable *DefaultableModuleBase) applyDefaults(ctx TopDownMutatorContext,
defaultsList []Defaults) {
for _, defaults := range defaultsList {
@@ -113,7 +117,7 @@
}
}
-func registerDefaultsPreArchMutators(ctx RegisterMutatorsContext) {
+func RegisterDefaultsPreArchMutators(ctx RegisterMutatorsContext) {
ctx.BottomUp("defaults_deps", defaultsDepsMutator).Parallel()
ctx.TopDown("defaults", defaultsMutator).Parallel()
}
diff --git a/android/mutator.go b/android/mutator.go
index 86a5b85..c8f3e8f 100644
--- a/android/mutator.go
+++ b/android/mutator.go
@@ -75,7 +75,7 @@
ctx.TopDown("load_hooks", loadHookMutator).Parallel()
},
registerPrebuiltsPreArchMutators,
- registerDefaultsPreArchMutators,
+ RegisterDefaultsPreArchMutators,
}
var preDeps = []RegisterMutatorFunc{
diff --git a/cc/cc.go b/cc/cc.go
index 8fc0ebd..3824a3b 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -275,7 +275,7 @@
// to construct the output file. Behavior can be customized with a Customizer interface
type Module struct {
android.ModuleBase
- android.DefaultableModule
+ android.DefaultableModuleBase
Properties BaseProperties
unused UnusedProperties
@@ -339,7 +339,7 @@
android.InitAndroidArchModule(c, c.hod, c.multilib)
- android.InitDefaultableModule(c, c)
+ android.InitDefaultableModule(c)
return c
}
@@ -1138,7 +1138,7 @@
//
type Defaults struct {
android.ModuleBase
- android.DefaultsModule
+ android.DefaultsModuleBase
}
func (*Defaults) GenerateAndroidBuildActions(ctx android.ModuleContext) {
@@ -1174,7 +1174,7 @@
&SAbiProperties{},
)
- android.InitDefaultsModule(module, module)
+ android.InitDefaultsModule(module)
return module
}
diff --git a/cc/stl.go b/cc/stl.go
index 9e67145..65d7e40 100644
--- a/cc/stl.go
+++ b/cc/stl.go
@@ -23,7 +23,7 @@
// select the STL library to use. Possible values are "libc++", "libc++_static",
// "stlport", "stlport_static", "ndk", "libstdc++", or "none". Leave blank to select the
// default
- Stl *string
+ Stl *string `android:"arch_variant"`
SelectedStl string `blueprint:"mutated"`
}
diff --git a/java/androidmk.go b/java/androidmk.go
index 9ffd35f..086ba7a 100644
--- a/java/androidmk.go
+++ b/java/androidmk.go
@@ -20,14 +20,14 @@
"android/soong/android"
)
-func (*JavaLibrary) AndroidMk() (ret android.AndroidMkData, err error) {
+func (*Library) AndroidMk() (ret android.AndroidMkData, err error) {
ret.Class = "JAVA_LIBRARIES"
// TODO
err = fmt.Errorf("Not yet implemented")
return
}
-func (*JavaPrebuilt) AndroidMk() (ret android.AndroidMkData, err error) {
+func (*Prebuilt) AndroidMk() (ret android.AndroidMkData, err error) {
ret.Class = "JAVA_LIBRARIES"
// TODO
err = fmt.Errorf("Not yet implemented")
diff --git a/java/app.go b/java/app.go
index fccd382..8a221ef 100644
--- a/java/app.go
+++ b/java/app.go
@@ -234,7 +234,7 @@
var depFile android.OptionalPath
if sdkDep, ok := module.(sdkDependency); ok {
depFile = android.OptionalPathForPath(sdkDep.ClasspathFile())
- } else if javaDep, ok := module.(JavaDependency); ok {
+ } else if javaDep, ok := module.(Dependency); ok {
if ctx.OtherModuleName(module) == "framework-res" {
depFile = android.OptionalPathForPath(javaDep.(*AndroidApp).exportPackage)
}
diff --git a/java/java.go b/java/java.go
index 3d2e960..1ef1c26 100644
--- a/java/java.go
+++ b/java/java.go
@@ -30,12 +30,14 @@
)
func init() {
- android.RegisterModuleType("java_library", JavaLibraryFactory)
- android.RegisterModuleType("java_library_static", JavaLibraryFactory)
- android.RegisterModuleType("java_library_host", JavaLibraryHostFactory)
- android.RegisterModuleType("java_binary", JavaBinaryFactory)
- android.RegisterModuleType("java_binary_host", JavaBinaryHostFactory)
- android.RegisterModuleType("java_prebuilt_library", JavaPrebuiltFactory)
+ android.RegisterModuleType("java_defaults", defaultsFactory)
+
+ android.RegisterModuleType("java_library", LibraryFactory)
+ android.RegisterModuleType("java_library_static", LibraryFactory)
+ android.RegisterModuleType("java_library_host", LibraryHostFactory)
+ android.RegisterModuleType("java_binary", BinaryFactory)
+ android.RegisterModuleType("java_binary_host", BinaryHostFactory)
+ android.RegisterModuleType("java_prebuilt_library", PrebuiltFactory)
android.RegisterModuleType("android_prebuilt_sdk", SdkPrebuiltFactory)
android.RegisterModuleType("android_app", AndroidAppFactory)
@@ -55,7 +57,7 @@
// DroidDoc
// Findbugs
-type compilerProperties struct {
+type CompilerProperties struct {
// list of source files used to compile the Java module. May be .java, .logtags, .proto,
// or .aidl files.
Srcs []string `android:"arch_variant"`
@@ -90,7 +92,7 @@
Jarjar_rules *string
}
-type compilerDeviceProperties struct {
+type CompilerDeviceProperties struct {
// list of module-specific flags that will be used for dex compiles
Dxflags []string `android:"arch_variant"`
@@ -112,9 +114,10 @@
// Module contains the properties and members used by all java module types
type Module struct {
android.ModuleBase
+ android.DefaultableModuleBase
- properties compilerProperties
- deviceProperties compilerDeviceProperties
+ properties CompilerProperties
+ deviceProperties CompilerDeviceProperties
// output file suitable for inserting into the classpath of another compile
classpathFile android.Path
@@ -140,21 +143,26 @@
installFile android.Path
}
-type JavaDependency interface {
+type Dependency interface {
ClasspathFile() android.Path
ClassJarSpecs() []jarSpec
ResourceJarSpecs() []jarSpec
AidlIncludeDirs() android.Paths
}
+func InitJavaModule(module android.DefaultableModule, hod android.HostOrDeviceSupported) {
+ android.InitAndroidArchModule(module, hod, android.MultilibCommon)
+ android.InitDefaultableModule(module)
+}
+
type dependencyTag struct {
blueprint.BaseDependencyTag
name string
}
var (
- javaStaticLibTag = dependencyTag{name: "staticlib"}
- javaLibTag = dependencyTag{name: "javalib"}
+ staticLibTag = dependencyTag{name: "staticlib"}
+ libTag = dependencyTag{name: "javalib"}
bootClasspathTag = dependencyTag{name: "bootclasspath"}
frameworkResTag = dependencyTag{name: "framework-res"}
sdkDependencyTag = dependencyTag{name: "sdk"}
@@ -182,11 +190,11 @@
}
if ctx.Device() && j.deviceProperties.Sdk_version == "" {
- ctx.AddDependency(ctx.Module(), javaLibTag, config.DefaultLibraries...)
+ ctx.AddDependency(ctx.Module(), libTag, config.DefaultLibraries...)
}
}
- ctx.AddDependency(ctx.Module(), javaLibTag, j.properties.Libs...)
- ctx.AddDependency(ctx.Module(), javaStaticLibTag, j.properties.Static_libs...)
+ ctx.AddDependency(ctx.Module(), libTag, j.properties.Libs...)
+ ctx.AddDependency(ctx.Module(), staticLibTag, j.properties.Static_libs...)
}
func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath,
@@ -219,8 +227,8 @@
otherName := ctx.OtherModuleName(module)
tag := ctx.OtherModuleDependencyTag(module)
- javaDep, _ := module.(JavaDependency)
- if javaDep == nil {
+ dep, _ := module.(Dependency)
+ if dep == nil {
switch tag {
case android.DefaultsDepTag, android.SourceDepTag:
default:
@@ -231,13 +239,13 @@
switch tag {
case bootClasspathTag:
- bootClasspath = android.OptionalPathForPath(javaDep.ClasspathFile())
- case javaLibTag:
- classpath = append(classpath, javaDep.ClasspathFile())
- case javaStaticLibTag:
- classpath = append(classpath, javaDep.ClasspathFile())
- classJarSpecs = append(classJarSpecs, javaDep.ClassJarSpecs()...)
- resourceJarSpecs = append(resourceJarSpecs, javaDep.ResourceJarSpecs()...)
+ bootClasspath = android.OptionalPathForPath(dep.ClasspathFile())
+ case libTag:
+ classpath = append(classpath, dep.ClasspathFile())
+ case staticLibTag:
+ classpath = append(classpath, dep.ClasspathFile())
+ classJarSpecs = append(classJarSpecs, dep.ClassJarSpecs()...)
+ resourceJarSpecs = append(resourceJarSpecs, dep.ResourceJarSpecs()...)
case frameworkResTag:
if ctx.ModuleName() == "framework" {
// framework.jar has a one-off dependency on the R.java and Manifest.java files
@@ -258,7 +266,7 @@
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
}
- aidlIncludeDirs = append(aidlIncludeDirs, javaDep.AidlIncludeDirs()...)
+ aidlIncludeDirs = append(aidlIncludeDirs, dep.AidlIncludeDirs()...)
})
return classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
@@ -286,16 +294,16 @@
flags.aidlFlags = "$aidlFlags"
}
- var javacDeps android.Paths
+ var deps android.Paths
if bootClasspath.Valid() {
flags.bootClasspath = "-bootclasspath " + bootClasspath.String()
- javacDeps = append(javacDeps, bootClasspath.Path())
+ deps = append(deps, bootClasspath.Path())
}
if len(classpath) > 0 {
flags.classpath = "-classpath " + strings.Join(classpath.Strings(), ":")
- javacDeps = append(javacDeps, classpath...)
+ deps = append(deps, classpath...)
}
srcFiles := ctx.ExpandSources(j.properties.Srcs, j.properties.Exclude_srcs)
@@ -312,7 +320,7 @@
if len(srcFiles) > 0 {
// Compile java sources into .class files
- classes := TransformJavaToClasses(ctx, srcFiles, srcFileLists, flags, javacDeps)
+ classes := TransformJavaToClasses(ctx, srcFiles, srcFileLists, flags, deps)
if ctx.Failed() {
return
}
@@ -389,7 +397,7 @@
j.outputFile = outputFile
}
-var _ JavaDependency = (*JavaLibrary)(nil)
+var _ Dependency = (*Library)(nil)
func (j *Module) ClasspathFile() android.Path {
return j.classpathFile
@@ -417,22 +425,22 @@
// Java libraries (.jar file)
//
-type JavaLibrary struct {
+type Library struct {
Module
}
-func (j *JavaLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.compile(ctx)
j.installFile = ctx.InstallFileName(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".jar", j.outputFile)
}
-func (j *JavaLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
+func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {
j.deps(ctx)
}
-func JavaLibraryFactory() android.Module {
- module := &JavaLibrary{}
+func LibraryFactory() android.Module {
+ module := &Library{}
module.deviceProperties.Dex = true
@@ -440,16 +448,16 @@
&module.Module.properties,
&module.Module.deviceProperties)
- android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+ InitJavaModule(module, android.HostAndDeviceSupported)
return module
}
-func JavaLibraryHostFactory() android.Module {
- module := &JavaLibrary{}
+func LibraryHostFactory() android.Module {
+ module := &Library{}
module.AddProperties(&module.Module.properties)
- android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
+ InitJavaModule(module, android.HostSupported)
return module
}
@@ -457,19 +465,19 @@
// Java Binaries (.jar file plus wrapper script)
//
-type javaBinaryProperties struct {
+type binaryProperties struct {
// installable script to execute the resulting jar
Wrapper string
}
-type JavaBinary struct {
- JavaLibrary
+type Binary struct {
+ Library
- binaryProperties javaBinaryProperties
+ binaryProperties binaryProperties
}
-func (j *JavaBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
- j.JavaLibrary.GenerateAndroidBuildActions(ctx)
+func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ j.Library.GenerateAndroidBuildActions(ctx)
// Depend on the installed jar (j.installFile) so that the wrapper doesn't get executed by
// another build rule before the jar has been installed.
@@ -477,12 +485,12 @@
j.installFile)
}
-func (j *JavaBinary) DepsMutator(ctx android.BottomUpMutatorContext) {
+func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) {
j.deps(ctx)
}
-func JavaBinaryFactory() android.Module {
- module := &JavaBinary{}
+func BinaryFactory() android.Module {
+ module := &Binary{}
module.deviceProperties.Dex = true
@@ -491,19 +499,19 @@
&module.Module.deviceProperties,
&module.binaryProperties)
- android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
+ InitJavaModule(module, android.HostAndDeviceSupported)
return module
}
-func JavaBinaryHostFactory() android.Module {
- module := &JavaBinary{}
+func BinaryHostFactory() android.Module {
+ module := &Binary{}
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
&module.binaryProperties)
- android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon)
+ InitJavaModule(module, android.HostSupported)
return module
}
@@ -511,7 +519,7 @@
// Java prebuilts
//
-type JavaPrebuilt struct {
+type Prebuilt struct {
android.ModuleBase
prebuilt android.Prebuilt
@@ -519,14 +527,14 @@
classJarSpecs, resourceJarSpecs []jarSpec
}
-func (j *JavaPrebuilt) Prebuilt() *android.Prebuilt {
+func (j *Prebuilt) Prebuilt() *android.Prebuilt {
return &j.prebuilt
}
-func (j *JavaPrebuilt) DepsMutator(ctx android.BottomUpMutatorContext) {
+func (j *Prebuilt) DepsMutator(ctx android.BottomUpMutatorContext) {
}
-func (j *JavaPrebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+func (j *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
prebuilt := j.prebuilt.Path(ctx)
classJarSpec, resourceJarSpec := TransformPrebuiltJarToClasses(ctx, prebuilt)
@@ -537,26 +545,26 @@
ctx.InstallFileName(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".jar", j.classpathFile)
}
-var _ JavaDependency = (*JavaPrebuilt)(nil)
+var _ Dependency = (*Prebuilt)(nil)
-func (j *JavaPrebuilt) ClasspathFile() android.Path {
+func (j *Prebuilt) ClasspathFile() android.Path {
return j.classpathFile
}
-func (j *JavaPrebuilt) ClassJarSpecs() []jarSpec {
+func (j *Prebuilt) ClassJarSpecs() []jarSpec {
return j.classJarSpecs
}
-func (j *JavaPrebuilt) ResourceJarSpecs() []jarSpec {
+func (j *Prebuilt) ResourceJarSpecs() []jarSpec {
return j.resourceJarSpecs
}
-func (j *JavaPrebuilt) AidlIncludeDirs() android.Paths {
+func (j *Prebuilt) AidlIncludeDirs() android.Paths {
return nil
}
-func JavaPrebuiltFactory() android.Module {
- module := &JavaPrebuilt{}
+func PrebuiltFactory() android.Module {
+ module := &Prebuilt{}
module.AddProperties(&module.prebuilt.Properties)
@@ -569,7 +577,7 @@
//
type sdkDependency interface {
- JavaDependency
+ Dependency
AidlPreprocessed() android.OptionalPath
}
@@ -580,7 +588,7 @@
}
type sdkPrebuilt struct {
- JavaPrebuilt
+ Prebuilt
sdkProperties sdkPrebuiltProperties
@@ -588,7 +596,7 @@
}
func (j *sdkPrebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
- j.JavaPrebuilt.GenerateAndroidBuildActions(ctx)
+ j.Prebuilt.GenerateAndroidBuildActions(ctx)
j.aidlPreprocessed = android.OptionalPathForModuleSrc(ctx, j.sdkProperties.Aidl_preprocessed)
}
@@ -616,3 +624,35 @@
}
return false
}
+
+//
+// Defaults
+//
+type Defaults struct {
+ android.ModuleBase
+ android.DefaultsModuleBase
+}
+
+func (*Defaults) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+}
+
+func (d *Defaults) DepsMutator(ctx android.BottomUpMutatorContext) {
+}
+
+func defaultsFactory() android.Module {
+ return DefaultsFactory()
+}
+
+func DefaultsFactory(props ...interface{}) android.Module {
+ module := &Defaults{}
+
+ module.AddProperties(props...)
+ module.AddProperties(
+ &CompilerProperties{},
+ &CompilerDeviceProperties{},
+ )
+
+ android.InitDefaultsModule(module)
+
+ return module
+}
diff --git a/java/java_test.go b/java/java_test.go
index bd6451c..3443610 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -54,8 +54,10 @@
ctx := android.NewTestContext()
ctx.RegisterModuleType("android_app", android.ModuleFactoryAdaptor(AndroidAppFactory))
- ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(JavaLibraryFactory))
- ctx.RegisterModuleType("java_prebuilt_library", android.ModuleFactoryAdaptor(JavaPrebuiltFactory))
+ ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(LibraryFactory))
+ ctx.RegisterModuleType("java_prebuilt_library", android.ModuleFactoryAdaptor(PrebuiltFactory))
+ ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
+ ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
ctx.Register()
extraModules := []string{"core-libart", "frameworks", "sdk_v14"}
@@ -230,6 +232,49 @@
}
}
+func TestDefaults(t *testing.T) {
+ ctx := testJava(t, `
+ java_defaults {
+ name: "defaults",
+ srcs: ["a.java"],
+ libs: ["bar"],
+ static_libs: ["baz"],
+ }
+
+ java_library {
+ name: "foo",
+ defaults: ["defaults"],
+ }
+
+ java_library {
+ name: "bar",
+ srcs: ["b.java"],
+ }
+
+ java_library {
+ name: "baz",
+ srcs: ["c.java"],
+ }
+ `)
+
+ javac := ctx.ModuleForTests("foo", "").Rule("javac")
+ jar := ctx.ModuleForTests("foo", "").Rule("jar")
+
+ if len(javac.Inputs) != 1 || javac.Inputs[0].String() != "a.java" {
+ t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs)
+ }
+
+ bar := filepath.Join(buildDir, ".intermediates", "bar", "classes-full-debug.jar")
+ if !strings.Contains(javac.Args["classpath"], bar) {
+ t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], bar)
+ }
+
+ baz := filepath.Join(buildDir, ".intermediates", "baz", "classes.list")
+ if !strings.Contains(jar.Args["jarArgs"], baz) {
+ t.Errorf("foo jarArgs %v does not contain %q", jar.Args["jarArgs"], baz)
+ }
+}
+
func fail(t *testing.T, errs []error) {
if len(errs) > 0 {
for _, err := range errs {