Merge "InstallPath keeps its partition dir"
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user