diff --git a/android/arch.go b/android/arch.go index bb1b61366..84d1d59a0 100644 --- a/android/arch.go +++ b/android/arch.go @@ -1543,20 +1543,20 @@ type archConfig struct { // getNdkAbisConfig returns a list of archConfigs for the ABIs supported by the NDK. func getNdkAbisConfig() []archConfig { return []archConfig{ - {"arm", "armv7-a", "", []string{"armeabi-v7a"}}, {"arm64", "armv8-a-branchprot", "", []string{"arm64-v8a"}}, - {"x86", "", "", []string{"x86"}}, + {"arm", "armv7-a", "", []string{"armeabi-v7a"}}, {"x86_64", "", "", []string{"x86_64"}}, + {"x86", "", "", []string{"x86"}}, } } // getAmlAbisConfig returns a list of archConfigs for the ABIs supported by mainline modules. func getAmlAbisConfig() []archConfig { return []archConfig{ - {"arm", "armv7-a-neon", "", []string{"armeabi-v7a"}}, {"arm64", "armv8-a", "", []string{"arm64-v8a"}}, - {"x86", "", "", []string{"x86"}}, + {"arm", "armv7-a-neon", "", []string{"armeabi-v7a"}}, {"x86_64", "", "", []string{"x86_64"}}, + {"x86", "", "", []string{"x86"}}, } } diff --git a/android/neverallow.go b/android/neverallow.go index 41b399a70..19b58a775 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -55,6 +55,7 @@ func init() { AddNeverAllowRules(createCcSdkVariantRules()...) AddNeverAllowRules(createUncompressDexRules()...) AddNeverAllowRules(createMakefileGoalRules()...) + AddNeverAllowRules(createInitFirstStageRules()...) } // 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) { m, ok := ctx.Module().(Module) if !ok { diff --git a/cc/cc.go b/cc/cc.go index c62fd6c8f..5ee031462 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -580,6 +580,7 @@ type installer interface { hostToolPath() android.OptionalPath relativeInstallPath() string makeUninstallable(mod *Module) + installInRoot() bool } // bazelHandler is the interface for a helper object related to deferring to Bazel for @@ -1306,6 +1307,10 @@ func (c *Module) isCfiAssemblySupportEnabled() bool { Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support) } +func (c *Module) InstallInRoot() bool { + return c.installer != nil && c.installer.installInRoot() +} + type baseModuleContext struct { android.BaseModuleContext moduleContextImpl diff --git a/cc/installer.go b/cc/installer.go index e551c63e2..f95b49346 100644 --- a/cc/installer.go +++ b/cc/installer.go @@ -25,6 +25,10 @@ import ( type InstallerProperties struct { // install to a subdirectory of the default install path for the module 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 @@ -66,6 +70,11 @@ func (installer *baseInstaller) installDir(ctx ModuleContext) android.InstallPat if ctx.toolchain().Is64Bit() && installer.dir64 != "" { dir = installer.dir64 } + + if installer.installInRoot() { + dir = "" + } + if ctx.Target().NativeBridge == android.NativeBridgeEnabled { dir = filepath.Join(dir, ctx.Target().NativeBridgeRelativePath) } 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) { mod.ModuleBase.MakeUninstallable() } + +func (installer *baseInstaller) installInRoot() bool { + return Bool(installer.Properties.Install_in_root) +} diff --git a/sysprop/sysprop_library.go b/sysprop/sysprop_library.go index f1c2d0df0..a29d4c3ac 100644 --- a/sysprop/sysprop_library.go +++ b/sysprop/sysprop_library.go @@ -145,6 +145,9 @@ type syspropLibraryProperties struct { // If set to true, allow this module to be dexed and installed on devices. Installable *bool + // Make this module available when building for ramdisk + Ramdisk_available *bool + // Make this module available when building for recovery Recovery_available *bool @@ -396,6 +399,7 @@ type ccLibraryProperties struct { Recovery_available *bool Vendor_available *bool Product_available *bool + Ramdisk_available *bool Host_supported *bool Apex_available []string Min_sdk_version *string @@ -475,6 +479,7 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) { ccProps.Recovery_available = m.properties.Recovery_available ccProps.Vendor_available = m.properties.Vendor_available ccProps.Product_available = m.properties.Product_available + ccProps.Ramdisk_available = m.properties.Ramdisk_available ccProps.Host_supported = m.properties.Host_supported ccProps.Apex_available = m.ApexProperties.Apex_available ccProps.Min_sdk_version = m.properties.Cpp.Min_sdk_version