Merge "Fix symlinks from APEX to partitions" am: 4196e13a6a
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2442922 Change-Id: Iefadf2775084969290aef45b3f4377ec1a4d57b6 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
9bd0f928f1
4 changed files with 33 additions and 8 deletions
|
@ -502,6 +502,7 @@ type Module interface {
|
||||||
InstallInRoot() bool
|
InstallInRoot() bool
|
||||||
InstallInVendor() bool
|
InstallInVendor() bool
|
||||||
InstallForceOS() (*OsType, *ArchType)
|
InstallForceOS() (*OsType, *ArchType)
|
||||||
|
PartitionTag(DeviceConfig) string
|
||||||
HideFromMake()
|
HideFromMake()
|
||||||
IsHideFromMake() bool
|
IsHideFromMake() bool
|
||||||
IsSkipInstall() bool
|
IsSkipInstall() bool
|
||||||
|
|
|
@ -514,6 +514,7 @@ type apexFile struct {
|
||||||
// buildFile is put in the installDir inside the APEX.
|
// buildFile is put in the installDir inside the APEX.
|
||||||
builtFile android.Path
|
builtFile android.Path
|
||||||
installDir string
|
installDir string
|
||||||
|
partition string
|
||||||
customStem string
|
customStem string
|
||||||
symlinks []string // additional symlinks
|
symlinks []string // additional symlinks
|
||||||
|
|
||||||
|
@ -553,6 +554,7 @@ func newApexFile(ctx android.BaseModuleContext, builtFile android.Path, androidM
|
||||||
}
|
}
|
||||||
if module != nil {
|
if module != nil {
|
||||||
ret.moduleDir = ctx.OtherModuleDir(module)
|
ret.moduleDir = ctx.OtherModuleDir(module)
|
||||||
|
ret.partition = module.PartitionTag(ctx.DeviceConfig())
|
||||||
ret.requiredModuleNames = module.RequiredModuleNames()
|
ret.requiredModuleNames = module.RequiredModuleNames()
|
||||||
ret.targetRequiredModuleNames = module.TargetRequiredModuleNames()
|
ret.targetRequiredModuleNames = module.TargetRequiredModuleNames()
|
||||||
ret.hostRequiredModuleNames = module.HostRequiredModuleNames()
|
ret.hostRequiredModuleNames = module.HostRequiredModuleNames()
|
||||||
|
|
|
@ -7122,7 +7122,10 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
|
||||||
cc_library {
|
cc_library {
|
||||||
name: "mylib",
|
name: "mylib",
|
||||||
srcs: ["mylib.cpp"],
|
srcs: ["mylib.cpp"],
|
||||||
shared_libs: ["myotherlib"],
|
shared_libs: [
|
||||||
|
"myotherlib",
|
||||||
|
"myotherlib_ext",
|
||||||
|
],
|
||||||
system_shared_libs: [],
|
system_shared_libs: [],
|
||||||
stl: "none",
|
stl: "none",
|
||||||
apex_available: [
|
apex_available: [
|
||||||
|
@ -7146,6 +7149,20 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
|
||||||
min_sdk_version: "current",
|
min_sdk_version: "current",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "myotherlib_ext",
|
||||||
|
srcs: ["mylib.cpp"],
|
||||||
|
system_shared_libs: [],
|
||||||
|
system_ext_specific: true,
|
||||||
|
stl: "none",
|
||||||
|
apex_available: [
|
||||||
|
"myapex",
|
||||||
|
"myapex.updatable",
|
||||||
|
"//apex_available:platform",
|
||||||
|
],
|
||||||
|
min_sdk_version: "current",
|
||||||
|
}
|
||||||
|
|
||||||
java_library {
|
java_library {
|
||||||
name: "myjar",
|
name: "myjar",
|
||||||
srcs: ["foo/bar/MyClass.java"],
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
|
@ -7186,12 +7203,15 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
|
||||||
t.Errorf("%q is not found", file)
|
t.Errorf("%q is not found", file)
|
||||||
}
|
}
|
||||||
|
|
||||||
ensureSymlinkExists := func(t *testing.T, files []fileInApex, file string) {
|
ensureSymlinkExists := func(t *testing.T, files []fileInApex, file string, target string) {
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
if f.path == file {
|
if f.path == file {
|
||||||
if !f.isLink {
|
if !f.isLink {
|
||||||
t.Errorf("%q is not a symlink", file)
|
t.Errorf("%q is not a symlink", file)
|
||||||
}
|
}
|
||||||
|
if f.src != target {
|
||||||
|
t.Errorf("expected symlink target to be %q, got %q", target, f.src)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7205,23 +7225,27 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
|
||||||
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
||||||
ensureRealfileExists(t, files, "lib64/mylib.so")
|
ensureRealfileExists(t, files, "lib64/mylib.so")
|
||||||
ensureRealfileExists(t, files, "lib64/myotherlib.so")
|
ensureRealfileExists(t, files, "lib64/myotherlib.so")
|
||||||
|
ensureRealfileExists(t, files, "lib64/myotherlib_ext.so")
|
||||||
|
|
||||||
files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
|
files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
|
||||||
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
||||||
ensureRealfileExists(t, files, "lib64/mylib.so")
|
ensureRealfileExists(t, files, "lib64/mylib.so")
|
||||||
ensureRealfileExists(t, files, "lib64/myotherlib.so")
|
ensureRealfileExists(t, files, "lib64/myotherlib.so")
|
||||||
|
ensureRealfileExists(t, files, "lib64/myotherlib_ext.so")
|
||||||
|
|
||||||
// For bundled build, symlink to the system for the non-updatable APEXes only
|
// For bundled build, symlink to the system for the non-updatable APEXes only
|
||||||
ctx = testApex(t, bp)
|
ctx = testApex(t, bp)
|
||||||
files = getFiles(t, ctx, "myapex", "android_common_myapex_image")
|
files = getFiles(t, ctx, "myapex", "android_common_myapex_image")
|
||||||
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
||||||
ensureRealfileExists(t, files, "lib64/mylib.so")
|
ensureRealfileExists(t, files, "lib64/mylib.so")
|
||||||
ensureSymlinkExists(t, files, "lib64/myotherlib.so") // this is symlink
|
ensureSymlinkExists(t, files, "lib64/myotherlib.so", "/system/lib64/myotherlib.so") // this is symlink
|
||||||
|
ensureSymlinkExists(t, files, "lib64/myotherlib_ext.so", "/system_ext/lib64/myotherlib_ext.so") // this is symlink
|
||||||
|
|
||||||
files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
|
files = getFiles(t, ctx, "myapex.updatable", "android_common_myapex.updatable_image")
|
||||||
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
ensureRealfileExists(t, files, "javalib/myjar.jar")
|
||||||
ensureRealfileExists(t, files, "lib64/mylib.so")
|
ensureRealfileExists(t, files, "lib64/mylib.so")
|
||||||
ensureRealfileExists(t, files, "lib64/myotherlib.so") // this is a real file
|
ensureRealfileExists(t, files, "lib64/myotherlib.so") // this is a real file
|
||||||
|
ensureRealfileExists(t, files, "lib64/myotherlib_ext.so") // this is a real file
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSymlinksFromApexToSystemRequiredModuleNames(t *testing.T) {
|
func TestSymlinksFromApexToSystemRequiredModuleNames(t *testing.T) {
|
||||||
|
|
|
@ -476,8 +476,7 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) {
|
||||||
// Copy the built file to the directory. But if the symlink optimization is turned
|
// Copy the built file to the directory. But if the symlink optimization is turned
|
||||||
// on, place a symlink to the corresponding file in /system partition instead.
|
// on, place a symlink to the corresponding file in /system partition instead.
|
||||||
if a.linkToSystemLib && fi.transitiveDep && fi.availableToPlatform() {
|
if a.linkToSystemLib && fi.transitiveDep && fi.availableToPlatform() {
|
||||||
// TODO(jiyong): pathOnDevice should come from fi.module, not being calculated here
|
pathOnDevice := filepath.Join("/", fi.partition, fi.path())
|
||||||
pathOnDevice := filepath.Join("/system", fi.path())
|
|
||||||
copyCommands = append(copyCommands, "ln -sfn "+pathOnDevice+" "+destPath)
|
copyCommands = append(copyCommands, "ln -sfn "+pathOnDevice+" "+destPath)
|
||||||
} else {
|
} else {
|
||||||
// Copy the file into APEX
|
// Copy the file into APEX
|
||||||
|
@ -941,8 +940,7 @@ func (a *apexBundle) buildFlattenedApex(ctx android.ModuleContext) {
|
||||||
dir := filepath.Join("apex", bundleName, fi.installDir)
|
dir := filepath.Join("apex", bundleName, fi.installDir)
|
||||||
installDir := android.PathForModuleInstall(ctx, dir)
|
installDir := android.PathForModuleInstall(ctx, dir)
|
||||||
if a.linkToSystemLib && fi.transitiveDep && fi.availableToPlatform() {
|
if a.linkToSystemLib && fi.transitiveDep && fi.availableToPlatform() {
|
||||||
// TODO(jiyong): pathOnDevice should come from fi.module, not being calculated here
|
pathOnDevice := filepath.Join("/", fi.partition, fi.path())
|
||||||
pathOnDevice := filepath.Join("/system", fi.path())
|
|
||||||
installedSymlinks = append(installedSymlinks,
|
installedSymlinks = append(installedSymlinks,
|
||||||
ctx.InstallAbsoluteSymlink(installDir, fi.stem(), pathOnDevice))
|
ctx.InstallAbsoluteSymlink(installDir, fi.stem(), pathOnDevice))
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue