Add install_in_root to cc_binary
To support init_first_stage, install_in_root property is added to cc_binary. The output is installed to {partition}, rather than {partition}/{mount_point}/bin. Bug: 187196593 Test: build init_first_stage Change-Id: Ibc351645308676ed188f748972eb6312c9cbd64f
This commit is contained in:
parent
94b2e705d1
commit
800d114003
3 changed files with 28 additions and 0 deletions
|
@ -55,6 +55,7 @@ func init() {
|
||||||
AddNeverAllowRules(createCcSdkVariantRules()...)
|
AddNeverAllowRules(createCcSdkVariantRules()...)
|
||||||
AddNeverAllowRules(createUncompressDexRules()...)
|
AddNeverAllowRules(createUncompressDexRules()...)
|
||||||
AddNeverAllowRules(createMakefileGoalRules()...)
|
AddNeverAllowRules(createMakefileGoalRules()...)
|
||||||
|
AddNeverAllowRules(createInitFirstStageRules()...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a NeverAllow rule to the set of rules to apply.
|
// Add a NeverAllow rule to the set of rules to apply.
|
||||||
|
@ -216,6 +217,15 @@ func createMakefileGoalRules() []Rule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createInitFirstStageRules() []Rule {
|
||||||
|
return []Rule{
|
||||||
|
NeverAllow().
|
||||||
|
Without("name", "init_first_stage").
|
||||||
|
With("install_in_root", "true").
|
||||||
|
Because("install_in_root is only for init_first_stage."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func neverallowMutator(ctx BottomUpMutatorContext) {
|
func neverallowMutator(ctx BottomUpMutatorContext) {
|
||||||
m, ok := ctx.Module().(Module)
|
m, ok := ctx.Module().(Module)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
5
cc/cc.go
5
cc/cc.go
|
@ -585,6 +585,7 @@ type installer interface {
|
||||||
hostToolPath() android.OptionalPath
|
hostToolPath() android.OptionalPath
|
||||||
relativeInstallPath() string
|
relativeInstallPath() string
|
||||||
makeUninstallable(mod *Module)
|
makeUninstallable(mod *Module)
|
||||||
|
installInRoot() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// bazelHandler is the interface for a helper object related to deferring to Bazel for
|
// bazelHandler is the interface for a helper object related to deferring to Bazel for
|
||||||
|
@ -1309,6 +1310,10 @@ func (c *Module) isCfiAssemblySupportEnabled() bool {
|
||||||
Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support)
|
Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Module) InstallInRoot() bool {
|
||||||
|
return c.installer != nil && c.installer.installInRoot()
|
||||||
|
}
|
||||||
|
|
||||||
type baseModuleContext struct {
|
type baseModuleContext struct {
|
||||||
android.BaseModuleContext
|
android.BaseModuleContext
|
||||||
moduleContextImpl
|
moduleContextImpl
|
||||||
|
|
|
@ -25,6 +25,10 @@ import (
|
||||||
type InstallerProperties struct {
|
type InstallerProperties struct {
|
||||||
// install to a subdirectory of the default install path for the module
|
// install to a subdirectory of the default install path for the module
|
||||||
Relative_install_path *string `android:"arch_variant"`
|
Relative_install_path *string `android:"arch_variant"`
|
||||||
|
|
||||||
|
// Install output directly in {partition}/, not in any subdir. This is only intended for use by
|
||||||
|
// init_first_stage.
|
||||||
|
Install_in_root *bool `android:"arch_variant"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type installLocation int
|
type installLocation int
|
||||||
|
@ -66,6 +70,11 @@ func (installer *baseInstaller) installDir(ctx ModuleContext) android.InstallPat
|
||||||
if ctx.toolchain().Is64Bit() && installer.dir64 != "" {
|
if ctx.toolchain().Is64Bit() && installer.dir64 != "" {
|
||||||
dir = installer.dir64
|
dir = installer.dir64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if installer.installInRoot() {
|
||||||
|
dir = ""
|
||||||
|
}
|
||||||
|
|
||||||
if ctx.Target().NativeBridge == android.NativeBridgeEnabled {
|
if ctx.Target().NativeBridge == android.NativeBridgeEnabled {
|
||||||
dir = filepath.Join(dir, ctx.Target().NativeBridgeRelativePath)
|
dir = filepath.Join(dir, ctx.Target().NativeBridgeRelativePath)
|
||||||
} else if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) {
|
} else if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) {
|
||||||
|
@ -110,3 +119,7 @@ func (installer *baseInstaller) relativeInstallPath() string {
|
||||||
func (installer *baseInstaller) makeUninstallable(mod *Module) {
|
func (installer *baseInstaller) makeUninstallable(mod *Module) {
|
||||||
mod.ModuleBase.MakeUninstallable()
|
mod.ModuleBase.MakeUninstallable()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (installer *baseInstaller) installInRoot() bool {
|
||||||
|
return Bool(installer.Properties.Install_in_root)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue