diff --git a/androidmk/androidmk/androidmk_test.go b/androidmk/androidmk/androidmk_test.go index ea537056d..3c3619769 100644 --- a/androidmk/androidmk/androidmk_test.go +++ b/androidmk/androidmk/androidmk_test.go @@ -1118,6 +1118,25 @@ prebuilt_usr_share_host { src: "foo.txt", } +`, + }, + { + desc: "prebuilt_root_host", + in: ` +include $(CLEAR_VARS) +LOCAL_MODULE := foo +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_PATH := $(HOST_OUT)/subdir +LOCAL_SRC_FILES := foo.txt +include $(BUILD_PREBUILT) +`, + expected: ` +prebuilt_root_host { + name: "foo", + + src: "foo.txt", + relative_install_path: "subdir", +} `, }, { diff --git a/bpfix/bpfix/bpfix.go b/bpfix/bpfix/bpfix.go index b6834721a..a9a0b1f1e 100644 --- a/bpfix/bpfix/bpfix.go +++ b/bpfix/bpfix/bpfix.go @@ -610,7 +610,11 @@ func (f etcPrebuiltModuleUpdate) update(m *parser.Module, path string) bool { } var localModuleUpdate = map[string][]etcPrebuiltModuleUpdate{ - "HOST_OUT": {{prefix: "/etc", modType: "prebuilt_etc_host"}, {prefix: "/usr/share", modType: "prebuilt_usr_share_host"}}, + "HOST_OUT": { + {prefix: "/etc", modType: "prebuilt_etc_host"}, + {prefix: "/usr/share", modType: "prebuilt_usr_share_host"}, + {prefix: "", modType: "prebuilt_root_host"}, + }, "PRODUCT_OUT": {{prefix: "/system/etc"}, {prefix: "/vendor/etc", flags: []string{"proprietary"}}}, "TARGET_OUT": {{prefix: "/usr/share", modType: "prebuilt_usr_share"}, {prefix: "/fonts", modType: "prebuilt_font"}, {prefix: "/etc/firmware", modType: "prebuilt_firmware"}, {prefix: "/vendor/firmware", modType: "prebuilt_firmware", flags: []string{"proprietary"}}, diff --git a/bpfix/bpfix/bpfix_test.go b/bpfix/bpfix/bpfix_test.go index 69f596752..1941837bc 100644 --- a/bpfix/bpfix/bpfix_test.go +++ b/bpfix/bpfix/bpfix_test.go @@ -828,6 +828,46 @@ func TestRewritePrebuiltEtc(t *testing.T) { } `, }, + { + name: "prebuilt_etc sub_dir", + in: ` + prebuilt_etc_host { + name: "foo", + src: "bar", + local_module_path: { + var: "HOST_OUT", + fixed: "/etc/baz", + }, + } + `, + out: `prebuilt_etc_host { + name: "foo", + src: "bar", + relative_install_path: "baz", + + } + `, + }, + { + name: "prebuilt_etc sub_dir", + in: ` + prebuilt_etc_host { + name: "foo", + src: "bar", + local_module_path: { + var: "HOST_OUT", + fixed: "/baz/sub", + }, + } + `, + out: `prebuilt_root_host { + name: "foo", + src: "bar", + relative_install_path: "baz/sub", + + } + `, + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go index 377a56651..a142833dd 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -54,6 +54,7 @@ func RegisterPrebuiltEtcBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("prebuilt_etc", PrebuiltEtcFactory) ctx.RegisterModuleType("prebuilt_etc_host", PrebuiltEtcHostFactory) ctx.RegisterModuleType("prebuilt_root", PrebuiltRootFactory) + ctx.RegisterModuleType("prebuilt_root_host", PrebuiltRootHostFactory) ctx.RegisterModuleType("prebuilt_usr_share", PrebuiltUserShareFactory) ctx.RegisterModuleType("prebuilt_usr_share_host", PrebuiltUserShareHostFactory) ctx.RegisterModuleType("prebuilt_font", PrebuiltFontFactory) @@ -454,6 +455,17 @@ func PrebuiltRootFactory() android.Module { return module } +// prebuilt_root_host is for a host prebuilt artifact that is installed in $(HOST_OUT)/ +// directory. +func PrebuiltRootHostFactory() android.Module { + module := &PrebuiltEtc{} + InitPrebuiltEtcModule(module, ".") + // This module is host-only + android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon) + android.InitDefaultableModule(module) + return module +} + // prebuilt_usr_share is for a prebuilt artifact that is installed in // /usr/share/ directory. func PrebuiltUserShareFactory() android.Module {