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
|
return c.Targets[Android][0].Arch.ArchType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *config) SkipDeviceInstall() bool {
|
|
||||||
return c.EmbeddedInMake()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *config) SkipMegaDeviceInstall(path string) bool {
|
func (c *config) SkipMegaDeviceInstall(path string) bool {
|
||||||
return Bool(c.Mega_device) &&
|
return Bool(c.Mega_device) &&
|
||||||
strings.HasPrefix(path, filepath.Join(c.buildDir, "target", "product"))
|
strings.HasPrefix(path, filepath.Join(c.buildDir, "target", "product"))
|
||||||
|
@@ -155,6 +155,7 @@ type ModuleContext interface {
|
|||||||
InstallInData() bool
|
InstallInData() bool
|
||||||
InstallInSanitizerDir() bool
|
InstallInSanitizerDir() bool
|
||||||
InstallInRecovery() bool
|
InstallInRecovery() bool
|
||||||
|
InstallBypassMake() bool
|
||||||
|
|
||||||
RequiredModuleNames() []string
|
RequiredModuleNames() []string
|
||||||
HostRequiredModuleNames() []string
|
HostRequiredModuleNames() []string
|
||||||
@@ -192,6 +193,7 @@ type Module interface {
|
|||||||
InstallInData() bool
|
InstallInData() bool
|
||||||
InstallInSanitizerDir() bool
|
InstallInSanitizerDir() bool
|
||||||
InstallInRecovery() bool
|
InstallInRecovery() bool
|
||||||
|
InstallBypassMake() bool
|
||||||
SkipInstall()
|
SkipInstall()
|
||||||
ExportedToMake() bool
|
ExportedToMake() bool
|
||||||
NoticeFile() OptionalPath
|
NoticeFile() OptionalPath
|
||||||
@@ -837,6 +839,10 @@ func (m *ModuleBase) InstallInRecovery() bool {
|
|||||||
return Bool(m.commonProperties.Recovery)
|
return Bool(m.commonProperties.Recovery)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *ModuleBase) InstallBypassMake() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (m *ModuleBase) Owner() string {
|
func (m *ModuleBase) Owner() string {
|
||||||
return String(m.commonProperties.Owner)
|
return String(m.commonProperties.Owner)
|
||||||
}
|
}
|
||||||
@@ -1493,6 +1499,10 @@ func (m *moduleContext) InstallInRecovery() bool {
|
|||||||
return m.module.InstallInRecovery()
|
return m.module.InstallInRecovery()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *moduleContext) InstallBypassMake() bool {
|
||||||
|
return m.module.InstallBypassMake()
|
||||||
|
}
|
||||||
|
|
||||||
func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool {
|
func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool {
|
||||||
if m.module.base().commonProperties.SkipInstall {
|
if m.module.base().commonProperties.SkipInstall {
|
||||||
return true
|
return true
|
||||||
@@ -1506,7 +1516,7 @@ func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if m.Device() {
|
if m.Device() {
|
||||||
if m.Config().SkipDeviceInstall() {
|
if m.Config().EmbeddedInMake() && !m.InstallBypassMake() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,6 +46,7 @@ type ModuleInstallPathContext interface {
|
|||||||
InstallInData() bool
|
InstallInData() bool
|
||||||
InstallInSanitizerDir() bool
|
InstallInSanitizerDir() bool
|
||||||
InstallInRecovery() bool
|
InstallInRecovery() bool
|
||||||
|
InstallBypassMake() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ ModuleInstallPathContext = ModuleContext(nil)
|
var _ ModuleInstallPathContext = ModuleContext(nil)
|
||||||
@@ -818,6 +819,17 @@ func PathForOutput(ctx PathContext, pathComponents ...string) OutputPath {
|
|||||||
return OutputPath{basePath{path, ctx.Config(), ""}}
|
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
|
// PathsForOutput returns Paths rooted from buildDir
|
||||||
func PathsForOutput(ctx PathContext, paths []string) WritablePaths {
|
func PathsForOutput(ctx PathContext, paths []string) WritablePaths {
|
||||||
ret := make(WritablePaths, len(paths))
|
ret := make(WritablePaths, len(paths))
|
||||||
@@ -1123,6 +1135,9 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
|
|||||||
outPaths = append([]string{"debug"}, outPaths...)
|
outPaths = append([]string{"debug"}, outPaths...)
|
||||||
}
|
}
|
||||||
outPaths = append(outPaths, pathComponents...)
|
outPaths = append(outPaths, pathComponents...)
|
||||||
|
if ctx.InstallBypassMake() && ctx.Config().EmbeddedInMake() {
|
||||||
|
return pathForInstallInMakeDir(ctx, outPaths...)
|
||||||
|
}
|
||||||
return PathForOutput(ctx, outPaths...)
|
return PathForOutput(ctx, outPaths...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -227,6 +227,10 @@ func (m moduleInstallPathContextImpl) InstallInRecovery() bool {
|
|||||||
return m.inRecovery
|
return m.inRecovery
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m moduleInstallPathContextImpl) InstallBypassMake() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func TestPathForModuleInstall(t *testing.T) {
|
func TestPathForModuleInstall(t *testing.T) {
|
||||||
testConfig := TestConfig("", nil)
|
testConfig := TestConfig("", nil)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user