blob: aa1a225e160956abd305e068fb5ed7a7193700cb [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001
2import org.gradle.api.GradleException;
3import org.gradle.api.Plugin;
4import org.gradle.api.Project;
5import org.gradle.api.Task;
6import org.gradle.api.file.FileTree;
7import org.gradle.api.tasks.compile.JavaCompile;
8import org.gradle.language.base.internal.ProjectLayout;
9import org.gradle.language.base.plugins.ComponentModelBasePlugin;
10import org.gradle.language.nativeplatform.tasks.AbstractNativeSourceCompileTask;
11import org.gradle.model.ModelMap;
12import org.gradle.model.Mutate;
13import org.gradle.nativeplatform.test.googletest.GoogleTestTestSuiteBinarySpec;
14import org.gradle.model.RuleSource;
15import org.gradle.model.Validate;
16import org.gradle.nativeplatform.NativeExecutableBinarySpec
17import org.gradle.nativeplatform.NativeBinarySpec;
18import org.gradle.nativeplatform.NativeComponentSpec;
19import org.gradle.nativeplatform.NativeLibrarySpec;
20import org.gradle.nativeplatform.SharedLibraryBinarySpec;
21import org.gradle.nativeplatform.StaticLibraryBinarySpec;
22import org.gradle.nativeplatform.platform.internal.NativePlatformInternal;
23import org.gradle.nativeplatform.toolchain.NativeToolChain;
24import org.gradle.nativeplatform.toolchain.NativeToolChainRegistry;
25import org.gradle.nativeplatform.toolchain.internal.PlatformToolProvider;
26import org.gradle.nativeplatform.toolchain.internal.ToolType;
27import org.gradle.nativeplatform.toolchain.internal.gcc.AbstractGccCompatibleToolChain;
28import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualCppToolChain;
29import org.gradle.nativeplatform.toolchain.internal.tools.ToolRegistry;
30import org.gradle.platform.base.BinarySpec;
31import org.gradle.platform.base.ComponentSpec;
32import org.gradle.platform.base.ComponentSpecContainer;
33import org.gradle.platform.base.BinaryContainer;
34import org.gradle.platform.base.ComponentType;
35import org.gradle.platform.base.TypeBuilder;
36import org.gradle.nativeplatform.tasks.ObjectFilesToBinary;
37import groovy.transform.CompileStatic;
38import groovy.transform.CompileDynamic
39import org.gradle.nativeplatform.BuildTypeContainer
40
41@CompileStatic
42class MultiBuilds implements Plugin<Project> {
43 @CompileStatic
44 public void apply(Project project) {
45
46 }
47
48 @CompileStatic
49 static class Rules extends RuleSource {
50 @Mutate
51 void setupBuildTypes(BuildTypeContainer buildTypes, ProjectLayout projectLayout) {
52 def project = (Project) projectLayout.projectIdentifier
53 if (project.hasProperty('releaseBuild')) {
54 buildTypes.create('debug')
55 } else {
56 buildTypes.create('release')
57 }
58 }
59
60 @CompileDynamic
61 private static void setBuildableFalseDynamically(NativeBinarySpec binary) {
62 binary.buildable = false
63 }
64
65 @Mutate
66 @CompileStatic
67 void disableReleaseGoogleTest(BinaryContainer binaries, ProjectLayout projectLayout) {
68 def project = (Project) projectLayout.projectIdentifier
69 if (project.hasProperty('testRelease')) {
70 return
71 }
72 binaries.withType(GoogleTestTestSuiteBinarySpec) { oSpec ->
73 GoogleTestTestSuiteBinarySpec spec = (GoogleTestTestSuiteBinarySpec) oSpec
74 if (spec.buildType.name == 'release') {
75 Rules.setBuildableFalseDynamically(spec)
76 }
77 }
78 // def crossCompileConfigs = []
79 // for (BuildConfig config : configs) {
80 // if (!BuildConfigRulesBase.isCrossCompile(config)) {
81 // continue
82 // }
83 // crossCompileConfigs << config.architecture
84 // }
85 // if (!crossCompileConfigs.empty) {
86 // binaries.withType(GoogleTestTestSuiteBinarySpec) { oSpec ->
87 // GoogleTestTestSuiteBinarySpec spec = (GoogleTestTestSuiteBinarySpec) oSpec
88 // if (crossCompileConfigs.contains(spec.targetPlatform.architecture.name)) {
89 // setBuildableFalseDynamically(spec)
90 // }
91 // }
92 // }
93 }
94 }
95}