Add InstallBypassMake
Allow modules to mark themselves as InstallBypassMake, which will cause android.PathForModuleInstall to return a path in $OUT_DIR instead of $OUT_DIR/soong. This can be used for modules that can handle installation to the final location on their own. The main blocker for most modules is support for the "required" property, which requires adding dependencies on the installed location of other modules. Bug: 122332855 Test: m checkbuild Change-Id: I85238d937ff30335167d4b3fec79bbefc734b5e1
This commit is contained in:
@@ -689,10 +689,6 @@ func (c *config) DevicePrimaryArchType() ArchType {
|
||||
return c.Targets[Android][0].Arch.ArchType
|
||||
}
|
||||
|
||||
func (c *config) SkipDeviceInstall() bool {
|
||||
return c.EmbeddedInMake()
|
||||
}
|
||||
|
||||
func (c *config) SkipMegaDeviceInstall(path string) bool {
|
||||
return Bool(c.Mega_device) &&
|
||||
strings.HasPrefix(path, filepath.Join(c.buildDir, "target", "product"))
|
||||
|
@@ -155,6 +155,7 @@ type ModuleContext interface {
|
||||
InstallInData() bool
|
||||
InstallInSanitizerDir() bool
|
||||
InstallInRecovery() bool
|
||||
InstallBypassMake() bool
|
||||
|
||||
RequiredModuleNames() []string
|
||||
HostRequiredModuleNames() []string
|
||||
@@ -192,6 +193,7 @@ type Module interface {
|
||||
InstallInData() bool
|
||||
InstallInSanitizerDir() bool
|
||||
InstallInRecovery() bool
|
||||
InstallBypassMake() bool
|
||||
SkipInstall()
|
||||
ExportedToMake() bool
|
||||
NoticeFile() OptionalPath
|
||||
@@ -837,6 +839,10 @@ func (m *ModuleBase) InstallInRecovery() bool {
|
||||
return Bool(m.commonProperties.Recovery)
|
||||
}
|
||||
|
||||
func (m *ModuleBase) InstallBypassMake() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Owner() string {
|
||||
return String(m.commonProperties.Owner)
|
||||
}
|
||||
@@ -1493,6 +1499,10 @@ func (m *moduleContext) InstallInRecovery() bool {
|
||||
return m.module.InstallInRecovery()
|
||||
}
|
||||
|
||||
func (m *moduleContext) InstallBypassMake() bool {
|
||||
return m.module.InstallBypassMake()
|
||||
}
|
||||
|
||||
func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool {
|
||||
if m.module.base().commonProperties.SkipInstall {
|
||||
return true
|
||||
@@ -1506,7 +1516,7 @@ func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool {
|
||||
}
|
||||
|
||||
if m.Device() {
|
||||
if m.Config().SkipDeviceInstall() {
|
||||
if m.Config().EmbeddedInMake() && !m.InstallBypassMake() {
|
||||
return true
|
||||
}
|
||||
|
||||
|
@@ -46,6 +46,7 @@ type ModuleInstallPathContext interface {
|
||||
InstallInData() bool
|
||||
InstallInSanitizerDir() bool
|
||||
InstallInRecovery() bool
|
||||
InstallBypassMake() bool
|
||||
}
|
||||
|
||||
var _ ModuleInstallPathContext = ModuleContext(nil)
|
||||
@@ -818,6 +819,17 @@ func PathForOutput(ctx PathContext, pathComponents ...string) OutputPath {
|
||||
return OutputPath{basePath{path, ctx.Config(), ""}}
|
||||
}
|
||||
|
||||
// pathForInstallInMakeDir is used by PathForModuleInstall when the module returns true
|
||||
// for InstallBypassMake to produce an OutputPath that installs to $OUT_DIR instead of
|
||||
// $OUT_DIR/soong.
|
||||
func pathForInstallInMakeDir(ctx PathContext, pathComponents ...string) OutputPath {
|
||||
path, err := validatePath(pathComponents...)
|
||||
if err != nil {
|
||||
reportPathError(ctx, err)
|
||||
}
|
||||
return OutputPath{basePath{"../" + path, ctx.Config(), ""}}
|
||||
}
|
||||
|
||||
// PathsForOutput returns Paths rooted from buildDir
|
||||
func PathsForOutput(ctx PathContext, paths []string) WritablePaths {
|
||||
ret := make(WritablePaths, len(paths))
|
||||
@@ -1123,6 +1135,9 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
|
||||
outPaths = append([]string{"debug"}, outPaths...)
|
||||
}
|
||||
outPaths = append(outPaths, pathComponents...)
|
||||
if ctx.InstallBypassMake() && ctx.Config().EmbeddedInMake() {
|
||||
return pathForInstallInMakeDir(ctx, outPaths...)
|
||||
}
|
||||
return PathForOutput(ctx, outPaths...)
|
||||
}
|
||||
|
||||
|
@@ -227,6 +227,10 @@ func (m moduleInstallPathContextImpl) InstallInRecovery() bool {
|
||||
return m.inRecovery
|
||||
}
|
||||
|
||||
func (m moduleInstallPathContextImpl) InstallBypassMake() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func TestPathForModuleInstall(t *testing.T) {
|
||||
testConfig := TestConfig("", nil)
|
||||
|
||||
|
Reference in New Issue
Block a user