Squashed 'third_party/allwpilib_2019/' content from commit bd05dfa1c

Change-Id: I2b1c2250cdb9b055133780c33593292098c375b7
git-subtree-dir: third_party/allwpilib_2019
git-subtree-split: bd05dfa1c7cca74c4fac451e7b9d6a37e7b53447
diff --git a/buildSrc/src/main/groovy/MultiBuilds.groovy b/buildSrc/src/main/groovy/MultiBuilds.groovy
new file mode 100644
index 0000000..aa1a225
--- /dev/null
+++ b/buildSrc/src/main/groovy/MultiBuilds.groovy
@@ -0,0 +1,95 @@
+

+import org.gradle.api.GradleException;

+import org.gradle.api.Plugin;

+import org.gradle.api.Project;

+import org.gradle.api.Task;

+import org.gradle.api.file.FileTree;

+import org.gradle.api.tasks.compile.JavaCompile;

+import org.gradle.language.base.internal.ProjectLayout;

+import org.gradle.language.base.plugins.ComponentModelBasePlugin;

+import org.gradle.language.nativeplatform.tasks.AbstractNativeSourceCompileTask;

+import org.gradle.model.ModelMap;

+import org.gradle.model.Mutate;

+import org.gradle.nativeplatform.test.googletest.GoogleTestTestSuiteBinarySpec;

+import org.gradle.model.RuleSource;

+import org.gradle.model.Validate;

+import org.gradle.nativeplatform.NativeExecutableBinarySpec

+import org.gradle.nativeplatform.NativeBinarySpec;

+import org.gradle.nativeplatform.NativeComponentSpec;

+import org.gradle.nativeplatform.NativeLibrarySpec;

+import org.gradle.nativeplatform.SharedLibraryBinarySpec;

+import org.gradle.nativeplatform.StaticLibraryBinarySpec;

+import org.gradle.nativeplatform.platform.internal.NativePlatformInternal;

+import org.gradle.nativeplatform.toolchain.NativeToolChain;

+import org.gradle.nativeplatform.toolchain.NativeToolChainRegistry;

+import org.gradle.nativeplatform.toolchain.internal.PlatformToolProvider;

+import org.gradle.nativeplatform.toolchain.internal.ToolType;

+import org.gradle.nativeplatform.toolchain.internal.gcc.AbstractGccCompatibleToolChain;

+import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualCppToolChain;

+import org.gradle.nativeplatform.toolchain.internal.tools.ToolRegistry;

+import org.gradle.platform.base.BinarySpec;

+import org.gradle.platform.base.ComponentSpec;

+import org.gradle.platform.base.ComponentSpecContainer;

+import org.gradle.platform.base.BinaryContainer;

+import org.gradle.platform.base.ComponentType;

+import org.gradle.platform.base.TypeBuilder;

+import org.gradle.nativeplatform.tasks.ObjectFilesToBinary;

+import groovy.transform.CompileStatic;

+import groovy.transform.CompileDynamic

+import org.gradle.nativeplatform.BuildTypeContainer

+

+@CompileStatic

+class MultiBuilds implements Plugin<Project> {

+  @CompileStatic

+  public void apply(Project project) {

+

+  }

+

+  @CompileStatic

+  static class Rules extends RuleSource {

+    @Mutate

+    void setupBuildTypes(BuildTypeContainer buildTypes, ProjectLayout projectLayout) {

+        def project = (Project) projectLayout.projectIdentifier

+        if (project.hasProperty('releaseBuild')) {

+            buildTypes.create('debug')

+        } else {

+            buildTypes.create('release')

+        }

+    }

+

+    @CompileDynamic

+    private static void setBuildableFalseDynamically(NativeBinarySpec binary) {

+        binary.buildable = false

+    }

+

+    @Mutate

+    @CompileStatic

+    void disableReleaseGoogleTest(BinaryContainer binaries, ProjectLayout projectLayout) {

+      def project = (Project) projectLayout.projectIdentifier

+      if (project.hasProperty('testRelease')) {

+        return

+      }

+      binaries.withType(GoogleTestTestSuiteBinarySpec) { oSpec ->

+        GoogleTestTestSuiteBinarySpec spec = (GoogleTestTestSuiteBinarySpec) oSpec

+        if (spec.buildType.name == 'release') {

+          Rules.setBuildableFalseDynamically(spec)

+        }

+      }

+        // def crossCompileConfigs = []

+        // for (BuildConfig config : configs) {

+        //     if (!BuildConfigRulesBase.isCrossCompile(config)) {

+        //         continue

+        //     }

+        //     crossCompileConfigs << config.architecture

+        // }

+        // if (!crossCompileConfigs.empty) {

+        //     binaries.withType(GoogleTestTestSuiteBinarySpec) { oSpec ->

+        //         GoogleTestTestSuiteBinarySpec spec = (GoogleTestTestSuiteBinarySpec) oSpec

+        //         if (crossCompileConfigs.contains(spec.targetPlatform.architecture.name)) {

+        //             setBuildableFalseDynamically(spec)

+        //         }

+        //     }

+        // }

+    }

+  }

+}