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

Commit 87788b52 authored by Jiyong Park's avatar Jiyong Park
Browse files

Don't assume host arch is always x86

This change fixes some places where host arch is assumed to be x86 to
form a path element like linux-x86. In preparation for non-x86 host
targets, the host arch part is derived from the context.

In addition, InstallForceOS() is refactored so that it can override not
only OsType, but also ArchType. Without this, the paths for the
robolectic modules will be changed from linux-x86 to linux-common, which
breaks several other places where the old paths are expected.

Bug: 134795810
Test: m
Change-Id: Ib38c715948ae546e55021ece82bac1d82e9e5da0
parent 4964a5e0
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -551,6 +551,15 @@ var BuildOs = func() OsType {
	}
}()

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

var (
	OsTypeList      []OsType
	commonTargetMap = make(map[string]Target)
+5 −5
Original line number Diff line number Diff line
@@ -198,7 +198,7 @@ type ModuleContext interface {
	InstallInRecovery() bool
	InstallInRoot() bool
	InstallBypassMake() bool
	InstallForceOS() *OsType
	InstallForceOS() (*OsType, *ArchType)

	RequiredModuleNames() []string
	HostRequiredModuleNames() []string
@@ -254,7 +254,7 @@ type Module interface {
	InstallInRecovery() bool
	InstallInRoot() bool
	InstallBypassMake() bool
	InstallForceOS() *OsType
	InstallForceOS() (*OsType, *ArchType)
	SkipInstall()
	IsSkipInstall() bool
	MakeUninstallable()
@@ -1120,8 +1120,8 @@ func (m *ModuleBase) InstallBypassMake() bool {
	return false
}

func (m *ModuleBase) InstallForceOS() *OsType {
	return nil
func (m *ModuleBase) InstallForceOS() (*OsType, *ArchType) {
	return nil, nil
}

func (m *ModuleBase) Owner() string {
@@ -2021,7 +2021,7 @@ func (m *moduleContext) InstallBypassMake() bool {
	return m.module.InstallBypassMake()
}

func (m *moduleContext) InstallForceOS() *OsType {
func (m *moduleContext) InstallForceOS() (*OsType, *ArchType) {
	return m.module.InstallForceOS()
}

+23 −12
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ type ModuleInstallPathContext interface {
	InstallInRecovery() bool
	InstallInRoot() bool
	InstallBypassMake() bool
	InstallForceOS() *OsType
	InstallForceOS() (*OsType, *ArchType)
}

var _ ModuleInstallPathContext = ModuleContext(nil)
@@ -1278,12 +1278,17 @@ func (p InstallPath) ToMakePath() InstallPath {
// module appended with paths...
func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string) InstallPath {
	os := ctx.Os()
	if forceOS := ctx.InstallForceOS(); forceOS != nil {
	arch := ctx.Arch().ArchType
	forceOS, forceArch := ctx.InstallForceOS()
	if forceOS != nil {
		os = *forceOS
	}
	if forceArch != nil {
		arch = *forceArch
	}
	partition := modulePartition(ctx, os)

	ret := pathForInstall(ctx, os, partition, ctx.Debug(), pathComponents...)
	ret := pathForInstall(ctx, os, arch, partition, ctx.Debug(), pathComponents...)

	if ctx.InstallBypassMake() && ctx.Config().EmbeddedInMake() {
		ret = ret.ToMakePath()
@@ -1292,7 +1297,7 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
	return ret
}

func pathForInstall(ctx PathContext, os OsType, partition string, debug bool,
func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string, debug bool,
	pathComponents ...string) InstallPath {

	var outPaths []string
@@ -1300,15 +1305,21 @@ func pathForInstall(ctx PathContext, os OsType, partition string, debug bool,
	if os.Class == Device {
		outPaths = []string{"target", "product", ctx.Config().DeviceName(), partition}
	} else {
		switch os {
		case Linux:
			outPaths = []string{"host", "linux-x86", partition}
		case LinuxBionic:
			// TODO: should this be a separate top level, or shared with linux-x86?
			outPaths = []string{"host", "linux_bionic-x86", partition}
		default:
			outPaths = []string{"host", os.String() + "-x86", partition}
		}
		osName := os.String()
		if os == Linux {
			// instead of linux_glibc
			osName = "linux"
		}
		// SOONG_HOST_OUT is set to out/host/$(HOST_OS)-$(HOST_PREBUILT_ARCH)
		// and HOST_PREBUILT_ARCH is forcibly set to x86 even on x86_64 hosts. We don't seem
		// to have a plan to fix it (see the comment in build/make/core/envsetup.mk).
		// Let's keep using x86 for the existing cases until we have a need to support
		// other architectures.
		archName := arch.String()
		if os.Class == Host && (arch == X86_64 || arch == Common) {
			archName = "x86"
		}
		outPaths = []string{"host", osName + "-" + archName, partition}
	}
	if debug {
		outPaths = append([]string{"debug"}, outPaths...)
+6 −4
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ type moduleInstallPathContextImpl struct {
	inRecovery     bool
	inRoot         bool
	forceOS        *OsType
	forceArch      *ArchType
}

func (m moduleInstallPathContextImpl) Config() Config {
@@ -243,8 +244,8 @@ func (m moduleInstallPathContextImpl) InstallBypassMake() bool {
	return false
}

func (m moduleInstallPathContextImpl) InstallForceOS() *OsType {
	return m.forceOS
func (m moduleInstallPathContextImpl) InstallForceOS() (*OsType, *ArchType) {
	return m.forceOS, m.forceArch
}

func pathTestConfig(buildDir string) Config {
@@ -254,8 +255,8 @@ func pathTestConfig(buildDir string) Config {
func TestPathForModuleInstall(t *testing.T) {
	testConfig := pathTestConfig("")

	hostTarget := Target{Os: Linux}
	deviceTarget := Target{Os: Android}
	hostTarget := Target{Os: Linux, Arch: Arch{ArchType: X86}}
	deviceTarget := Target{Os: Android, Arch: Arch{ArchType: Arm64}}

	testCases := []struct {
		name string
@@ -635,6 +636,7 @@ func TestPathForModuleInstall(t *testing.T) {
				},
				inTestcases: true,
				forceOS:     &Linux,
				forceArch:   &X86,
			},
			in:  []string{"my_test", "my_test_bin"},
			out: "host/linux-x86/testcases/my_test/my_test_bin",
+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, "testcases", false).ToMakePath()
	testCasesDir := pathForInstall(ctx, BuildOs, X86, "testcases", false).ToMakePath()

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