blob: 8b0b1232bf648c60800b39ef1a09d2b997094f1b [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001import java.io.ByteArrayOutputStream;
2import java.io.File;
3import java.io.IOException;
4import java.lang.reflect.Field;
5import java.nio.file.Files;
6import java.util.ArrayList;
7import java.util.List;
8
9import org.gradle.api.GradleException;
10import org.gradle.api.Plugin;
11import org.gradle.api.Project;
12import org.gradle.api.Task;
13import org.gradle.api.file.FileTree;
14import org.gradle.api.tasks.compile.JavaCompile;
15import org.gradle.language.base.internal.ProjectLayout;
16import org.gradle.language.base.plugins.ComponentModelBasePlugin;
17import org.gradle.language.nativeplatform.tasks.AbstractNativeSourceCompileTask;
18import org.gradle.model.ModelMap;
19import org.gradle.model.Mutate;
20import org.gradle.model.RuleSource;
21import org.gradle.model.Validate;
22import org.gradle.nativeplatform.NativeBinarySpec;
23import org.gradle.nativeplatform.NativeComponentSpec;
24import org.gradle.nativeplatform.NativeLibrarySpec;
25import org.gradle.nativeplatform.SharedLibraryBinarySpec;
26import org.gradle.nativeplatform.StaticLibraryBinarySpec;
27import org.gradle.nativeplatform.platform.internal.NativePlatformInternal;
28import org.gradle.nativeplatform.toolchain.NativeToolChain;
29import org.gradle.nativeplatform.toolchain.NativeToolChainRegistry;
30import org.gradle.nativeplatform.toolchain.internal.PlatformToolProvider;
31import org.gradle.nativeplatform.toolchain.internal.ToolType;
32import org.gradle.nativeplatform.toolchain.internal.gcc.AbstractGccCompatibleToolChain;
33import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualCppToolChain;
34import org.gradle.nativeplatform.toolchain.internal.tools.ToolRegistry;
35import org.gradle.nativeplatform.test.googletest.GoogleTestTestSuiteBinarySpec;
36import org.gradle.platform.base.BinarySpec;
37import org.gradle.platform.base.ComponentSpec;
38import org.gradle.platform.base.ComponentSpecContainer;
39import org.gradle.platform.base.ComponentType;
40import org.gradle.platform.base.TypeBuilder;
41import org.gradle.nativeplatform.test.tasks.RunTestExecutable;
42import org.gradle.platform.base.BinaryContainer;
43import groovy.transform.CompileStatic;
44
45@CompileStatic
46class ExtraTasks implements Plugin<Project> {
47 @CompileStatic
48 public void apply(Project project) {
49
50 }
51
52 @CompileStatic
53 static class Rules extends RuleSource {
54 @Mutate
55 @CompileStatic
56 void createNativeCompileTask(ModelMap<Task> tasks, BinaryContainer binaries) {
57 tasks.create('compileCpp', Task) { oTask ->
58 def task = (Task) oTask
59 task.group = 'build'
60 task.description = 'Uber task to compile all native code for this project'
61 binaries.each { binary ->
62 if (binary instanceof NativeBinarySpec && binary.buildable) {
63 binary.tasks.withType(AbstractNativeSourceCompileTask) { compileTask ->
64 task.dependsOn compileTask
65 }
66 }
67 }
68 }
69 }
70
71 @Mutate
72 @CompileStatic
73 void createNativeTestTask(ModelMap<Task> tasks, BinaryContainer binaries) {
74 tasks.create('testCpp', Task) { oTask ->
75 def task = (Task) oTask
76 task.group = 'build'
77 task.description = 'Uber task to run all native tests for project'
78 binaries.each { binary ->
79 if (binary instanceof GoogleTestTestSuiteBinarySpec && binary.buildable) {
80 binary.tasks.withType(RunTestExecutable) { testTask ->
81 task.dependsOn testTask
82 }
83 }
84 }
85 }
86 }
87 }
88}