aboutsummaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2015-12-21 15:25:58 -0800
committerDan Willemsen <dwillemsen@google.com>2016-01-05 15:15:11 -0800
commit10d52fd9eb411831846082c1deff7773ff494627 (patch)
tree619f7b4aeb4ed51b513fd37868dda4fbb74e24af /cc
parent496e3952ea637216f4cef5bcc23d8fa1a4c2ca3f (diff)
downloadbuild_soong-10d52fd9eb411831846082c1deff7773ff494627.tar.gz
build_soong-10d52fd9eb411831846082c1deff7773ff494627.tar.bz2
build_soong-10d52fd9eb411831846082c1deff7773ff494627.zip
Allow building non-gtest tests with cc_test
That way we get the other special cc_test features (test_per_src, multilib-both default, nativetest install path). Restrict test_per_src to CCTest instead of allowing all CCBinaries to use it. Change-Id: I767540841fe5d1f9755883ee7c3d1f24004f9631
Diffstat (limited to 'cc')
-rw-r--r--cc/cc.go77
1 files changed, 49 insertions, 28 deletions
diff --git a/cc/cc.go b/cc/cc.go
index 183c6d6d..6e7eb5c5 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1443,10 +1443,6 @@ type CCBinaryProperties struct {
// if set, add an extra objcopy --prefix-symbols= step
Prefix_symbols string
-
- // Create a separate binary for each source file. Useful when there is
- // global state that can not be torn down and reset between each test suite.
- Test_per_src *bool
}
type CCBinary struct {
@@ -1509,17 +1505,18 @@ func (c *CCBinary) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDe
}
func NewCCBinary(binary *CCBinary, module CCModuleType,
- hod common.HostOrDeviceSupported, props ...interface{}) (blueprint.Module, []interface{}) {
+ hod common.HostOrDeviceSupported, multilib common.Multilib,
+ props ...interface{}) (blueprint.Module, []interface{}) {
props = append(props, &binary.BinaryProperties)
- return newCCDynamic(&binary.CCLinked, module, hod, common.MultilibFirst, props...)
+ return newCCDynamic(&binary.CCLinked, module, hod, multilib, props...)
}
func CCBinaryFactory() (blueprint.Module, []interface{}) {
module := &CCBinary{}
- return NewCCBinary(module, module, common.HostAndDeviceSupported)
+ return NewCCBinary(module, module, common.HostAndDeviceSupported, common.MultilibFirst)
}
func (c *CCBinary) ModifyProperties(ctx CCModuleContext) {
@@ -1621,10 +1618,6 @@ func (c *CCBinary) HostToolPath() common.OptionalPath {
return common.OptionalPath{}
}
-func (c *CCBinary) testPerSrc() bool {
- return Bool(c.BinaryProperties.Test_per_src)
-}
-
func (c *CCBinary) binary() *CCBinary {
return c
}
@@ -1634,7 +1627,7 @@ type testPerSrc interface {
testPerSrc() bool
}
-var _ testPerSrc = (*CCBinary)(nil)
+var _ testPerSrc = (*CCTest)(nil)
func testPerSrcMutator(mctx common.AndroidBottomUpMutatorContext) {
if test, ok := mctx.Module().(testPerSrc); ok {
@@ -1646,23 +1639,45 @@ func testPerSrcMutator(mctx common.AndroidBottomUpMutatorContext) {
tests := mctx.CreateLocalVariations(testNames...)
for i, src := range test.binary().Properties.Srcs {
tests[i].(testPerSrc).binary().Properties.Srcs = []string{src}
- tests[i].(testPerSrc).binary().BinaryProperties.Stem = mctx.ModuleName() + "_" + testNames[i]
+ tests[i].(testPerSrc).binary().BinaryProperties.Stem = testNames[i]
}
}
}
}
+type CCTestProperties struct {
+ // if set, build against the gtest library. Defaults to true.
+ Gtest bool
+
+ // Create a separate binary for each source file. Useful when there is
+ // global state that can not be torn down and reset between each test suite.
+ Test_per_src *bool
+}
+
type CCTest struct {
CCBinary
+
+ TestProperties CCTestProperties
}
func (c *CCTest) flags(ctx common.AndroidModuleContext, flags CCFlags) CCFlags {
flags = c.CCBinary.flags(ctx, flags)
+ if !c.TestProperties.Gtest {
+ return flags
+ }
flags.CFlags = append(flags.CFlags, "-DGTEST_HAS_STD_STRING")
if ctx.Host() {
flags.CFlags = append(flags.CFlags, "-O0", "-g")
- flags.LdFlags = append(flags.LdFlags, "-lpthread")
+
+ if ctx.HostType() == common.Windows {
+ flags.CFlags = append(flags.CFlags, "-DGTEST_OS_WINDOWS")
+ } else {
+ flags.CFlags = append(flags.CFlags, "-DGTEST_OS_LINUX")
+ flags.LdFlags = append(flags.LdFlags, "-lpthread")
+ }
+ } else {
+ flags.CFlags = append(flags.CFlags, "-DGTEST_OS_LINUX_ANDROID")
}
// TODO(danalbert): Make gtest export its dependencies.
@@ -1673,7 +1688,9 @@ func (c *CCTest) flags(ctx common.AndroidModuleContext, flags CCFlags) CCFlags {
}
func (c *CCTest) depNames(ctx common.AndroidBaseContext, depNames CCDeps) CCDeps {
- depNames.StaticLibs = append(depNames.StaticLibs, "libgtest_main", "libgtest")
+ if c.TestProperties.Gtest {
+ depNames.StaticLibs = append(depNames.StaticLibs, "libgtest_main", "libgtest")
+ }
depNames = c.CCBinary.depNames(ctx, depNames)
return depNames
}
@@ -1683,25 +1700,28 @@ func (c *CCTest) InstallInData() bool {
}
func (c *CCTest) installModule(ctx common.AndroidModuleContext, flags CCFlags) {
- if ctx.Device() {
- installDir := "nativetest"
- if flags.Toolchain.Is64Bit() {
- installDir = "nativetest64"
- }
- ctx.InstallFile(common.PathForModuleInstall(ctx, installDir, ctx.ModuleName()), c.out)
- } else {
- c.CCBinary.installModule(ctx, flags)
+ installDir := "nativetest"
+ if flags.Toolchain.Is64Bit() {
+ installDir = "nativetest64"
}
+ ctx.InstallFile(common.PathForModuleInstall(ctx, installDir, ctx.ModuleName()), c.out)
+}
+
+func (c *CCTest) testPerSrc() bool {
+ return Bool(c.TestProperties.Test_per_src)
}
func NewCCTest(test *CCTest, module CCModuleType,
hod common.HostOrDeviceSupported, props ...interface{}) (blueprint.Module, []interface{}) {
- return NewCCBinary(&test.CCBinary, module, hod, props...)
+ props = append(props, &test.TestProperties)
+
+ return NewCCBinary(&test.CCBinary, module, hod, common.MultilibBoth, props...)
}
func CCTestFactory() (blueprint.Module, []interface{}) {
module := &CCTest{}
+ module.TestProperties.Gtest = true
return NewCCTest(module, module, common.HostAndDeviceSupported)
}
@@ -1735,7 +1755,7 @@ func (c *CCBenchmark) installModule(ctx common.AndroidModuleContext, flags CCFla
func NewCCBenchmark(test *CCBenchmark, module CCModuleType,
hod common.HostOrDeviceSupported, props ...interface{}) (blueprint.Module, []interface{}) {
- return NewCCBinary(&test.CCBinary, module, hod, props...)
+ return NewCCBinary(&test.CCBinary, module, hod, common.MultilibFirst, props...)
}
func CCBenchmarkFactory() (blueprint.Module, []interface{}) {
@@ -1795,7 +1815,7 @@ func CCLibraryHostSharedFactory() (blueprint.Module, []interface{}) {
func CCBinaryHostFactory() (blueprint.Module, []interface{}) {
module := &CCBinary{}
- return NewCCBinary(module, module, common.HostSupported)
+ return NewCCBinary(module, module, common.HostSupported, common.MultilibFirst)
}
//
@@ -1804,7 +1824,7 @@ func CCBinaryHostFactory() (blueprint.Module, []interface{}) {
func CCTestHostFactory() (blueprint.Module, []interface{}) {
module := &CCTest{}
- return NewCCBinary(&module.CCBinary, module, common.HostSupported)
+ return NewCCTest(module, module, common.HostSupported)
}
//
@@ -1813,7 +1833,7 @@ func CCTestHostFactory() (blueprint.Module, []interface{}) {
func CCBenchmarkHostFactory() (blueprint.Module, []interface{}) {
module := &CCBenchmark{}
- return NewCCBinary(&module.CCBinary, module, common.HostSupported)
+ return NewCCBinary(&module.CCBinary, module, common.HostSupported, common.MultilibFirst)
}
//
@@ -1834,6 +1854,7 @@ func CCDefaultsFactory() (blueprint.Module, []interface{}) {
&CCBaseProperties{},
&CCLibraryProperties{},
&CCBinaryProperties{},
+ &CCTestProperties{},
&CCUnusedProperties{},
}