Merge "Remove old-style support for translated second architectures"

This commit is contained in:
Treehugger Robot 2019-10-07 20:48:07 +00:00 committed by Gerrit Code Review
commit c6136c9d65
11 changed files with 40 additions and 56 deletions

View File

@ -527,7 +527,6 @@ type Arch struct {
CpuVariant string CpuVariant string
Abi []string Abi []string
ArchFeatures []string ArchFeatures []string
Native bool
} }
func (a Arch) String() string { func (a Arch) String() string {
@ -1361,11 +1360,6 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
addTarget(Android, *variables.DeviceSecondaryArch, addTarget(Android, *variables.DeviceSecondaryArch,
variables.DeviceSecondaryArchVariant, variables.DeviceSecondaryCpuVariant, variables.DeviceSecondaryArchVariant, variables.DeviceSecondaryCpuVariant,
variables.DeviceSecondaryAbi, NativeBridgeDisabled, nil, nil) variables.DeviceSecondaryAbi, NativeBridgeDisabled, nil, nil)
deviceArches := targets[Android]
if deviceArches[0].Arch.ArchType.Multilib == deviceArches[1].Arch.ArchType.Multilib {
deviceArches[1].Arch.Native = false
}
} }
if variables.NativeBridgeArch != nil && *variables.NativeBridgeArch != "" { if variables.NativeBridgeArch != nil && *variables.NativeBridgeArch != "" {
@ -1513,7 +1507,7 @@ func decodeArchSettings(os OsType, archConfigs []archConfig) ([]Target, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
arch.Native = false
ret = append(ret, Target{ ret = append(ret, Target{
Os: Android, Os: Android,
Arch: arch, Arch: arch,
@ -1542,7 +1536,6 @@ func decodeArch(os OsType, arch string, archVariant, cpuVariant *string, abi []s
ArchVariant: stringPtr(archVariant), ArchVariant: stringPtr(archVariant),
CpuVariant: stringPtr(cpuVariant), CpuVariant: stringPtr(cpuVariant),
Abi: abi, Abi: abi,
Native: true,
} }
if a.ArchVariant == a.ArchType.Name || a.ArchVariant == "generic" { if a.ArchVariant == a.ArchType.Name || a.ArchVariant == "generic" {

View File

@ -93,6 +93,10 @@ type config struct {
BuildOsVariant string BuildOsVariant string
BuildOsCommonVariant string BuildOsCommonVariant string
// multilibConflicts for an ArchType is true if there is earlier configured device architecture with the same
// multilib value.
multilibConflicts map[ArchType]bool
deviceConfig *deviceConfig deviceConfig *deviceConfig
srcDir string // the path of the root source directory srcDir string // the path of the root source directory
@ -240,10 +244,10 @@ func TestArchConfigNativeBridge(buildDir string, env map[string]string) Config {
config := testConfig.config config := testConfig.config
config.Targets[Android] = []Target{ config.Targets[Android] = []Target{
{Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""}, {Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
{Android, Arch{ArchType: X86, ArchVariant: "silvermont", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""}, {Android, Arch{ArchType: X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""},
{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled, "x86_64", "arm64"}, {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled, "x86_64", "arm64"},
{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled, "x86", "arm"}, {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled, "x86", "arm"},
} }
return testConfig return testConfig
@ -255,7 +259,7 @@ func TestArchConfigFuchsia(buildDir string, env map[string]string) Config {
config.Targets = map[OsType][]Target{ config.Targets = map[OsType][]Target{
Fuchsia: []Target{ Fuchsia: []Target{
{Fuchsia, Arch{ArchType: Arm64, ArchVariant: "", Native: true}, NativeBridgeDisabled, "", ""}, {Fuchsia, Arch{ArchType: Arm64, ArchVariant: ""}, NativeBridgeDisabled, "", ""},
}, },
BuildOs: []Target{ BuildOs: []Target{
{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""}, {BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""},
@ -272,8 +276,8 @@ func TestArchConfig(buildDir string, env map[string]string) Config {
config.Targets = map[OsType][]Target{ config.Targets = map[OsType][]Target{
Android: []Target{ Android: []Target{
{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""}, {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""}, {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""},
}, },
BuildOs: []Target{ BuildOs: []Target{
{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""}, {BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""},
@ -307,6 +311,7 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
srcDir: srcDir, srcDir: srcDir,
buildDir: buildDir, buildDir: buildDir,
multilibConflicts: make(map[ArchType]bool),
} }
config.deviceConfig = &deviceConfig{ config.deviceConfig = &deviceConfig{
@ -360,6 +365,14 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
targets[Android] = androidTargets targets[Android] = androidTargets
} }
multilib := make(map[string]bool)
for _, target := range targets[Android] {
if seen := multilib[target.Arch.ArchType.Multilib]; seen {
config.multilibConflicts[target.Arch.ArchType] = true
}
multilib[target.Arch.ArchType.Multilib] = true
}
config.Targets = targets config.Targets = targets
config.BuildOsVariant = targets[BuildOs][0].String() config.BuildOsVariant = targets[BuildOs][0].String()
config.BuildOsCommonVariant = getCommonTargets(targets[BuildOs])[0].String() config.BuildOsCommonVariant = getCommonTargets(targets[BuildOs])[0].String()
@ -852,6 +865,10 @@ func (c *config) VndkSnapshotBuildArtifacts() bool {
return Bool(c.productVariables.VndkSnapshotBuildArtifacts) return Bool(c.productVariables.VndkSnapshotBuildArtifacts)
} }
func (c *config) HasMultilibConflict(arch ArchType) bool {
return c.multilibConflicts[arch]
}
func (c *deviceConfig) Arches() []Arch { func (c *deviceConfig) Arches() []Arch {
var arches []Arch var arches []Arch
for _, target := range c.config.Targets[Android] { for _, target := range c.config.Targets[Android] {
@ -1009,19 +1026,6 @@ func findOverrideValue(overrides []string, name string, errorMsg string) (newVal
return "", false return "", false
} }
// SecondArchIsTranslated returns true if the primary device arch is X86 or X86_64 and the device also has an arch
// that is Arm or Arm64.
func (c *config) SecondArchIsTranslated() bool {
deviceTargets := c.Targets[Android]
if len(deviceTargets) < 2 {
return false
}
arch := deviceTargets[0].Arch
return (arch.ArchType == X86 || arch.ArchType == X86_64) && hasArmAndroidArch(deviceTargets)
}
func (c *config) IntegerOverflowDisabledForPath(path string) bool { func (c *config) IntegerOverflowDisabledForPath(path string) bool {
if c.productVariables.IntegerOverflowExcludePaths == nil { if c.productVariables.IntegerOverflowExcludePaths == nil {
return false return false

View File

@ -869,9 +869,7 @@ func getCopyManifestForNativeLibrary(ccMod *cc.Module, config android.Config, ha
dirInApex = "lib64" dirInApex = "lib64"
} }
dirInApex = filepath.Join(dirInApex, ccMod.RelativeInstallPath()) dirInApex = filepath.Join(dirInApex, ccMod.RelativeInstallPath())
if !ccMod.Arch().Native { if ccMod.Target().NativeBridge == android.NativeBridgeEnabled {
dirInApex = filepath.Join(dirInApex, ccMod.Arch().ArchType.String())
} else if ccMod.Target().NativeBridge == android.NativeBridgeEnabled {
dirInApex = filepath.Join(dirInApex, ccMod.Target().NativeBridgeRelativePath) dirInApex = filepath.Join(dirInApex, ccMod.Target().NativeBridgeRelativePath)
} }
if handleSpecialLibs && cc.InstallToBootstrap(ccMod.BaseModuleName(), config) { if handleSpecialLibs && cc.InstallToBootstrap(ccMod.BaseModuleName(), config) {
@ -894,9 +892,7 @@ func getCopyManifestForNativeLibrary(ccMod *cc.Module, config android.Config, ha
func getCopyManifestForExecutable(cc *cc.Module) (fileToCopy android.Path, dirInApex string) { func getCopyManifestForExecutable(cc *cc.Module) (fileToCopy android.Path, dirInApex string) {
dirInApex = filepath.Join("bin", cc.RelativeInstallPath()) dirInApex = filepath.Join("bin", cc.RelativeInstallPath())
if !cc.Arch().Native { if cc.Target().NativeBridge == android.NativeBridgeEnabled {
dirInApex = filepath.Join(dirInApex, cc.Arch().ArchType.String())
} else if cc.Target().NativeBridge == android.NativeBridgeEnabled {
dirInApex = filepath.Join(dirInApex, cc.Target().NativeBridgeRelativePath) dirInApex = filepath.Join(dirInApex, cc.Target().NativeBridgeRelativePath)
} }
fileToCopy = cc.OutputFile().Path() fileToCopy = cc.OutputFile().Path()

View File

@ -1501,10 +1501,10 @@ func TestVndkApexSkipsNativeBridgeSupportedModules(t *testing.T) {
} }
`, withTargets(map[android.OsType][]android.Target{ `, withTargets(map[android.OsType][]android.Target{
android.Android: []android.Target{ android.Android: []android.Target{
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""}, {Os: android.Android, Arch: android.Arch{ArchType: android.Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
{Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""}, {Os: android.Android, Arch: android.Arch{ArchType: android.Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
{Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm64", NativeBridgeRelativePath: "x86_64"}, {Os: android.Android, Arch: android.Arch{ArchType: android.X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm64", NativeBridgeRelativePath: "x86_64"},
{Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"}, {Os: android.Android, Arch: android.Arch{ArchType: android.X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"},
}, },
})) }))

View File

@ -453,7 +453,7 @@ func (binary *binaryDecorator) install(ctx ModuleContext, file android.Path) {
// Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory. // Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory.
// The original path becomes a symlink to the corresponding file in the // The original path becomes a symlink to the corresponding file in the
// runtime APEX. // runtime APEX.
translatedArch := ctx.Target().NativeBridge == android.NativeBridgeEnabled || !ctx.Arch().Native translatedArch := ctx.Target().NativeBridge == android.NativeBridgeEnabled
if InstallToBootstrap(ctx.baseModuleName(), ctx.Config()) && !translatedArch && ctx.apexName() == "" && !ctx.inRecovery() { if InstallToBootstrap(ctx.baseModuleName(), ctx.Config()) && !translatedArch && ctx.apexName() == "" && !ctx.inRecovery() {
if ctx.Device() && isBionic(ctx.baseModuleName()) { if ctx.Device() && isBionic(ctx.baseModuleName()) {
binary.installSymlinkToRuntimeApex(ctx, file) binary.installSymlinkToRuntimeApex(ctx, file)

View File

@ -66,11 +66,10 @@ func (installer *baseInstaller) installDir(ctx ModuleContext) android.InstallPat
if ctx.toolchain().Is64Bit() && installer.dir64 != "" { if ctx.toolchain().Is64Bit() && installer.dir64 != "" {
dir = installer.dir64 dir = installer.dir64
} }
if !ctx.Host() && !ctx.Arch().Native {
dir = filepath.Join(dir, ctx.Arch().ArchType.String())
}
if ctx.Target().NativeBridge == android.NativeBridgeEnabled { if ctx.Target().NativeBridge == android.NativeBridgeEnabled {
dir = filepath.Join(dir, ctx.Target().NativeBridgeRelativePath) dir = filepath.Join(dir, ctx.Target().NativeBridgeRelativePath)
} else if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) {
dir = filepath.Join(dir, ctx.Arch().ArchType.String())
} }
if installer.location == InstallInData && ctx.useVndk() { if installer.location == InstallInData && ctx.useVndk() {
dir = filepath.Join(dir, "vendor") dir = filepath.Join(dir, "vendor")

View File

@ -1048,7 +1048,7 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
// Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory. // Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory.
// The original path becomes a symlink to the corresponding file in the // The original path becomes a symlink to the corresponding file in the
// runtime APEX. // runtime APEX.
translatedArch := ctx.Target().NativeBridge == android.NativeBridgeEnabled || !ctx.Arch().Native translatedArch := ctx.Target().NativeBridge == android.NativeBridgeEnabled
if InstallToBootstrap(ctx.baseModuleName(), ctx.Config()) && !library.buildStubs() && !translatedArch && !ctx.inRecovery() { if InstallToBootstrap(ctx.baseModuleName(), ctx.Config()) && !library.buildStubs() && !translatedArch && !ctx.inRecovery() {
if ctx.Device() { if ctx.Device() {
library.installSymlinkToRuntimeApex(ctx, file) library.installSymlinkToRuntimeApex(ctx, file)

View File

@ -126,10 +126,6 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
archs = archs[:1] archs = archs[:1]
} }
} }
if ctx.Config().SecondArchIsTranslated() {
// Only preopt primary arch for translated arch since there is only an image there.
archs = archs[:1]
}
var images android.Paths var images android.Paths
var imagesDeps []android.Paths var imagesDeps []android.Paths

View File

@ -87,11 +87,7 @@ var systemServerClasspathKey = android.NewOnceKey("systemServerClasspath")
// supported through native bridge. // supported through native bridge.
func dexpreoptTargets(ctx android.PathContext) []android.Target { func dexpreoptTargets(ctx android.PathContext) []android.Target {
var targets []android.Target var targets []android.Target
for i, target := range ctx.Config().Targets[android.Android] { for _, target := range ctx.Config().Targets[android.Android] {
if ctx.Config().SecondArchIsTranslated() && i > 0 {
break
}
if target.NativeBridge == android.NativeBridgeDisabled { if target.NativeBridge == android.NativeBridgeDisabled {
targets = append(targets, target) targets = append(targets, target)
} }

View File

@ -52,7 +52,7 @@ func (installer *pythonInstaller) installDir(ctx android.ModuleContext) android.
if ctx.Arch().ArchType.Multilib == "lib64" && installer.dir64 != "" { if ctx.Arch().ArchType.Multilib == "lib64" && installer.dir64 != "" {
dir = installer.dir64 dir = installer.dir64
} }
if !ctx.Host() && !ctx.Arch().Native { if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) {
dir = filepath.Join(dir, ctx.Arch().ArchType.String()) dir = filepath.Join(dir, ctx.Arch().ArchType.String())
} }
return android.PathForModuleInstall(ctx, dir, installer.relative) return android.PathForModuleInstall(ctx, dir, installer.relative)

View File

@ -184,7 +184,7 @@ func (compiler *baseCompiler) installDir(ctx ModuleContext) android.InstallPath
if ctx.toolchain().Is64Bit() && compiler.dir64 != "" { if ctx.toolchain().Is64Bit() && compiler.dir64 != "" {
dir = compiler.dir64 dir = compiler.dir64
} }
if (!ctx.Host() && !ctx.Arch().Native) || ctx.Target().NativeBridge == android.NativeBridgeEnabled { if !ctx.Host() || ctx.Target().NativeBridge == android.NativeBridgeEnabled {
dir = filepath.Join(dir, ctx.Arch().ArchType.String()) dir = filepath.Join(dir, ctx.Arch().ArchType.String())
} }
return android.PathForModuleInstall(ctx, dir, compiler.subDir, return android.PathForModuleInstall(ctx, dir, compiler.subDir,