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"`
|
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
|
// 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
|
// necessary, but sometimes used to generate .s files from .c files to use as
|
||||||
// input to a cc_genrule module.
|
// input to a cc_genrule module.
|
||||||
func ObjectFactory() android.Module {
|
func ObjectFactory() android.Module {
|
||||||
module := newBaseModule(android.HostAndDeviceSupported, android.MultilibBoth)
|
module := newObject()
|
||||||
module.sanitize = &sanitize{}
|
|
||||||
module.linker = &objectLinker{
|
module.linker = &objectLinker{
|
||||||
baseLinker: NewBaseLinker(module.sanitize),
|
baseLinker: NewBaseLinker(module.sanitize),
|
||||||
}
|
}
|
||||||
@@ -61,7 +67,6 @@ func ObjectFactory() android.Module {
|
|||||||
// Clang's address-significance tables are incompatible with ld -r.
|
// Clang's address-significance tables are incompatible with ld -r.
|
||||||
module.compiler.appendCflags([]string{"-fno-addrsig"})
|
module.compiler.appendCflags([]string{"-fno-addrsig"})
|
||||||
|
|
||||||
module.stl = &stl{}
|
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@ func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) {
|
|||||||
ctx.RegisterModuleType("cc_prebuilt_library", PrebuiltLibraryFactory)
|
ctx.RegisterModuleType("cc_prebuilt_library", PrebuiltLibraryFactory)
|
||||||
ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
|
ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
|
||||||
ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
|
ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
|
||||||
|
ctx.RegisterModuleType("cc_prebuilt_object", prebuiltObjectFactory)
|
||||||
ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
|
ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,6 +218,50 @@ func NewPrebuiltStaticLibrary(hod android.HostOrDeviceSupported) (*Module, *libr
|
|||||||
return module, library
|
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 {
|
type prebuiltBinaryLinker struct {
|
||||||
*binaryDecorator
|
*binaryDecorator
|
||||||
prebuiltLinker
|
prebuiltLinker
|
||||||
|
@@ -73,6 +73,15 @@ func TestPrebuilt(t *testing.T) {
|
|||||||
srcs: ["libf.so"],
|
srcs: ["libf.so"],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cc_object {
|
||||||
|
name: "crtx",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_object {
|
||||||
|
name: "crtx",
|
||||||
|
srcs: ["crtx.o"],
|
||||||
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
ctx := testPrebuilt(t, bp)
|
ctx := testPrebuilt(t, bp)
|
||||||
@@ -84,6 +93,7 @@ func TestPrebuilt(t *testing.T) {
|
|||||||
libe := ctx.ModuleForTests("libe", "android_arm64_armv8-a_static").Module()
|
libe := ctx.ModuleForTests("libe", "android_arm64_armv8-a_static").Module()
|
||||||
libfStatic := ctx.ModuleForTests("libf", "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()
|
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()
|
prebuiltLiba := ctx.ModuleForTests("prebuilt_liba", "android_arm64_armv8-a_shared").Module()
|
||||||
prebuiltLibb := ctx.ModuleForTests("prebuilt_libb", "android_arm64_armv8-a_static").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()
|
prebuiltLibe := ctx.ModuleForTests("prebuilt_libe", "android_arm64_armv8-a_static").Module()
|
||||||
prebuiltLibfStatic := ctx.ModuleForTests("prebuilt_libf", "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()
|
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 {
|
hasDep := func(m android.Module, wantDep android.Module) bool {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
@@ -126,9 +137,14 @@ func TestPrebuilt(t *testing.T) {
|
|||||||
if !hasDep(libfShared, prebuiltLibfShared) {
|
if !hasDep(libfShared, prebuiltLibfShared) {
|
||||||
t.Errorf("libf shared missing dependency on prebuilt_libf")
|
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 {
|
func testPrebuilt(t *testing.T, bp string) *android.TestContext {
|
||||||
|
|
||||||
fs := map[string][]byte{
|
fs := map[string][]byte{
|
||||||
"liba.so": nil,
|
"liba.so": nil,
|
||||||
"libb.a": nil,
|
"libb.a": nil,
|
||||||
@@ -136,6 +152,7 @@ func testPrebuilt(t *testing.T, bp string) *android.TestContext {
|
|||||||
"libe.a": nil,
|
"libe.a": nil,
|
||||||
"libf.a": nil,
|
"libf.a": nil,
|
||||||
"libf.so": nil,
|
"libf.so": nil,
|
||||||
|
"crtx.o": nil,
|
||||||
}
|
}
|
||||||
config := TestConfig(buildDir, android.Android, nil, bp, fs)
|
config := TestConfig(buildDir, android.Android, nil, bp, fs)
|
||||||
ctx := CreateTestContext()
|
ctx := CreateTestContext()
|
||||||
|
Reference in New Issue
Block a user