Add cc_prebuilt_object.

To be used for prebuilt object support in SDK snapshots.

Test: m nothing
Bug: 148934017
Change-Id: I53d58100cc1d410c5cf5b7906de7ed6f7add2035
This commit is contained in:
Martin Stjernholm
2020-03-11 21:45:49 +00:00
parent 2812418eac
commit 0b92ac8e43
3 changed files with 70 additions and 3 deletions

View File

@@ -47,12 +47,18 @@ type ObjectLinkerProperties struct {
Linker_script *string `android:"path,arch_variant"`
}
func newObject() *Module {
module := newBaseModule(android.HostAndDeviceSupported, android.MultilibBoth)
module.sanitize = &sanitize{}
module.stl = &stl{}
return module
}
// cc_object runs the compiler without running the linker. It is rarely
// necessary, but sometimes used to generate .s files from .c files to use as
// input to a cc_genrule module.
func ObjectFactory() android.Module {
module := newBaseModule(android.HostAndDeviceSupported, android.MultilibBoth)
module.sanitize = &sanitize{}
module := newObject()
module.linker = &objectLinker{
baseLinker: NewBaseLinker(module.sanitize),
}
@@ -61,7 +67,6 @@ func ObjectFactory() android.Module {
// Clang's address-significance tables are incompatible with ld -r.
module.compiler.appendCflags([]string{"-fno-addrsig"})
module.stl = &stl{}
return module.Init()
}

View File

@@ -26,6 +26,7 @@ func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_prebuilt_library", PrebuiltLibraryFactory)
ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
ctx.RegisterModuleType("cc_prebuilt_object", prebuiltObjectFactory)
ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
}
@@ -217,6 +218,50 @@ func NewPrebuiltStaticLibrary(hod android.HostOrDeviceSupported) (*Module, *libr
return module, library
}
type prebuiltObjectProperties struct {
Srcs []string `android:"path,arch_variant"`
}
type prebuiltObjectLinker struct {
android.Prebuilt
objectLinker
properties prebuiltObjectProperties
}
func (p *prebuiltObjectLinker) prebuilt() *android.Prebuilt {
return &p.Prebuilt
}
var _ prebuiltLinkerInterface = (*prebuiltObjectLinker)(nil)
func (p *prebuiltObjectLinker) link(ctx ModuleContext,
flags Flags, deps PathDeps, objs Objects) android.Path {
if len(p.properties.Srcs) > 0 {
return p.Prebuilt.SingleSourcePath(ctx)
}
return nil
}
func newPrebuiltObject() *Module {
module := newObject()
prebuilt := &prebuiltObjectLinker{
objectLinker: objectLinker{
baseLinker: NewBaseLinker(nil),
},
}
module.linker = prebuilt
module.AddProperties(&prebuilt.properties)
android.InitPrebuiltModule(module, &prebuilt.properties.Srcs)
android.InitSdkAwareModule(module)
return module
}
func prebuiltObjectFactory() android.Module {
module := newPrebuiltObject()
return module.Init()
}
type prebuiltBinaryLinker struct {
*binaryDecorator
prebuiltLinker

View File

@@ -73,6 +73,15 @@ func TestPrebuilt(t *testing.T) {
srcs: ["libf.so"],
},
}
cc_object {
name: "crtx",
}
cc_prebuilt_object {
name: "crtx",
srcs: ["crtx.o"],
}
`
ctx := testPrebuilt(t, bp)
@@ -84,6 +93,7 @@ func TestPrebuilt(t *testing.T) {
libe := ctx.ModuleForTests("libe", "android_arm64_armv8-a_static").Module()
libfStatic := ctx.ModuleForTests("libf", "android_arm64_armv8-a_static").Module()
libfShared := ctx.ModuleForTests("libf", "android_arm64_armv8-a_shared").Module()
crtx := ctx.ModuleForTests("crtx", "android_arm64_armv8-a").Module()
prebuiltLiba := ctx.ModuleForTests("prebuilt_liba", "android_arm64_armv8-a_shared").Module()
prebuiltLibb := ctx.ModuleForTests("prebuilt_libb", "android_arm64_armv8-a_static").Module()
@@ -91,6 +101,7 @@ func TestPrebuilt(t *testing.T) {
prebuiltLibe := ctx.ModuleForTests("prebuilt_libe", "android_arm64_armv8-a_static").Module()
prebuiltLibfStatic := ctx.ModuleForTests("prebuilt_libf", "android_arm64_armv8-a_static").Module()
prebuiltLibfShared := ctx.ModuleForTests("prebuilt_libf", "android_arm64_armv8-a_shared").Module()
prebuiltCrtx := ctx.ModuleForTests("prebuilt_crtx", "android_arm64_armv8-a").Module()
hasDep := func(m android.Module, wantDep android.Module) bool {
t.Helper()
@@ -126,9 +137,14 @@ func TestPrebuilt(t *testing.T) {
if !hasDep(libfShared, prebuiltLibfShared) {
t.Errorf("libf shared missing dependency on prebuilt_libf")
}
if !hasDep(crtx, prebuiltCrtx) {
t.Errorf("crtx missing dependency on prebuilt_crtx")
}
}
func testPrebuilt(t *testing.T, bp string) *android.TestContext {
fs := map[string][]byte{
"liba.so": nil,
"libb.a": nil,
@@ -136,6 +152,7 @@ func testPrebuilt(t *testing.T, bp string) *android.TestContext {
"libe.a": nil,
"libf.a": nil,
"libf.so": nil,
"crtx.o": nil,
}
config := TestConfig(buildDir, android.Android, nil, bp, fs)
ctx := CreateTestContext()