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

Commit f26f7348 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "InstallPath keeps its partition dir"

parents e1878c10 957bcd9c
Loading
Loading
Loading
Loading
+40 −16
Original line number Diff line number Diff line
@@ -1237,7 +1237,12 @@ func PathForModuleRes(ctx ModuleContext, pathComponents ...string) ModuleResPath
type InstallPath struct {
	basePath

	baseDir string // "../" for Make paths to convert "out/soong" to "out", "" for Soong paths
	// partitionDir is the part of the InstallPath that is automatically determined according to the context.
	// For example, it is host/<os>-<arch> for host modules, and target/product/<device>/<partition> for device modules.
	partitionDir string

	// makePath indicates whether this path is for Soong (false) or Make (true).
	makePath bool
}

func (p InstallPath) buildDir() string {
@@ -1250,7 +1255,23 @@ var _ WritablePath = InstallPath{}
func (p InstallPath) writablePath() {}

func (p InstallPath) String() string {
	return filepath.Join(p.config.buildDir, p.baseDir, p.path)
	if p.makePath {
		// Make path starts with out/ instead of out/soong.
		return filepath.Join(p.config.buildDir, "../", p.path)
	} else {
		return filepath.Join(p.config.buildDir, p.path)
	}
}

// PartitionDir returns the path to the partition where the install path is rooted at. It is
// out/soong/target/product/<device>/<partition> for device modules, and out/soong/host/<os>-<arch> for host modules.
// The ./soong is dropped if the install path is for Make.
func (p InstallPath) PartitionDir() string {
	if p.makePath {
		return filepath.Join(p.config.buildDir, "../", p.partitionDir)
	} else {
		return filepath.Join(p.config.buildDir, p.partitionDir)
	}
}

// Join creates a new InstallPath with paths... joined with the current path. The
@@ -1271,7 +1292,7 @@ func (p InstallPath) withRel(rel string) InstallPath {
// ToMakePath returns a new InstallPath that points to Make's install directory instead of Soong's,
// i.e. out/ instead of out/soong/.
func (p InstallPath) ToMakePath() InstallPath {
	p.baseDir = "../"
	p.makePath = true
	return p
}

@@ -1301,10 +1322,10 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string, debug bool,
	pathComponents ...string) InstallPath {

	var outPaths []string
	var partionPaths []string

	if os.Class == Device {
		outPaths = []string{"target", "product", ctx.Config().DeviceName(), partition}
		partionPaths = []string{"target", "product", ctx.Config().DeviceName(), partition}
	} else {
		osName := os.String()
		if os == Linux {
@@ -1320,30 +1341,33 @@ func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string,
		if os.Class == Host && (arch == X86_64 || arch == Common) {
			archName = "x86"
		}
		outPaths = []string{"host", osName + "-" + archName, partition}
		partionPaths = []string{"host", osName + "-" + archName, partition}
	}
	if debug {
		outPaths = append([]string{"debug"}, outPaths...)
		partionPaths = append([]string{"debug"}, partionPaths...)
	}
	outPaths = append(outPaths, pathComponents...)

	path, err := validatePath(outPaths...)
	partionPath, err := validatePath(partionPaths...)
	if err != nil {
		reportPathError(ctx, err)
	}

	ret := InstallPath{basePath{path, ctx.Config(), ""}, ""}
	base := InstallPath{
		basePath:     basePath{partionPath, ctx.Config(), ""},
		partitionDir: partionPath,
		makePath:     false,
	}

	return ret
	return base.Join(ctx, pathComponents...)
}

func pathForNdkOrSdkInstall(ctx PathContext, prefix string, paths []string) InstallPath {
	paths = append([]string{prefix}, paths...)
	path, err := validatePath(paths...)
	if err != nil {
		reportPathError(ctx, err)
	base := InstallPath{
		basePath:     basePath{prefix, ctx.Config(), ""},
		partitionDir: prefix,
		makePath:     false,
	}
	return InstallPath{basePath{path, ctx.Config(), ""}, ""}
	return base.Join(ctx, paths...)
}

func PathForNdkInstall(ctx PathContext, paths ...string) InstallPath {
+124 −58
Original line number Diff line number Diff line
@@ -268,6 +268,7 @@ func TestPathForModuleInstall(t *testing.T) {
		ctx          *moduleInstallPathContextImpl
		in           []string
		out          string
		partitionDir string
	}{
		{
			name: "host binary",
@@ -279,6 +280,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "host/linux-x86/bin/my_test",
			partitionDir: "host/linux-x86",
		},

		{
@@ -291,6 +293,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/system/bin/my_test",
			partitionDir: "target/product/test_device/system",
		},
		{
			name: "vendor binary",
@@ -305,6 +308,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/vendor/bin/my_test",
			partitionDir: "target/product/test_device/vendor",
		},
		{
			name: "odm binary",
@@ -319,6 +323,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/odm/bin/my_test",
			partitionDir: "target/product/test_device/odm",
		},
		{
			name: "product binary",
@@ -333,6 +338,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/product/bin/my_test",
			partitionDir: "target/product/test_device/product",
		},
		{
			name: "system_ext binary",
@@ -347,6 +353,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/system_ext/bin/my_test",
			partitionDir: "target/product/test_device/system_ext",
		},
		{
			name: "root binary",
@@ -359,6 +366,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"my_test"},
			out:          "target/product/test_device/root/my_test",
			partitionDir: "target/product/test_device/root",
		},
		{
			name: "recovery binary",
@@ -371,6 +379,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin/my_test"},
			out:          "target/product/test_device/recovery/root/system/bin/my_test",
			partitionDir: "target/product/test_device/recovery/root/system",
		},
		{
			name: "recovery root binary",
@@ -384,6 +393,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"my_test"},
			out:          "target/product/test_device/recovery/root/my_test",
			partitionDir: "target/product/test_device/recovery/root",
		},

		{
@@ -397,6 +407,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data",
		},
		{
			name: "vendor native test binary",
@@ -412,6 +423,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data",
		},
		{
			name: "odm native test binary",
@@ -427,6 +439,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data",
		},
		{
			name: "product native test binary",
@@ -442,6 +455,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data",
		},

		{
@@ -458,6 +472,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data",
		},

		{
@@ -471,6 +486,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/data/asan/system/bin/my_test",
			partitionDir: "target/product/test_device/data/asan/system",
		},
		{
			name: "sanitized vendor binary",
@@ -486,6 +502,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/data/asan/vendor/bin/my_test",
			partitionDir: "target/product/test_device/data/asan/vendor",
		},
		{
			name: "sanitized odm binary",
@@ -501,6 +518,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/data/asan/odm/bin/my_test",
			partitionDir: "target/product/test_device/data/asan/odm",
		},
		{
			name: "sanitized product binary",
@@ -516,6 +534,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/data/asan/product/bin/my_test",
			partitionDir: "target/product/test_device/data/asan/product",
		},

		{
@@ -532,6 +551,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"bin", "my_test"},
			out:          "target/product/test_device/data/asan/system_ext/bin/my_test",
			partitionDir: "target/product/test_device/data/asan/system_ext",
		},

		{
@@ -546,6 +566,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/asan/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data/asan/data",
		},
		{
			name: "sanitized vendor native test binary",
@@ -562,6 +583,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/asan/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data/asan/data",
		},
		{
			name: "sanitized odm native test binary",
@@ -578,6 +600,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/asan/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data/asan/data",
		},
		{
			name: "sanitized product native test binary",
@@ -594,6 +617,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/asan/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data/asan/data",
		},
		{
			name: "sanitized system_ext native test binary",
@@ -610,6 +634,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"nativetest", "my_test"},
			out:          "target/product/test_device/data/asan/data/nativetest/my_test",
			partitionDir: "target/product/test_device/data/asan/data",
		}, {
			name: "device testcases",
			ctx: &moduleInstallPathContextImpl{
@@ -621,6 +646,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"my_test", "my_test_bin"},
			out:          "target/product/test_device/testcases/my_test/my_test_bin",
			partitionDir: "target/product/test_device/testcases",
		}, {
			name: "host testcases",
			ctx: &moduleInstallPathContextImpl{
@@ -632,6 +658,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"my_test", "my_test_bin"},
			out:          "host/linux-x86/testcases/my_test/my_test_bin",
			partitionDir: "host/linux-x86/testcases",
		}, {
			name: "forced host testcases",
			ctx: &moduleInstallPathContextImpl{
@@ -645,6 +672,7 @@ func TestPathForModuleInstall(t *testing.T) {
			},
			in:           []string{"my_test", "my_test_bin"},
			out:          "host/linux-x86/testcases/my_test/my_test_bin",
			partitionDir: "host/linux-x86/testcases",
		},
	}

@@ -657,10 +685,48 @@ func TestPathForModuleInstall(t *testing.T) {
					output.basePath.path,
					tc.out)
			}
			if output.partitionDir != tc.partitionDir {
				t.Errorf("unexpected partitionDir:\n got: %q\nwant: %q\n",
					output.partitionDir, tc.partitionDir)
			}
		})
	}
}

func TestBaseDirForInstallPath(t *testing.T) {
	testConfig := pathTestConfig("")
	deviceTarget := Target{Os: Android, Arch: Arch{ArchType: Arm64}}

	ctx := &moduleInstallPathContextImpl{
		baseModuleContext: baseModuleContext{
			os:     deviceTarget.Os,
			target: deviceTarget,
		},
	}
	ctx.baseModuleContext.config = testConfig

	actual := PathForModuleInstall(ctx, "foo", "bar")
	expectedBaseDir := "target/product/test_device/system"
	if actual.partitionDir != expectedBaseDir {
		t.Errorf("unexpected partitionDir:\n got: %q\nwant: %q\n", actual.partitionDir, expectedBaseDir)
	}
	expectedRelPath := "foo/bar"
	if actual.Rel() != expectedRelPath {
		t.Errorf("unexpected Rel():\n got: %q\nwant: %q\n", actual.Rel(), expectedRelPath)
	}

	actualAfterJoin := actual.Join(ctx, "baz")
	// partitionDir is preserved even after joining
	if actualAfterJoin.partitionDir != expectedBaseDir {
		t.Errorf("unexpected partitionDir after joining:\n got: %q\nwant: %q\n", actualAfterJoin.partitionDir, expectedBaseDir)
	}
	// Rel() is updated though
	expectedRelAfterJoin := "baz"
	if actualAfterJoin.Rel() != expectedRelAfterJoin {
		t.Errorf("unexpected Rel() after joining:\n got: %q\nwant: %q\n", actualAfterJoin.Rel(), expectedRelAfterJoin)
	}
}

func TestDirectorySortedPaths(t *testing.T) {
	config := TestConfig("out", nil, "", map[string][]byte{
		"Android.bp": nil,