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:
11
cc/object.go
11
cc/object.go
@@ -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()
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user