HostCross is an attribute of a Target, not OsType
A host target is considered as being cross-compiled when the target can't run natively on the build machine. For example, linux_glibc/x86_64 is a non-cross target on a standard x86/Linux machine, but is a cross host on Mac. Previously, whether cross or not was a static attribute of an OsType. For example, Windows was always considered as cross host, while linux_bionic was not. This becomes a problem when we support more host targets like linux_bionic/arm64 which should be cross-host on standard x86/Linux machines. This change removes HostCross from the OsClass type and instead adds a property HostCross to the Target type. When a target is being added, it is initialized to true when the target can't run natively on the current build machine. Bug: 168086242 Test: m Change-Id: Ic37c8db918873ddf324c86b12b5412952b0f2be2
This commit is contained in:
@@ -578,7 +578,7 @@ var (
|
||||
Linux = NewOsType("linux_glibc", Host, false)
|
||||
Darwin = NewOsType("darwin", Host, false)
|
||||
LinuxBionic = NewOsType("linux_bionic", Host, false)
|
||||
Windows = NewOsType("windows", HostCross, true)
|
||||
Windows = NewOsType("windows", Host, true)
|
||||
Android = NewOsType("android", Device, false)
|
||||
Fuchsia = NewOsType("fuchsia", Device, false)
|
||||
|
||||
@@ -609,7 +609,6 @@ const (
|
||||
Generic OsClass = iota
|
||||
Device
|
||||
Host
|
||||
HostCross
|
||||
)
|
||||
|
||||
func (class OsClass) String() string {
|
||||
@@ -620,8 +619,6 @@ func (class OsClass) String() string {
|
||||
return "device"
|
||||
case Host:
|
||||
return "host"
|
||||
case HostCross:
|
||||
return "host cross"
|
||||
default:
|
||||
panic(fmt.Errorf("unknown class %d", class))
|
||||
}
|
||||
@@ -681,6 +678,11 @@ type Target struct {
|
||||
NativeBridge NativeBridgeSupport
|
||||
NativeBridgeHostArchName string
|
||||
NativeBridgeRelativePath string
|
||||
|
||||
// HostCross is true when the target cannot run natively on the current build host.
|
||||
// For example, linux_glibc_x86 returns true on a regular x86/i686/Linux machines, but returns false
|
||||
// on Mac (different OS), or on 64-bit only i686/Linux machines (unsupported arch).
|
||||
HostCross bool
|
||||
}
|
||||
|
||||
func (target Target) String() string {
|
||||
@@ -739,26 +741,15 @@ func osMutator(bpctx blueprint.BottomUpMutatorContext) {
|
||||
return
|
||||
}
|
||||
|
||||
osClasses := base.OsClassSupported()
|
||||
|
||||
var moduleOSList []OsType
|
||||
|
||||
for _, os := range OsTypeList {
|
||||
supportedClass := false
|
||||
for _, osClass := range osClasses {
|
||||
if os.Class == osClass {
|
||||
supportedClass = true
|
||||
for _, t := range mctx.Config().Targets[os] {
|
||||
if base.supportsTarget(t, mctx.Config()) {
|
||||
moduleOSList = append(moduleOSList, os)
|
||||
break
|
||||
}
|
||||
}
|
||||
if !supportedClass {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(mctx.Config().Targets[os]) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
moduleOSList = append(moduleOSList, os)
|
||||
}
|
||||
|
||||
if len(moduleOSList) == 0 {
|
||||
@@ -913,7 +904,7 @@ func archMutator(bpctx blueprint.BottomUpMutatorContext) {
|
||||
|
||||
prefer32 := false
|
||||
if base.prefer32 != nil {
|
||||
prefer32 = base.prefer32(mctx, base, os.Class)
|
||||
prefer32 = base.prefer32(mctx, base, os)
|
||||
}
|
||||
|
||||
multilib, extraMultilib := decodeMultilib(base, os.Class)
|
||||
@@ -964,7 +955,7 @@ func decodeMultilib(base *ModuleBase, class OsClass) (multilib, extraMultilib st
|
||||
switch class {
|
||||
case Device:
|
||||
multilib = String(base.commonProperties.Target.Android.Compile_multilib)
|
||||
case Host, HostCross:
|
||||
case Host:
|
||||
multilib = String(base.commonProperties.Target.Host.Compile_multilib)
|
||||
}
|
||||
if multilib == "" {
|
||||
@@ -1240,7 +1231,7 @@ func (m *ModuleBase) setOSProperties(ctx BottomUpMutatorContext) {
|
||||
// key: value,
|
||||
// },
|
||||
// },
|
||||
if os.Class == Host || os.Class == HostCross {
|
||||
if os.Class == Host {
|
||||
field := "Host"
|
||||
prefix := "target.host"
|
||||
m.appendProperties(ctx, genProps, targetProp, field, prefix)
|
||||
@@ -1280,7 +1271,7 @@ func (m *ModuleBase) setOSProperties(ctx BottomUpMutatorContext) {
|
||||
prefix := "target." + os.Name
|
||||
m.appendProperties(ctx, genProps, targetProp, field, prefix)
|
||||
|
||||
if (os.Class == Host || os.Class == HostCross) && os != Windows {
|
||||
if os.Class == Host && os != Windows {
|
||||
field := "Not_windows"
|
||||
prefix := "target.not_windows"
|
||||
m.appendProperties(ctx, genProps, targetProp, field, prefix)
|
||||
@@ -1508,6 +1499,36 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
|
||||
nativeBridgeRelativePathStr = arch.ArchType.String()
|
||||
}
|
||||
|
||||
// A target is considered as HostCross if it's a host target which can't run natively on
|
||||
// the currently configured build machine (either because the OS is different or because of
|
||||
// the unsupported arch)
|
||||
hostCross := false
|
||||
if os.Class == Host {
|
||||
var osSupported bool
|
||||
if os == BuildOs {
|
||||
osSupported = true
|
||||
} else if BuildOs.Linux() && os.Linux() {
|
||||
// LinuxBionic and Linux are compatible
|
||||
osSupported = true
|
||||
} else {
|
||||
osSupported = false
|
||||
}
|
||||
|
||||
var archSupported bool
|
||||
if arch.ArchType == Common {
|
||||
archSupported = true
|
||||
} else if arch.ArchType.Name == *variables.HostArch {
|
||||
archSupported = true
|
||||
} else if variables.HostSecondaryArch != nil && arch.ArchType.Name == *variables.HostSecondaryArch {
|
||||
archSupported = true
|
||||
} else {
|
||||
archSupported = false
|
||||
}
|
||||
if !osSupported || !archSupported {
|
||||
hostCross = true
|
||||
}
|
||||
}
|
||||
|
||||
targets[os] = append(targets[os],
|
||||
Target{
|
||||
Os: os,
|
||||
@@ -1515,6 +1536,7 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
|
||||
NativeBridge: nativeBridgeEnabled,
|
||||
NativeBridgeHostArchName: nativeBridgeHostArchNameStr,
|
||||
NativeBridgeRelativePath: nativeBridgeRelativePathStr,
|
||||
HostCross: hostCross,
|
||||
})
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user