Merge "Reland "Split the x86 host toolchain into glibc and musl variants"" am: dcbc76134d
am: 632d3cf202
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1777148 Change-Id: Icca632d52e633a77b26e960bf11cb448d05bbf64
This commit is contained in:
@@ -255,7 +255,7 @@ func (os OsType) Bionic() bool {
|
||||
// Linux returns true if the OS uses the Linux kernel, i.e. if the OS is Android or is Linux
|
||||
// with or without the Bionic libc runtime.
|
||||
func (os OsType) Linux() bool {
|
||||
return os == Android || os == Linux || os == LinuxBionic
|
||||
return os == Android || os == Linux || os == LinuxBionic || os == LinuxMusl
|
||||
}
|
||||
|
||||
// newOsType constructs an OsType and adds it to the global lists.
|
||||
@@ -305,6 +305,8 @@ var (
|
||||
NoOsType OsType
|
||||
// Linux is the OS for the Linux kernel plus the glibc runtime.
|
||||
Linux = newOsType("linux_glibc", Host, false, X86, X86_64)
|
||||
// LinuxMusl is the OS for the Linux kernel plus the musl runtime.
|
||||
LinuxMusl = newOsType("linux_musl", Host, false, X86, X86_64)
|
||||
// Darwin is the OS for MacOS/Darwin host machines.
|
||||
Darwin = newOsType("darwin", Host, false, X86_64)
|
||||
// LinuxBionic is the OS for the Linux kernel plus the Bionic libc runtime, but without the
|
||||
@@ -863,6 +865,8 @@ func createArchPropTypeDesc(props reflect.Type) []archPropTypeDesc {
|
||||
"Android64",
|
||||
"Android32",
|
||||
"Bionic",
|
||||
"Glibc",
|
||||
"Musl",
|
||||
"Linux",
|
||||
"Not_windows",
|
||||
"Arm_on_x86",
|
||||
@@ -1108,6 +1112,30 @@ func (m *ModuleBase) setOSProperties(ctx BottomUpMutatorContext) {
|
||||
}
|
||||
}
|
||||
|
||||
if os == Linux {
|
||||
field := "Glibc"
|
||||
prefix := "target.glibc"
|
||||
if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
|
||||
mergePropertyStruct(ctx, genProps, bionicProperties)
|
||||
}
|
||||
}
|
||||
|
||||
if os == LinuxMusl {
|
||||
field := "Musl"
|
||||
prefix := "target.musl"
|
||||
if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
|
||||
mergePropertyStruct(ctx, genProps, bionicProperties)
|
||||
}
|
||||
|
||||
// Special case: to ease the transition from glibc to musl, apply linux_glibc
|
||||
// properties (which has historically mean host linux) to musl variants.
|
||||
field = "Linux_glibc"
|
||||
prefix = "target.linux_glibc"
|
||||
if bionicProperties, ok := getChildPropertyStruct(ctx, targetProp, field, prefix); ok {
|
||||
mergePropertyStruct(ctx, genProps, bionicProperties)
|
||||
}
|
||||
}
|
||||
|
||||
// Handle target OS properties in the form:
|
||||
// target: {
|
||||
// linux_glibc: {
|
||||
@@ -1310,6 +1338,16 @@ func getArchProperties(ctx BaseMutatorContext, archProperties interface{}, arch
|
||||
if osArchProperties, ok := getChildPropertyStruct(ctx, targetProp, field, userFriendlyField); ok {
|
||||
result = append(result, osArchProperties)
|
||||
}
|
||||
|
||||
if os == LinuxMusl {
|
||||
// Special case: to ease the transition from glibc to musl, apply linux_glibc
|
||||
// properties (which has historically mean host linux) to musl variants.
|
||||
field := "Linux_glibc_" + archType.Name
|
||||
userFriendlyField := "target.linux_glibc_" + archType.Name
|
||||
if osArchProperties, ok := getChildPropertyStruct(ctx, targetProp, field, userFriendlyField); ok {
|
||||
result = append(result, osArchProperties)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle arm on x86 properties in the form:
|
||||
@@ -1375,11 +1413,14 @@ func (m *ModuleBase) setArchProperties(ctx BottomUpMutatorContext) {
|
||||
}
|
||||
|
||||
// determineBuildOS stores the OS and architecture used for host targets used during the build into
|
||||
// config based on the runtime OS and architecture determined by Go.
|
||||
// config based on the runtime OS and architecture determined by Go and the product configuration.
|
||||
func determineBuildOS(config *config) {
|
||||
config.BuildOS = func() OsType {
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
if Bool(config.productVariables.HostMusl) {
|
||||
return LinuxMusl
|
||||
}
|
||||
return Linux
|
||||
case "darwin":
|
||||
return Darwin
|
||||
|
@@ -508,9 +508,12 @@ func TestArchProperties(t *testing.T) {
|
||||
bionic: { a: ["bionic"] },
|
||||
host: { a: ["host"] },
|
||||
android: { a: ["android"] },
|
||||
glibc: { a: ["glibc"] },
|
||||
musl: { a: ["musl"] },
|
||||
linux_bionic: { a: ["linux_bionic"] },
|
||||
linux: { a: ["linux"] },
|
||||
linux_glibc: { a: ["linux_glibc"] },
|
||||
linux_musl: { a: ["linux_musl"] },
|
||||
windows: { a: ["windows"], enabled: true },
|
||||
darwin: { a: ["darwin"] },
|
||||
not_windows: { a: ["not_windows"] },
|
||||
@@ -522,6 +525,8 @@ func TestArchProperties(t *testing.T) {
|
||||
linux_x86_64: { a: ["linux_x86_64"] },
|
||||
linux_glibc_x86: { a: ["linux_glibc_x86"] },
|
||||
linux_glibc_x86_64: { a: ["linux_glibc_x86_64"] },
|
||||
linux_musl_x86: { a: ["linux_musl_x86"] },
|
||||
linux_musl_x86_64: { a: ["linux_musl_x86_64"] },
|
||||
darwin_x86_64: { a: ["darwin_x86_64"] },
|
||||
windows_x86: { a: ["windows_x86"] },
|
||||
windows_x86_64: { a: ["windows_x86_64"] },
|
||||
@@ -563,12 +568,12 @@ func TestArchProperties(t *testing.T) {
|
||||
{
|
||||
module: "foo",
|
||||
variant: "linux_glibc_x86_64",
|
||||
property: []string{"root", "host", "linux", "linux_glibc", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_glibc_x86_64"},
|
||||
property: []string{"root", "host", "linux", "glibc", "linux_glibc", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_glibc_x86_64"},
|
||||
},
|
||||
{
|
||||
module: "foo",
|
||||
variant: "linux_glibc_x86",
|
||||
property: []string{"root", "host", "linux", "linux_glibc", "not_windows", "x86", "lib32", "linux_x86", "linux_glibc_x86"},
|
||||
property: []string{"root", "host", "linux", "glibc", "linux_glibc", "not_windows", "x86", "lib32", "linux_x86", "linux_glibc_x86"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -594,6 +599,23 @@ func TestArchProperties(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "linux_musl",
|
||||
goOS: "linux",
|
||||
preparer: FixtureModifyConfig(modifyTestConfigForMusl),
|
||||
results: []result{
|
||||
{
|
||||
module: "foo",
|
||||
variant: "linux_musl_x86_64",
|
||||
property: []string{"root", "host", "linux", "musl", "linux_glibc", "linux_musl", "not_windows", "x86_64", "lib64", "linux_x86_64", "linux_musl_x86_64", "linux_glibc_x86_64"},
|
||||
},
|
||||
{
|
||||
module: "foo",
|
||||
variant: "linux_musl_x86",
|
||||
property: []string{"root", "host", "linux", "musl", "linux_glibc", "linux_musl", "not_windows", "x86", "lib32", "linux_x86", "linux_musl_x86", "linux_glibc_x86"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "darwin",
|
||||
goOS: "darwin",
|
||||
|
@@ -362,6 +362,19 @@ func modifyTestConfigToSupportArchMutator(testConfig Config) {
|
||||
config.TestProductVariables.DeviceSecondaryArchVariant = proptools.StringPtr("armv7-a-neon")
|
||||
}
|
||||
|
||||
func modifyTestConfigForMusl(config Config) {
|
||||
delete(config.Targets, config.BuildOS)
|
||||
config.productVariables.HostMusl = boolPtr(true)
|
||||
determineBuildOS(config.config)
|
||||
config.Targets[config.BuildOS] = []Target{
|
||||
{config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
|
||||
{config.BuildOS, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
|
||||
}
|
||||
|
||||
config.BuildOSTarget = config.Targets[config.BuildOS][0]
|
||||
config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]
|
||||
}
|
||||
|
||||
// TestArchConfig returns a Config object suitable for using for tests that
|
||||
// need to run the arch mutator.
|
||||
func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
|
||||
|
@@ -1667,7 +1667,7 @@ func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string,
|
||||
partionPaths = []string{"target", "product", ctx.Config().DeviceName(), partition}
|
||||
} else {
|
||||
osName := os.String()
|
||||
if os == Linux {
|
||||
if os == Linux || os == LinuxMusl {
|
||||
// instead of linux_glibc
|
||||
osName = "linux"
|
||||
}
|
||||
|
@@ -204,6 +204,7 @@ type productVariables struct {
|
||||
|
||||
HostArch *string `json:",omitempty"`
|
||||
HostSecondaryArch *string `json:",omitempty"`
|
||||
HostMusl *bool `json:",omitempty"`
|
||||
|
||||
CrossHost *string `json:",omitempty"`
|
||||
CrossHostArch *string `json:",omitempty"`
|
||||
|
Reference in New Issue
Block a user