Add support for cc_test.
This behaves slightly differently than it does in the make based build. 1. The make based build manually passes -DGTEST_OS_ANDROID (or whatever). gtest-port.h already has logic that does this, so it's a no-op. 2. Host libraries are named identically, rather than libgtest_host. Change-Id: Ic40a1025c698611d202cb7c8ec45abd8fe130065
This commit is contained in:
parent
512e24f441
commit
c403f7ce6d
96
cc/cc.go
96
cc/cc.go
|
@ -227,6 +227,9 @@ type ccModuleType interface {
|
|||
// Compile objects into final module
|
||||
compileModule(common.AndroidModuleContext, ccFlags, ccDeps, []string)
|
||||
|
||||
// Install the built module.
|
||||
installModule(common.AndroidModuleContext, ccFlags)
|
||||
|
||||
// Return the output file (.o, .a or .so) for use by other modules
|
||||
outputFile() string
|
||||
}
|
||||
|
@ -307,6 +310,11 @@ func (c *ccBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
|
|||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
|
||||
c.ccModuleType().installModule(ctx, flags)
|
||||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ccBase) ccModuleType() ccModuleType {
|
||||
|
@ -940,13 +948,6 @@ func (c *ccLibrary) compileSharedLibrary(ctx common.AndroidModuleContext,
|
|||
c.out = outputFile
|
||||
c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
|
||||
common.ModuleSrcDir(ctx))
|
||||
|
||||
installDir := "lib"
|
||||
if flags.toolchain.Is64Bit() {
|
||||
installDir = "lib64"
|
||||
}
|
||||
|
||||
ctx.InstallFile(installDir, outputFile)
|
||||
}
|
||||
|
||||
func (c *ccLibrary) compileModule(ctx common.AndroidModuleContext,
|
||||
|
@ -966,6 +967,27 @@ func (c *ccLibrary) compileModule(ctx common.AndroidModuleContext,
|
|||
}
|
||||
}
|
||||
|
||||
func (c *ccLibrary) installStaticLibrary(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
// Static libraries do not get installed.
|
||||
}
|
||||
|
||||
func (c *ccLibrary) installSharedLibrary(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
installDir := "lib"
|
||||
if flags.toolchain.Is64Bit() {
|
||||
installDir = "lib64"
|
||||
}
|
||||
|
||||
ctx.InstallFile(installDir, c.out)
|
||||
}
|
||||
|
||||
func (c *ccLibrary) installModule(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
if c.libraryProperties.IsStatic {
|
||||
c.installStaticLibrary(ctx, flags)
|
||||
} else {
|
||||
c.installSharedLibrary(ctx, flags)
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Objects (for crt*.o)
|
||||
//
|
||||
|
@ -1017,6 +1039,10 @@ func (c *ccObject) compileModule(ctx common.AndroidModuleContext,
|
|||
ctx.CheckbuildFile(outputFile)
|
||||
}
|
||||
|
||||
func (c *ccObject) installModule(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
// Object files do not get installed.
|
||||
}
|
||||
|
||||
func (c *ccObject) outputFile() string {
|
||||
return c.out
|
||||
}
|
||||
|
@ -1027,6 +1053,7 @@ func (c *ccObject) outputFile() string {
|
|||
|
||||
type ccBinary struct {
|
||||
ccDynamic
|
||||
out string
|
||||
binaryProperties binaryProperties
|
||||
}
|
||||
|
||||
|
@ -1099,12 +1126,61 @@ func (c *ccBinary) compileModule(ctx common.AndroidModuleContext,
|
|||
}
|
||||
|
||||
outputFile := filepath.Join(common.ModuleOutDir(ctx), c.getStem(ctx))
|
||||
c.out = outputFile
|
||||
|
||||
TransformObjToDynamicBinary(ctx, objFiles, deps.sharedLibs, deps.staticLibs,
|
||||
deps.lateStaticLibs, deps.wholeStaticLibs, deps.crtBegin, deps.crtEnd,
|
||||
ccFlagsToBuilderFlags(flags), outputFile)
|
||||
}
|
||||
|
||||
ctx.InstallFile("bin", outputFile)
|
||||
func (c *ccBinary) installModule(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
ctx.InstallFile("bin", c.out)
|
||||
}
|
||||
|
||||
type ccTest struct {
|
||||
ccBinary
|
||||
}
|
||||
|
||||
var (
|
||||
gtestLibs = []string{"libgtest", "libgtest_main"}
|
||||
)
|
||||
|
||||
func (c *ccTest) collectDeps(ctx common.AndroidModuleContext, flags ccFlags) (ccDeps, ccFlags) {
|
||||
deps, flags := c.ccBinary.collectDeps(ctx, flags)
|
||||
|
||||
flags.cFlags = append(flags.cFlags, "-DGTEST_HAS_STD_STRING")
|
||||
if c.HostOrDevice().Host() {
|
||||
flags.cFlags = append(flags.cFlags, "-O0", "-g")
|
||||
flags.ldLibs = append(flags.ldLibs, "-lpthread")
|
||||
}
|
||||
|
||||
// TODO(danalbert): Make gtest export its dependencies.
|
||||
flags.includeDirs = append(flags.includeDirs, "external/gtest/include")
|
||||
|
||||
_, staticLibs, _ := c.collectDepsFromList(ctx, gtestLibs)
|
||||
deps.staticLibs = append(deps.staticLibs, staticLibs...)
|
||||
|
||||
return deps, flags
|
||||
}
|
||||
|
||||
func (c *ccTest) AndroidDynamicDependencies(ctx common.AndroidDynamicDependerModuleContext) []string {
|
||||
ctx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, gtestLibs...)
|
||||
deps := c.ccBinary.AndroidDynamicDependencies(ctx)
|
||||
return append(deps, gtestLibs...)
|
||||
}
|
||||
|
||||
func (c *ccTest) installModule(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
if c.HostOrDevice().Device() {
|
||||
ctx.InstallFile("../data/nativetest/" + ctx.ModuleName(), c.out)
|
||||
} else {
|
||||
c.ccBinary.installModule(ctx, flags)
|
||||
}
|
||||
}
|
||||
|
||||
func NewCCTest() (blueprint.Module, []interface{}) {
|
||||
module := &ccTest{}
|
||||
return newCCDynamic(&module.ccDynamic, module, common.HostAndDeviceSupported,
|
||||
common.MultilibFirst, &module.binaryProperties)
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -1198,6 +1274,10 @@ func (c *toolchainLibrary) compileModule(ctx common.AndroidModuleContext,
|
|||
ctx.CheckbuildFile(outputFile)
|
||||
}
|
||||
|
||||
func (c *toolchainLibrary) installModule(ctx common.AndroidModuleContext, flags ccFlags) {
|
||||
// Toolchain libraries do not get installed.
|
||||
}
|
||||
|
||||
func LinkageMutator(mctx blueprint.EarlyMutatorContext) {
|
||||
if c, ok := mctx.Module().(*ccLibrary); ok {
|
||||
var modules []blueprint.Module
|
||||
|
|
|
@ -42,6 +42,7 @@ func main() {
|
|||
ctx.RegisterModuleType("cc_library", cc.NewCCLibrary)
|
||||
ctx.RegisterModuleType("cc_object", cc.NewCCObject)
|
||||
ctx.RegisterModuleType("cc_binary", cc.NewCCBinary)
|
||||
ctx.RegisterModuleType("cc_test", cc.NewCCTest)
|
||||
|
||||
ctx.RegisterModuleType("toolchain_library", cc.NewToolchainLibrary)
|
||||
|
||||
|
|
Loading…
Reference in New Issue