InstallPath keeps its partition dir

This change introduces the concept of partition dir for InstallPaths.
It's the path to the partition where the InstallPath is rooted at. For
example, it's out/soong/target/product/<device>/<partitoon> for paths
created for device modules. For host modules, it is defined as
out/soong/host/<host_os>-<host_arch>.

The partition dir is obtained using the new PartitionDir() function.

Another change is that a freshly created InstallPath (usually via
PathForModuleInstall) is the result of joining PartitionDir() and the
remaining path elements. For example, PathForModuleInstall(ctx, "foo",
"bar").Rel() now returns "foo/bar". Previously, that call returned the
relative path from config.buildDir() ("out/soong"). This change is in
line with the behavior of other path-creating functions like
PathForModuleSrc where Rel() returns the path relative to the
contextually determined path like the module source directory.

Notice that the Join() call to InstallPath doesn't change
PartitionDir(), while does change the result of Rel().

p := PathForModuleInstall(ctx, "foo", "bar")
p.PartitionDir() is out/soong/host/linux-x86
p.Rel() is foo/bar

q := p.Join(ctx, "baz")
q.PartitionDir() is still out/soong/host/linux-x86
q.Rel() now returns baz

Bug: N/A
Test: m nothing
Change-Id: I916bb1c782a4bfe0fbd4854e349cd2a2a42f56b6
This commit is contained in:
Jiyong Park
2020-10-20 18:23:33 +09:00
parent d9052d177c
commit 957bcd9c32
2 changed files with 164 additions and 74 deletions

View File

@@ -259,10 +259,11 @@ func TestPathForModuleInstall(t *testing.T) {
deviceTarget := Target{Os: Android, Arch: Arch{ArchType: Arm64}}
testCases := []struct {
name string
ctx *moduleInstallPathContextImpl
in []string
out string
name string
ctx *moduleInstallPathContextImpl
in []string
out string
partitionDir string
}{
{
name: "host binary",
@@ -272,8 +273,9 @@ func TestPathForModuleInstall(t *testing.T) {
target: hostTarget,
},
},
in: []string{"bin", "my_test"},
out: "host/linux-x86/bin/my_test",
in: []string{"bin", "my_test"},
out: "host/linux-x86/bin/my_test",
partitionDir: "host/linux-x86",
},
{
@@ -284,8 +286,9 @@ func TestPathForModuleInstall(t *testing.T) {
target: deviceTarget,
},
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/system/bin/my_test",
in: []string{"bin", "my_test"},
out: "target/product/test_device/system/bin/my_test",
partitionDir: "target/product/test_device/system",
},
{
name: "vendor binary",
@@ -298,8 +301,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
},
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/vendor/bin/my_test",
in: []string{"bin", "my_test"},
out: "target/product/test_device/vendor/bin/my_test",
partitionDir: "target/product/test_device/vendor",
},
{
name: "odm binary",
@@ -312,8 +316,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
},
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/odm/bin/my_test",
in: []string{"bin", "my_test"},
out: "target/product/test_device/odm/bin/my_test",
partitionDir: "target/product/test_device/odm",
},
{
name: "product binary",
@@ -326,8 +331,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
},
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/product/bin/my_test",
in: []string{"bin", "my_test"},
out: "target/product/test_device/product/bin/my_test",
partitionDir: "target/product/test_device/product",
},
{
name: "system_ext binary",
@@ -340,8 +346,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
},
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/system_ext/bin/my_test",
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",
@@ -352,8 +359,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inRoot: true,
},
in: []string{"my_test"},
out: "target/product/test_device/root/my_test",
in: []string{"my_test"},
out: "target/product/test_device/root/my_test",
partitionDir: "target/product/test_device/root",
},
{
name: "recovery binary",
@@ -364,8 +372,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inRecovery: true,
},
in: []string{"bin/my_test"},
out: "target/product/test_device/recovery/root/system/bin/my_test",
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",
@@ -377,8 +386,9 @@ func TestPathForModuleInstall(t *testing.T) {
inRecovery: true,
inRoot: true,
},
in: []string{"my_test"},
out: "target/product/test_device/recovery/root/my_test",
in: []string{"my_test"},
out: "target/product/test_device/recovery/root/my_test",
partitionDir: "target/product/test_device/recovery/root",
},
{
@@ -390,8 +400,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inData: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
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",
@@ -405,8 +416,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inData: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
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",
@@ -420,8 +432,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inData: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
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",
@@ -435,8 +448,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inData: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
partitionDir: "target/product/test_device/data",
},
{
@@ -451,8 +465,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inData: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/nativetest/my_test",
partitionDir: "target/product/test_device/data",
},
{
@@ -464,8 +479,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inSanitizerDir: true,
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/system/bin/my_test",
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",
@@ -479,8 +495,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inSanitizerDir: true,
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/vendor/bin/my_test",
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",
@@ -494,8 +511,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inSanitizerDir: true,
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/odm/bin/my_test",
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",
@@ -509,8 +527,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inSanitizerDir: true,
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/product/bin/my_test",
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/product/bin/my_test",
partitionDir: "target/product/test_device/data/asan/product",
},
{
@@ -525,8 +544,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inSanitizerDir: true,
},
in: []string{"bin", "my_test"},
out: "target/product/test_device/data/asan/system_ext/bin/my_test",
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",
},
{
@@ -539,8 +559,9 @@ func TestPathForModuleInstall(t *testing.T) {
inData: true,
inSanitizerDir: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/asan/data/nativetest/my_test",
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",
@@ -555,8 +576,9 @@ func TestPathForModuleInstall(t *testing.T) {
inData: true,
inSanitizerDir: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/asan/data/nativetest/my_test",
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",
@@ -571,8 +593,9 @@ func TestPathForModuleInstall(t *testing.T) {
inData: true,
inSanitizerDir: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/asan/data/nativetest/my_test",
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",
@@ -587,8 +610,9 @@ func TestPathForModuleInstall(t *testing.T) {
inData: true,
inSanitizerDir: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/asan/data/nativetest/my_test",
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",
@@ -603,8 +627,9 @@ func TestPathForModuleInstall(t *testing.T) {
inData: true,
inSanitizerDir: true,
},
in: []string{"nativetest", "my_test"},
out: "target/product/test_device/data/asan/data/nativetest/my_test",
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{
@@ -614,8 +639,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inTestcases: true,
},
in: []string{"my_test", "my_test_bin"},
out: "target/product/test_device/testcases/my_test/my_test_bin",
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{
@@ -625,8 +651,9 @@ func TestPathForModuleInstall(t *testing.T) {
},
inTestcases: true,
},
in: []string{"my_test", "my_test_bin"},
out: "host/linux-x86/testcases/my_test/my_test_bin",
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{
@@ -638,8 +665,9 @@ func TestPathForModuleInstall(t *testing.T) {
forceOS: &Linux,
forceArch: &X86,
},
in: []string{"my_test", "my_test_bin"},
out: "host/linux-x86/testcases/my_test/my_test_bin",
in: []string{"my_test", "my_test_bin"},
out: "host/linux-x86/testcases/my_test/my_test_bin",
partitionDir: "host/linux-x86/testcases",
},
}
@@ -652,10 +680,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,