diff options
author | Dan Willemsen <dwillemsen@google.com> | 2016-01-12 23:07:05 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2016-01-13 14:39:11 -0800 |
commit | 322acafe9ebae1b41ad3242f97f60c96af3f21ae (patch) | |
tree | 7521ce55890359eef163c3fdd2e49d2dfc531186 /common | |
parent | fc9c28ca02d2e59c03d387ab17eddf974d794fa8 (diff) | |
download | build_soong-322acafe9ebae1b41ad3242f97f60c96af3f21ae.tar.gz build_soong-322acafe9ebae1b41ad3242f97f60c96af3f21ae.tar.bz2 build_soong-322acafe9ebae1b41ad3242f97f60c96af3f21ae.zip |
Add Mega_device configuration option
This lets you configure soong to build for every supported architecture
in one build. Installation is disabled, since it's not actually setting
up multiple devices, and would try to install multiple versions to a
single path.
Configurations that do not build are commented out.
Change-Id: I92ddea0b9ddbd53e12187c7f581b8ac5bd5fdec3
Diffstat (limited to 'common')
-rw-r--r-- | common/arch.go | 59 | ||||
-rw-r--r-- | common/config.go | 12 | ||||
-rw-r--r-- | common/module.go | 22 |
3 files changed, 83 insertions, 10 deletions
diff --git a/common/arch.go b/common/arch.go index 1d7d0de7..70ac85c2 100644 --- a/common/arch.go +++ b/common/arch.go @@ -901,6 +901,65 @@ func decodeArchProductVariables(variables productVariables) (map[HostType][]Arch return hostTypeArches, deviceArches, nil } +func decodeMegaDevice() ([]Arch, error) { + archSettings := []struct { + arch string + archVariant string + cpuVariant string + abi []string + }{ + {"arm", "armv7-a-neon", "cortex-a7", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "cortex-a8", []string{"armeabi-v7a"}}, + // gtest_all_test.cc fails to build: + // error in backend: Unsupported library call operation! + //{"arm", "armv7-a-neon", "cortex-a9", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "cortex-a15", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "cortex-a53", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "cortex-a53.a57", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "denver", []string{"armeabi-v7a"}}, + {"arm", "armv7-a-neon", "krait", []string{"armeabi-v7a"}}, + {"arm64", "", "cortex-a53", []string{"arm64-v8a"}}, + {"arm64", "", "denver64", []string{"arm64-v8a"}}, + // mips is missing __popcountsi2 from libc + //{"mips", "mips32-fp", "", []string{"mips"}}, + //{"mips", "mips32r2-fp", "", []string{"mips"}}, + //{"mips", "mips32r2-fp-xburst", "", []string{"mips"}}, + //{"mips", "mips32r6", "", []string{"mips32r6"}}, + // mips32r2dsp[r2]-fp also fails in the assembler for dmisc.c in libc: + // Error: invalid operands `mtlo $ac0,$8' + // Error: invalid operands `mthi $ac0,$3' + //{"mips", "mips32r2dsp-fp", "", []string{"mips"}}, + //{"mips", "mips32r2dspr2-fp", "", []string{"mips"}}, + // mips64r2 is mismatching 64r2 and 64r6 libraries during linking to libgcc + //{"mips64", "mips64r2", "", []string{"mips64"}}, + {"mips64", "mips64r6", "", []string{"mips64"}}, + {"x86", "", "", []string{"x86"}}, + {"x86", "atom", "", []string{"x86"}}, + {"x86", "haswell", "", []string{"x86"}}, + {"x86", "ivybridge", "", []string{"x86"}}, + {"x86", "sandybridge", "", []string{"x86"}}, + {"x86", "silvermont", "", []string{"x86"}}, + {"x86_64", "", "", []string{"x86_64"}}, + {"x86_64", "haswell", "", []string{"x86_64"}}, + {"x86_64", "ivybridge", "", []string{"x86_64"}}, + {"x86_64", "sandybridge", "", []string{"x86_64"}}, + {"x86_64", "silvermont", "", []string{"x86_64"}}, + } + + var ret []Arch + + for _, config := range archSettings { + arch, err := decodeArch(config.arch, &config.archVariant, + &config.cpuVariant, &config.abi) + if err != nil { + return nil, err + } + ret = append(ret, arch) + } + + return ret, nil +} + // Convert a set of strings from product variables into a single Arch struct func decodeArch(arch string, archVariant, cpuVariant *string, abi *[]string) (Arch, error) { stringPtr := func(p *string) string { diff --git a/common/config.go b/common/config.go index 74e06603..a4a20393 100644 --- a/common/config.go +++ b/common/config.go @@ -35,6 +35,7 @@ const productVariablesFileName = "soong.variables" // A FileConfigurableOptions contains options which can be configured by the // config file. These will be included in the config struct. type FileConfigurableOptions struct { + Mega_device *bool `json:",omitempty"` } func (f *FileConfigurableOptions) SetDefaultConfig() { @@ -179,6 +180,13 @@ func NewConfig(srcDir, buildDir string) (Config, error) { return Config{}, err } + if Bool(config.Mega_device) { + deviceArches, err = decodeMegaDevice() + if err != nil { + return Config{}, err + } + } + config.HostArches = hostArches config.DeviceArches = deviceArches @@ -295,3 +303,7 @@ func (c *config) DefaultAppCertificate(ctx PathContext) SourcePath { func (c *config) AllowMissingDependencies() bool { return Bool(c.ProductVariables.Unbundled_build) } + +func (c *config) SkipInstall() bool { + return c.EmbeddedInMake() || Bool(c.Mega_device) +} diff --git a/common/module.go b/common/module.go index 0f6ecb5a..988104ff 100644 --- a/common/module.go +++ b/common/module.go @@ -519,17 +519,19 @@ func (a *androidModuleContext) InstallFileName(installPath OutputPath, name stri fullInstallPath := installPath.Join(a, name) - deps = append(deps, a.installDeps...) - - a.ModuleBuild(pctx, ModuleBuildParams{ - Rule: Cp, - Output: fullInstallPath, - Input: srcPath, - OrderOnly: Paths(deps), - Default: !a.AConfig().EmbeddedInMake(), - }) + if !a.AConfig().SkipInstall() { + deps = append(deps, a.installDeps...) + + a.ModuleBuild(pctx, ModuleBuildParams{ + Rule: Cp, + Output: fullInstallPath, + Input: srcPath, + OrderOnly: Paths(deps), + Default: true, + }) - a.installFiles = append(a.installFiles, fullInstallPath) + a.installFiles = append(a.installFiles, fullInstallPath) + } a.checkbuildFiles = append(a.checkbuildFiles, srcPath) return fullInstallPath } |