Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c66bc61 authored by Colin Cross's avatar Colin Cross
Browse files

Replace android.BuildOs with Config.BuildOS

Replace the android.BuildOs constant with Config.BuildOS so that it
can vary based on the product config.

Bug: 190084016
Test: all Soong tests
Change-Id: Ia67f872d8b2ab788747a22e3a9659dc21c9775cd
parent ae863386
Loading
Loading
Loading
Loading
+29 −26
Original line number Diff line number Diff line
@@ -290,28 +290,6 @@ func osByName(name string) OsType {
	return NoOsType
}

// BuildOs returns the OsType for the OS that the build is running on.
var BuildOs = func() OsType {
	switch runtime.GOOS {
	case "linux":
		return Linux
	case "darwin":
		return Darwin
	default:
		panic(fmt.Sprintf("unsupported OS: %s", runtime.GOOS))
	}
}()

// BuildArch returns the ArchType for the CPU that the build is running on.
var BuildArch = func() ArchType {
	switch runtime.GOARCH {
	case "amd64":
		return X86_64
	default:
		panic(fmt.Sprintf("unsupported Arch: %s", runtime.GOARCH))
	}
}()

var (
	// osTypeList contains a list of all the supported OsTypes, including ones not supported
	// by the current build host or the target device.
@@ -1397,6 +1375,31 @@ 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.
func determineBuildOS(config *config) {
	config.BuildOS = func() OsType {
		switch runtime.GOOS {
		case "linux":
			return Linux
		case "darwin":
			return Darwin
		default:
			panic(fmt.Sprintf("unsupported OS: %s", runtime.GOOS))
		}
	}()

	config.BuildArch = func() ArchType {
		switch runtime.GOARCH {
		case "amd64":
			return X86_64
		default:
			panic(fmt.Sprintf("unsupported Arch: %s", runtime.GOARCH))
		}
	}()

}

// Convert the arch product variables into a list of targets for each OsType.
func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
	variables := config.productVariables
@@ -1430,9 +1433,9 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
		hostCross := false
		if os.Class == Host {
			var osSupported bool
			if os == BuildOs {
			if os == config.BuildOS {
				osSupported = true
			} else if BuildOs.Linux() && os.Linux() {
			} else if config.BuildOS.Linux() && os.Linux() {
				// LinuxBionic and Linux are compatible
				osSupported = true
			} else {
@@ -1470,11 +1473,11 @@ func decodeTargetProductVariables(config *config) (map[OsType][]Target, error) {
	}

	// The primary host target, which must always exist.
	addTarget(BuildOs, *variables.HostArch, nil, nil, nil, NativeBridgeDisabled, nil, nil)
	addTarget(config.BuildOS, *variables.HostArch, nil, nil, nil, NativeBridgeDisabled, nil, nil)

	// An optional secondary host target.
	if variables.HostSecondaryArch != nil && *variables.HostSecondaryArch != "" {
		addTarget(BuildOs, *variables.HostSecondaryArch, nil, nil, nil, NativeBridgeDisabled, nil, nil)
		addTarget(config.BuildOS, *variables.HostSecondaryArch, nil, nil, nil, NativeBridgeDisabled, nil, nil)
	}

	// Optional cross-compiled host targets, generally Windows.
+22 −12
Original line number Diff line number Diff line
@@ -108,6 +108,12 @@ type config struct {

	ProductVariablesFileName string

	// BuildOS stores the OsType for the OS that the build is running on.
	BuildOS OsType

	// BuildArch stores the ArchType for the CPU that the build is running on.
	BuildArch ArchType

	Targets                  map[OsType][]Target
	BuildOSTarget            Target // the Target for tools run on the build machine
	BuildOSCommonTarget      Target // the Target for common (java) tools run on the build machine
@@ -326,41 +332,43 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string
	return Config{config}
}

func fuchsiaTargets() map[OsType][]Target {
func fuchsiaTargets(config Config) map[OsType][]Target {
	return map[OsType][]Target{
		Fuchsia: {
			{Fuchsia, Arch{ArchType: Arm64, ArchVariant: "", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", "", false},
		},
		BuildOs: {
			{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
		config.BuildOS: {
			{config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
		},
	}
}

var PrepareForTestSetDeviceToFuchsia = FixtureModifyConfig(func(config Config) {
	config.Targets = fuchsiaTargets()
	config.Targets = fuchsiaTargets(config)
})

func modifyTestConfigToSupportArchMutator(testConfig Config) {
	config := testConfig.config

	determineBuildOS(config)

	config.Targets = map[OsType][]Target{
		Android: []Target{
			{Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", "", false},
			{Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", "", false},
		},
		BuildOs: []Target{
			{BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
			{BuildOs, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
		config.BuildOS: []Target{
			{config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
			{config.BuildOS, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
		},
	}

	if runtime.GOOS == "darwin" {
		config.Targets[BuildOs] = config.Targets[BuildOs][:1]
		config.Targets[config.BuildOS] = config.Targets[config.BuildOS][:1]
	}

	config.BuildOSTarget = config.Targets[BuildOs][0]
	config.BuildOSCommonTarget = getCommonTargets(config.Targets[BuildOs])[0]
	config.BuildOSTarget = config.Targets[config.BuildOS][0]
	config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]
	config.AndroidCommonTarget = getCommonTargets(config.Targets[Android])[0]
	config.AndroidFirstDeviceTarget = firstTarget(config.Targets[Android], "lib64", "lib32")[0]
	config.TestProductVariables.DeviceArch = proptools.StringPtr("arm64")
@@ -439,6 +447,8 @@ func NewConfig(srcDir, buildDir string, moduleListFile string, availableEnv map[
		config.katiEnabled = true
	}

	determineBuildOS(config)

	// Sets up the map of target OSes to the finer grained compilation targets
	// that are configured from the product variables.
	targets, err := decodeTargetProductVariables(config)
@@ -476,8 +486,8 @@ func NewConfig(srcDir, buildDir string, moduleListFile string, availableEnv map[
	config.Targets = targets

	// Compilation targets for host tools.
	config.BuildOSTarget = config.Targets[BuildOs][0]
	config.BuildOSCommonTarget = getCommonTargets(config.Targets[BuildOs])[0]
	config.BuildOSTarget = config.Targets[config.BuildOS][0]
	config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]

	// Compilation targets for Android.
	if len(config.Targets[Android]) > 0 {
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ func (t *prebuiltBuildTool) GenerateAndroidBuildActions(ctx ModuleContext) {

func (t *prebuiltBuildTool) MakeVars(ctx MakeVarsModuleContext) {
	if makeVar := String(t.properties.Export_to_make_var); makeVar != "" {
		if t.Target().Os != BuildOs {
		if t.Target().Os != ctx.Config().BuildOS {
			return
		}
		ctx.StrictRaw(makeVar, t.toolPath.String())
+345 −343
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ import (
	"github.com/google/blueprint"
)

func TestPrebuilts(t *testing.T) {
	buildOS := TestArchConfig(t.TempDir(), nil, "", nil).BuildOS

	var prebuiltsTests = []struct {
		name      string
		replaceBp bool // modules is added to default bp boilerplate if false.
@@ -44,7 +47,7 @@ var prebuiltsTests = []struct {
					prefer: false,
					srcs: ["prebuilt_file"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "no source prebuilt preferred",
@@ -54,7 +57,7 @@ var prebuiltsTests = []struct {
					prefer: true,
					srcs: ["prebuilt_file"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt not preferred",
@@ -82,7 +85,7 @@ var prebuiltsTests = []struct {
					prefer: true,
					srcs: ["prebuilt_file"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt no file not preferred",
@@ -122,7 +125,7 @@ var prebuiltsTests = []struct {
					prefer: true,
					srcs: [":fg"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt module for device only",
@@ -155,7 +158,7 @@ var prebuiltsTests = []struct {
						},
					},
				}`,
		prebuilt: []OsType{BuildOs},
			prebuilt: []OsType{buildOS},
		},
		{
			name: "prebuilt override not preferred",
@@ -193,7 +196,7 @@ var prebuiltsTests = []struct {
					prefer: true,
					srcs: ["prebuilt_file"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name:      "prebuilt including default-disabled OS",
@@ -228,7 +231,7 @@ var prebuiltsTests = []struct {
						},
					},
				}`,
		prebuilt: []OsType{Android, BuildOs, Windows},
			prebuilt: []OsType{Android, buildOS, Windows},
		},
		{
			name:      "fall back to source for default-disabled OS",
@@ -258,7 +261,7 @@ var prebuiltsTests = []struct {
					prefer: true,
					srcs: ["prebuilt_file"],
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name:      "prebuilt properties customizable",
@@ -290,7 +293,7 @@ var prebuiltsTests = []struct {
						},
					},
				}`,
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt use_source_config_var={acme, use_source} - no var specified",
@@ -306,7 +309,7 @@ var prebuiltsTests = []struct {
				}`,
			// When use_source_env is specified then it will use the prebuilt by default if the environment
			// variable is not set.
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt use_source_config_var={acme, use_source} - acme_use_source=false",
@@ -329,7 +332,7 @@ var prebuiltsTests = []struct {
			}),
			// Setting the environment variable named in use_source_env to false will cause the prebuilt to
			// be used.
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
		{
			name: "prebuilt use_source_config_var={acme, use_source} - acme_use_source=true",
@@ -370,11 +373,10 @@ var prebuiltsTests = []struct {
				}
			}),
			// Although the environment variable says to use source there is no source available.
		prebuilt: []OsType{Android, BuildOs},
			prebuilt: []OsType{Android, buildOS},
		},
	}

func TestPrebuilts(t *testing.T) {
	fs := MockFS{
		"prebuilt_file": nil,
		"source_file":   nil,
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ func robolectricTestSuite(ctx SingletonContext, files map[string]InstallPaths) W
	for _, module := range SortedStringKeys(files) {
		installedPaths = append(installedPaths, files[module]...)
	}
	testCasesDir := pathForInstall(ctx, BuildOs, X86, "testcases", false).ToMakePath()
	testCasesDir := pathForInstall(ctx, ctx.Config().BuildOS, X86, "testcases", false).ToMakePath()

	outputFile := PathForOutput(ctx, "packaging", "robolectric-tests.zip")
	rule := NewRuleBuilder(pctx, ctx)
Loading