Loading android/module.go +23 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ type ModuleContext interface { InstallExecutable(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath InstallFile(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath InstallSymlink(installPath OutputPath, name string, srcPath OutputPath) OutputPath InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath CheckbuildFile(srcPath Path) AddMissingDependencies(deps []string) Loading Loading @@ -1316,6 +1317,28 @@ func (a *androidModuleContext) InstallSymlink(installPath OutputPath, name strin return fullInstallPath } // installPath/name -> absPath where absPath might be a path that is available only at runtime // (e.g. /apex/...) func (a *androidModuleContext) InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath { fullInstallPath := installPath.Join(a, name) a.module.base().hooks.runInstallHooks(a, fullInstallPath, true) if !a.skipInstall(fullInstallPath) { a.Build(pctx, BuildParams{ Rule: Symlink, Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath, Output: fullInstallPath, Default: !a.Config().EmbeddedInMake(), Args: map[string]string{ "fromPath": absPath, }, }) a.installFiles = append(a.installFiles, fullInstallPath) } return fullInstallPath } func (a *androidModuleContext) CheckbuildFile(srcPath Path) { a.checkbuildFiles = append(a.checkbuildFiles, srcPath) } Loading cc/androidmk.go +6 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,9 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An if len(library.Properties.Overrides) > 0 { fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(library.Properties.Overrides, " ")) } if len(library.post_install_cmds) > 0 { fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(library.post_install_cmds, "&& ")) } }) } else if library.header() { ret.Class = "HEADER_LIBRARIES" Loading Loading @@ -231,6 +234,9 @@ func (binary *binaryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.Andr if len(binary.Properties.Overrides) > 0 { fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(binary.Properties.Overrides, " ")) } if len(binary.post_install_cmds) > 0 { fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(binary.post_install_cmds, "&& ")) } }) } Loading cc/binary.go +27 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ package cc import ( "path/filepath" "github.com/google/blueprint" "android/soong/android" Loading Loading @@ -91,6 +93,8 @@ type binaryDecorator struct { // Location of the file that should be copied to dist dir when requested distFile android.OptionalPath post_install_cmds []string } var _ linker = (*binaryDecorator)(nil) Loading Loading @@ -249,7 +253,7 @@ func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags } else { switch ctx.Os() { case android.Android: if ctx.bootstrap() { if ctx.bootstrap() && !ctx.inRecovery() { flags.DynamicLinker = "/system/bin/bootstrap/linker" } else { flags.DynamicLinker = "/system/bin/linker" Loading Loading @@ -413,7 +417,29 @@ func (binary *binaryDecorator) symlinkList() []string { return binary.symlinks } // /system/bin/linker -> /apex/com.android.runtime/bin/linker func (binary *binaryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) { dir := binary.baseInstaller.installDir(ctx) dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir) target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), file.Base()) ctx.InstallAbsoluteSymlink(dir, file.Base(), target) binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target)) for _, symlink := range binary.symlinks { ctx.InstallAbsoluteSymlink(dir, symlink, target) binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, symlink, target)) } } func (binary *binaryDecorator) install(ctx ModuleContext, file android.Path) { // Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory. // The original path becomes a symlink to the corresponding file in the // runtime APEX. if isBionic(ctx.baseModuleName()) && ctx.Arch().Native && ctx.apexName() == "" && !ctx.inRecovery() { binary.installSymlinkToRuntimeApex(ctx, file) binary.baseInstaller.subDir = "bootstrap" } binary.baseInstaller.install(ctx, file) for _, symlink := range binary.symlinks { ctx.InstallSymlink(binary.baseInstaller.installDir(ctx), symlink, binary.baseInstaller.path) Loading cc/cc.go +8 −0 Original line number Diff line number Diff line Loading @@ -599,6 +599,14 @@ func (c *Module) bootstrap() bool { return Bool(c.Properties.Bootstrap) } func isBionic(name string) bool { switch name { case "libc", "libm", "libdl", "linker": return true } return false } type baseModuleContext struct { android.BaseContext moduleContextImpl Loading cc/library.go +16 −9 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ package cc import ( "path/filepath" "regexp" "sort" "strconv" Loading Loading @@ -290,6 +291,8 @@ type libraryDecorator struct { versionScriptPath android.ModuleGenPath post_install_cmds []string // Decorated interafaces *baseCompiler *baseLinker Loading Loading @@ -888,6 +891,14 @@ func (library *libraryDecorator) toc() android.OptionalPath { return library.tocFile } func (library *libraryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) { dir := library.baseInstaller.installDir(ctx) dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir) target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), "bionic", file.Base()) ctx.InstallAbsoluteSymlink(dir, file.Base(), target) library.post_install_cmds = append(library.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target)) } func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { if library.shared() { if ctx.Device() && ctx.useVndk() { Loading @@ -905,15 +916,11 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { } } } else if len(library.Properties.Stubs.Versions) > 0 && android.DirectlyInAnyApex(ctx, ctx.ModuleName()) { // If a library in an APEX has stable versioned APIs, we basically don't need // to have the platform variant of the library in /system partition because // platform components can just use the lib from the APEX without fearing about // compatibility. However, if the library is required for some early processes // before the APEX is activated, the platform variant may also be required. // In that case, it is installed to the subdirectory 'bootstrap' in order to // be distinguished/isolated from other non-bootstrap libraries in /system/lib // so that the bootstrap libraries are used only when the APEX isn't ready. if !library.buildStubs() && ctx.Arch().Native { // Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory. // The original path becomes a symlink to the corresponding file in the // runtime APEX. if isBionic(ctx.baseModuleName()) && !library.buildStubs() && ctx.Arch().Native && !ctx.inRecovery() { library.installSymlinkToRuntimeApex(ctx, file) library.baseInstaller.subDir = "bootstrap" } } Loading Loading
android/module.go +23 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ type ModuleContext interface { InstallExecutable(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath InstallFile(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath InstallSymlink(installPath OutputPath, name string, srcPath OutputPath) OutputPath InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath CheckbuildFile(srcPath Path) AddMissingDependencies(deps []string) Loading Loading @@ -1316,6 +1317,28 @@ func (a *androidModuleContext) InstallSymlink(installPath OutputPath, name strin return fullInstallPath } // installPath/name -> absPath where absPath might be a path that is available only at runtime // (e.g. /apex/...) func (a *androidModuleContext) InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath { fullInstallPath := installPath.Join(a, name) a.module.base().hooks.runInstallHooks(a, fullInstallPath, true) if !a.skipInstall(fullInstallPath) { a.Build(pctx, BuildParams{ Rule: Symlink, Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath, Output: fullInstallPath, Default: !a.Config().EmbeddedInMake(), Args: map[string]string{ "fromPath": absPath, }, }) a.installFiles = append(a.installFiles, fullInstallPath) } return fullInstallPath } func (a *androidModuleContext) CheckbuildFile(srcPath Path) { a.checkbuildFiles = append(a.checkbuildFiles, srcPath) } Loading
cc/androidmk.go +6 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,9 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An if len(library.Properties.Overrides) > 0 { fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(library.Properties.Overrides, " ")) } if len(library.post_install_cmds) > 0 { fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(library.post_install_cmds, "&& ")) } }) } else if library.header() { ret.Class = "HEADER_LIBRARIES" Loading Loading @@ -231,6 +234,9 @@ func (binary *binaryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.Andr if len(binary.Properties.Overrides) > 0 { fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(binary.Properties.Overrides, " ")) } if len(binary.post_install_cmds) > 0 { fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(binary.post_install_cmds, "&& ")) } }) } Loading
cc/binary.go +27 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ package cc import ( "path/filepath" "github.com/google/blueprint" "android/soong/android" Loading Loading @@ -91,6 +93,8 @@ type binaryDecorator struct { // Location of the file that should be copied to dist dir when requested distFile android.OptionalPath post_install_cmds []string } var _ linker = (*binaryDecorator)(nil) Loading Loading @@ -249,7 +253,7 @@ func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags } else { switch ctx.Os() { case android.Android: if ctx.bootstrap() { if ctx.bootstrap() && !ctx.inRecovery() { flags.DynamicLinker = "/system/bin/bootstrap/linker" } else { flags.DynamicLinker = "/system/bin/linker" Loading Loading @@ -413,7 +417,29 @@ func (binary *binaryDecorator) symlinkList() []string { return binary.symlinks } // /system/bin/linker -> /apex/com.android.runtime/bin/linker func (binary *binaryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) { dir := binary.baseInstaller.installDir(ctx) dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir) target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), file.Base()) ctx.InstallAbsoluteSymlink(dir, file.Base(), target) binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target)) for _, symlink := range binary.symlinks { ctx.InstallAbsoluteSymlink(dir, symlink, target) binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, symlink, target)) } } func (binary *binaryDecorator) install(ctx ModuleContext, file android.Path) { // Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory. // The original path becomes a symlink to the corresponding file in the // runtime APEX. if isBionic(ctx.baseModuleName()) && ctx.Arch().Native && ctx.apexName() == "" && !ctx.inRecovery() { binary.installSymlinkToRuntimeApex(ctx, file) binary.baseInstaller.subDir = "bootstrap" } binary.baseInstaller.install(ctx, file) for _, symlink := range binary.symlinks { ctx.InstallSymlink(binary.baseInstaller.installDir(ctx), symlink, binary.baseInstaller.path) Loading
cc/cc.go +8 −0 Original line number Diff line number Diff line Loading @@ -599,6 +599,14 @@ func (c *Module) bootstrap() bool { return Bool(c.Properties.Bootstrap) } func isBionic(name string) bool { switch name { case "libc", "libm", "libdl", "linker": return true } return false } type baseModuleContext struct { android.BaseContext moduleContextImpl Loading
cc/library.go +16 −9 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ package cc import ( "path/filepath" "regexp" "sort" "strconv" Loading Loading @@ -290,6 +291,8 @@ type libraryDecorator struct { versionScriptPath android.ModuleGenPath post_install_cmds []string // Decorated interafaces *baseCompiler *baseLinker Loading Loading @@ -888,6 +891,14 @@ func (library *libraryDecorator) toc() android.OptionalPath { return library.tocFile } func (library *libraryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) { dir := library.baseInstaller.installDir(ctx) dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir) target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), "bionic", file.Base()) ctx.InstallAbsoluteSymlink(dir, file.Base(), target) library.post_install_cmds = append(library.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target)) } func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { if library.shared() { if ctx.Device() && ctx.useVndk() { Loading @@ -905,15 +916,11 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { } } } else if len(library.Properties.Stubs.Versions) > 0 && android.DirectlyInAnyApex(ctx, ctx.ModuleName()) { // If a library in an APEX has stable versioned APIs, we basically don't need // to have the platform variant of the library in /system partition because // platform components can just use the lib from the APEX without fearing about // compatibility. However, if the library is required for some early processes // before the APEX is activated, the platform variant may also be required. // In that case, it is installed to the subdirectory 'bootstrap' in order to // be distinguished/isolated from other non-bootstrap libraries in /system/lib // so that the bootstrap libraries are used only when the APEX isn't ready. if !library.buildStubs() && ctx.Arch().Native { // Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory. // The original path becomes a symlink to the corresponding file in the // runtime APEX. if isBionic(ctx.baseModuleName()) && !library.buildStubs() && ctx.Arch().Native && !ctx.inRecovery() { library.installSymlinkToRuntimeApex(ctx, file) library.baseInstaller.subDir = "bootstrap" } } Loading