Remove old-style support for translated second architectures
Translated second architectures now go in NativeBridgeArch instead of DeviceSecondaryArch. This reapplies I568046330abc002d4eed582cb999b62a5eaba790 with ctx.Config().HasMulitlibConflict() added to fix the NDK build, which has arm64, arm, x86_64, and x86 architectures enabled. Test: m checkbuild Test: OUT_DIR=out_ndk build/soong/scripts/build-ndk-prebuilts.sh Test: no change to build.ninja or Android-aosp_cf_x86_phone.mk Change-Id: Iadcafbd64bfb9579ae7c86914927c43a062b0c8e
This commit is contained in:
parent
1f6c94a3ac
commit
3b19f5d71d
|
@ -527,7 +527,6 @@ type Arch struct {
|
|||
CpuVariant string
|
||||
Abi []string
|
||||
ArchFeatures []string
|
||||
Native bool
|
||||
}
|
||||
|
||||
func (a Arch) String() string {
|
||||
|
@ -1482,11 +1481,6 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
|
|||
addTarget(Android, *variables.DeviceSecondaryArch,
|
||||
variables.DeviceSecondaryArchVariant, variables.DeviceSecondaryCpuVariant,
|
||||
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 != "" {
|
||||
|
@ -1634,7 +1628,7 @@ func decodeArchSettings(os OsType, archConfigs []archConfig) ([]Target, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
arch.Native = false
|
||||
|
||||
ret = append(ret, Target{
|
||||
Os: Android,
|
||||
Arch: arch,
|
||||
|
@ -1663,7 +1657,6 @@ func decodeArch(os OsType, arch string, archVariant, cpuVariant *string, abi []s
|
|||
ArchVariant: stringPtr(archVariant),
|
||||
CpuVariant: stringPtr(cpuVariant),
|
||||
Abi: abi,
|
||||
Native: true,
|
||||
}
|
||||
|
||||
if a.ArchVariant == a.ArchType.Name || a.ArchVariant == "generic" {
|
||||
|
|
|
@ -93,6 +93,10 @@ type config struct {
|
|||
BuildOsVariant 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
|
||||
|
||||
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.Targets[Android] = []Target{
|
||||
{Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: X86, ArchVariant: "silvermont", Native: true, 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: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled, "x86", "arm"},
|
||||
{Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: X86, ArchVariant: "silvermont", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled, "x86_64", "arm64"},
|
||||
{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled, "x86", "arm"},
|
||||
}
|
||||
|
||||
return testConfig
|
||||
|
@ -255,7 +259,7 @@ func TestArchConfigFuchsia(buildDir string, env map[string]string) Config {
|
|||
|
||||
config.Targets = map[OsType][]Target{
|
||||
Fuchsia: []Target{
|
||||
{Fuchsia, Arch{ArchType: Arm64, ArchVariant: "", Native: true}, NativeBridgeDisabled, "", ""},
|
||||
{Fuchsia, Arch{ArchType: Arm64, ArchVariant: ""}, NativeBridgeDisabled, "", ""},
|
||||
},
|
||||
BuildOs: []Target{
|
||||
{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""},
|
||||
|
@ -272,8 +276,8 @@ func TestArchConfig(buildDir string, env map[string]string) Config {
|
|||
|
||||
config.Targets = map[OsType][]Target{
|
||||
Android: []Target{
|
||||
{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", ""},
|
||||
{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", ""},
|
||||
},
|
||||
BuildOs: []Target{
|
||||
{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""},
|
||||
|
@ -305,8 +309,9 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
|
|||
|
||||
env: originalEnv,
|
||||
|
||||
srcDir: srcDir,
|
||||
buildDir: buildDir,
|
||||
srcDir: srcDir,
|
||||
buildDir: buildDir,
|
||||
multilibConflicts: make(map[ArchType]bool),
|
||||
}
|
||||
|
||||
config.deviceConfig = &deviceConfig{
|
||||
|
@ -360,6 +365,14 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
|
|||
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.BuildOsVariant = 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)
|
||||
}
|
||||
|
||||
func (c *config) HasMultilibConflict(arch ArchType) bool {
|
||||
return c.multilibConflicts[arch]
|
||||
}
|
||||
|
||||
func (c *deviceConfig) Arches() []Arch {
|
||||
var arches []Arch
|
||||
for _, target := range c.config.Targets[Android] {
|
||||
|
@ -1009,19 +1026,6 @@ func findOverrideValue(overrides []string, name string, errorMsg string) (newVal
|
|||
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 {
|
||||
if c.productVariables.IntegerOverflowExcludePaths == nil {
|
||||
return false
|
||||
|
|
|
@ -829,9 +829,7 @@ func getCopyManifestForNativeLibrary(ccMod *cc.Module, config android.Config, ha
|
|||
dirInApex = "lib64"
|
||||
}
|
||||
dirInApex = filepath.Join(dirInApex, ccMod.RelativeInstallPath())
|
||||
if !ccMod.Arch().Native {
|
||||
dirInApex = filepath.Join(dirInApex, ccMod.Arch().ArchType.String())
|
||||
} else if ccMod.Target().NativeBridge == android.NativeBridgeEnabled {
|
||||
if ccMod.Target().NativeBridge == android.NativeBridgeEnabled {
|
||||
dirInApex = filepath.Join(dirInApex, ccMod.Target().NativeBridgeRelativePath)
|
||||
}
|
||||
if handleSpecialLibs && cc.InstallToBootstrap(ccMod.BaseModuleName(), config) {
|
||||
|
@ -854,9 +852,7 @@ func getCopyManifestForNativeLibrary(ccMod *cc.Module, config android.Config, ha
|
|||
|
||||
func getCopyManifestForExecutable(cc *cc.Module) (fileToCopy android.Path, dirInApex string) {
|
||||
dirInApex = filepath.Join("bin", cc.RelativeInstallPath())
|
||||
if !cc.Arch().Native {
|
||||
dirInApex = filepath.Join(dirInApex, cc.Arch().ArchType.String())
|
||||
} else if cc.Target().NativeBridge == android.NativeBridgeEnabled {
|
||||
if cc.Target().NativeBridge == android.NativeBridgeEnabled {
|
||||
dirInApex = filepath.Join(dirInApex, cc.Target().NativeBridgeRelativePath)
|
||||
}
|
||||
fileToCopy = cc.OutputFile().Path()
|
||||
|
|
|
@ -1467,10 +1467,10 @@ func TestVndkApexSkipsNativeBridgeSupportedModules(t *testing.T) {
|
|||
}
|
||||
`, withTargets(map[android.OsType][]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.Arm, ArchVariant: "armv7-a-neon", Native: true, 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, ArchVariant: "silvermont", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"},
|
||||
{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", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeDisabled, NativeBridgeHostArchName: "", NativeBridgeRelativePath: ""},
|
||||
{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", Abi: []string{"armeabi-v7a"}}, NativeBridge: android.NativeBridgeEnabled, NativeBridgeHostArchName: "arm", NativeBridgeRelativePath: "x86"},
|
||||
},
|
||||
}))
|
||||
|
||||
|
|
|
@ -453,7 +453,7 @@ func (binary *binaryDecorator) install(ctx ModuleContext, file android.Path) {
|
|||
// Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory.
|
||||
// The original path becomes a symlink to the corresponding file in the
|
||||
// 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 ctx.Device() && isBionic(ctx.baseModuleName()) {
|
||||
binary.installSymlinkToRuntimeApex(ctx, file)
|
||||
|
|
|
@ -66,11 +66,10 @@ func (installer *baseInstaller) installDir(ctx ModuleContext) android.OutputPath
|
|||
if ctx.toolchain().Is64Bit() && 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 {
|
||||
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() {
|
||||
dir = filepath.Join(dir, "vendor")
|
||||
|
|
|
@ -1032,7 +1032,7 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
|
|||
// Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory.
|
||||
// The original path becomes a symlink to the corresponding file in the
|
||||
// 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 ctx.Device() {
|
||||
library.installSymlinkToRuntimeApex(ctx, file)
|
||||
|
|
|
@ -126,10 +126,6 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
|
|||
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 imagesDeps []android.Paths
|
||||
|
|
|
@ -87,11 +87,7 @@ var systemServerClasspathKey = android.NewOnceKey("systemServerClasspath")
|
|||
// supported through native bridge.
|
||||
func dexpreoptTargets(ctx android.PathContext) []android.Target {
|
||||
var targets []android.Target
|
||||
for i, target := range ctx.Config().Targets[android.Android] {
|
||||
if ctx.Config().SecondArchIsTranslated() && i > 0 {
|
||||
break
|
||||
}
|
||||
|
||||
for _, target := range ctx.Config().Targets[android.Android] {
|
||||
if target.NativeBridge == android.NativeBridgeDisabled {
|
||||
targets = append(targets, target)
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ func (installer *pythonInstaller) installDir(ctx android.ModuleContext) android.
|
|||
if ctx.Arch().ArchType.Multilib == "lib64" && 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())
|
||||
}
|
||||
return android.PathForModuleInstall(ctx, dir, installer.relative)
|
||||
|
|
|
@ -157,7 +157,7 @@ func (compiler *baseCompiler) installDir(ctx ModuleContext) android.OutputPath {
|
|||
if ctx.toolchain().Is64Bit() && 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())
|
||||
}
|
||||
return android.PathForModuleInstall(ctx, dir, compiler.subDir,
|
||||
|
|
Loading…
Reference in New Issue