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/wpilibcExamples/build.gradle b/wpilibcExamples/build.gradle
new file mode 100644
index 0000000..3c87203
--- /dev/null
+++ b/wpilibcExamples/build.gradle
@@ -0,0 +1,233 @@
+import org.gradle.language.base.internal.ProjectLayout
+
+apply plugin: 'cpp'
+apply plugin: 'c'
+apply plugin: 'visual-studio'
+apply plugin: 'edu.wpi.first.NativeUtils'
+apply plugin: ExtraTasks
+
+apply from: '../shared/config.gradle'
+
+ext.examplesMap = [:]
+ext.templatesMap = [:]
+
+File examplesTree = file("$projectDir/src/main/cpp/examples")
+examplesTree.list(new FilenameFilter() {
+    @Override
+    public boolean accept(File current, String name) {
+        return new File(current, name).isDirectory();
+    }
+}).each {
+    examplesMap.put(it, [])
+}
+File templatesTree = file("$projectDir/src/main/cpp/templates")
+templatesTree.list(new FilenameFilter() {
+    @Override
+    public boolean accept(File current, String name) {
+        return new File(current, name).isDirectory();
+    }
+}).each {
+    templatesMap.put(it, [])
+}
+
+
+ext {
+    sharedCvConfigs = examplesMap + templatesMap + [commands: []]
+    staticCvConfigs = [:]
+    useJava = false
+    useCpp = true
+}
+
+apply from: "${rootDir}/shared/opencv.gradle"
+
+ext {
+    chipObjectComponents = ['commands']
+    netCommComponents = ['commands']
+    examplesMap.each { key, value ->
+        chipObjectComponents << key.toString()
+        netCommComponents << key.toString()
+    }
+    templatesMap.each { key, value ->
+        chipObjectComponents << key.toString()
+        netCommComponents << key.toString()
+    }
+}
+
+apply from: "${rootDir}/shared/nilibraries.gradle"
+
+model {
+    components {
+        commands(NativeLibrarySpec) {
+            binaries.all { binary ->
+                if (binary in StaticLibraryBinarySpec) {
+                    binary.buildable = false
+                    return
+                }
+                lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared'
+                lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
+                lib project: ':cscore', library: 'cscore', linkage: 'shared'
+                project(':hal').addHalDependency(binary, 'shared')
+                lib project: ':cameraserver', library: 'cameraserver', linkage: 'shared'
+                lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
+            }
+            sources {
+                cpp {
+                    source {
+                        srcDirs = ['src/main/cpp/commands']
+                        include '**/*.cpp'
+                    }
+                    exportedHeaders {
+                        srcDirs 'src/main/cpp/commands'
+                        include '**/*.h'
+                    }
+                }
+            }
+        }
+
+        examplesMap.each { key, value ->
+            "${key}"(NativeExecutableSpec) {
+                targetBuildTypes 'debug'
+                binaries.all { binary ->
+                    lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared'
+                    lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
+                    lib project: ':cscore', library: 'cscore', linkage: 'shared'
+                    project(':hal').addHalDependency(binary, 'shared')
+                    lib project: ':cameraserver', library: 'cameraserver', linkage: 'shared'
+                    lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
+                    if (binary.targetPlatform.architecture.name != 'athena') {
+                        lib project: ':simulation:halsim_lowfi', library: 'halsim_lowfi', linkage: 'shared'
+                        lib project: ':simulation:halsim_adx_gyro_accelerometer', library: 'halsim_adx_gyro_accelerometer', linkage: 'shared'
+                        lib project: ':simulation:halsim_print', library: 'halsim_print', linkage: 'shared'
+                        lib project: ':simulation:halsim_ds_nt', library: 'halsim_ds_nt', linkage: 'shared'
+                    }
+                }
+                sources {
+                    cpp {
+                        source {
+                            srcDirs 'src/main/cpp/examples/' + "${key}" + "/cpp"
+                            include '**/*.cpp'
+                        }
+                        exportedHeaders {
+                            srcDirs 'src/main/cpp/examples/' + "${key}" + "/include"
+                            include '**/*.h'
+                        }
+                    }
+                }
+                sources {
+                    c {
+                        source {
+                            srcDirs 'src/main/cpp/examples/' + "${key}" + "/c"
+                            include '**/*.c'
+                        }
+                        exportedHeaders {
+                            srcDirs 'src/main/cpp/examples/' + "${key}" + "/include"
+                            include '**/*.h'
+                        }
+                    }
+                }
+            }
+        }
+        templatesMap.each { key, value ->
+            "${key}"(NativeExecutableSpec) {
+                targetBuildTypes 'debug'
+                binaries.all { binary ->
+                    lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared'
+                    lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
+                    lib project: ':cscore', library: 'cscore', linkage: 'shared'
+                    project(':hal').addHalDependency(binary, 'shared')
+                    lib project: ':cameraserver', library: 'cameraserver', linkage: 'shared'
+                    lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
+                    binary.tasks.withType(CppCompile) {
+                        if (!(binary.toolChain in VisualCpp)) {
+                            cppCompiler.args "-Wno-error=deprecated-declarations"
+                        }
+                    }
+                    if (binary.targetPlatform.architecture.name != 'athena') {
+                        lib project: ':simulation:halsim_lowfi', library: 'halsim_lowfi', linkage: 'shared'
+                        lib project: ':simulation:halsim_adx_gyro_accelerometer', library: 'halsim_adx_gyro_accelerometer', linkage: 'shared'
+                        lib project: ':simulation:halsim_print', library: 'halsim_print', linkage: 'shared'
+                        lib project: ':simulation:halsim_ds_nt', library: 'halsim_ds_nt', linkage: 'shared'
+                    }
+                }
+                sources {
+                    cpp {
+                        source {
+                            srcDirs 'src/main/cpp/templates/' + "${key}" + "/cpp"
+                            include '**/*.cpp'
+                        }
+                        exportedHeaders {
+                            srcDirs 'src/main/cpp/templates/' + "${key}" + "/include"
+                            include '**/*.h'
+                        }
+                    }
+                }
+            }
+        }
+    }
+    tasks {
+        def b = $.binaries
+        b.each { binary->
+            if (binary in NativeExecutableBinarySpec) {
+                def installDir = binary.tasks.install.installDirectory.get().toString() + File.separatorChar
+                def runFile = binary.tasks.install.runScriptFile.get().asFile.toString()
+
+                binary.tasks.install.doLast {
+                    if (binary.targetPlatform.operatingSystem.isWindows()) {
+                        // Windows batch scripts
+                        def fileName = binary.component.name + 'LowFi.bat'
+                        def file = new File(installDir + fileName)
+                        file.withWriter { out ->
+                            out.println '@ECHO OFF'
+                            out.print 'SET HALSIM_EXTENSIONS='
+                            out.print '"' + new File(installDir + 'lib\\halsim_lowfi.dll').toString() + '";'
+                            out.println '"' + new File(installDir + 'lib\\halsim_ds_nt.dll').toString() + '"'
+                            out.println runFile + ' %*'
+                        }
+
+                        fileName = binary.component.name + 'LowFiRealDS.bat'
+                        file = new File(installDir + fileName)
+                        file.withWriter { out ->
+                            out.println '@ECHO OFF'
+                            out.print 'SET HALSIM_EXTENSIONS='
+                            out.print '"' + new File(installDir + 'lib\\halsim_lowfi.dll').toString() + '";'
+                            out.println '"' + new File(installDir + 'lib\\halsim_ds_socket.dll').toString() + '"'
+                            out.println runFile + ' %*'
+                        }
+                    } else {
+                        def fileName = binary.component.name + 'LowFi.sh'
+                        def file = new File(installDir + fileName)
+
+                        file.withWriter { out ->
+                            out.print 'export HALSIM_EXTENSIONS='
+                            out.print '"' + new File(installDir + '/lib/libhalsim_lowfi.so').toString() + '";'
+                            out.println '"' + new File(installDir + '/lib/libhalsim_ds_nt.so').toString() + '"'
+                            out.println runFile + ' "$@"'
+                        }
+
+                        fileName = binary.component.name + 'LowFiRealDS.sh'
+                        file = new File(installDir + fileName)
+                        file.withWriter { out ->
+                            out.print 'export HALSIM_EXTENSIONS='
+                            out.print '"' + new File(installDir + '/lib/libhalsim_lowfi.so').toString() + '":'
+                            out.println '"' + new File(installDir + '/lib/libhalsim_ds_socket.so').toString() + '"'
+                            out.println runFile + ' "$@"'
+                        }
+                    }
+                }
+
+            }
+        }
+    }
+}
+apply from: 'publish.gradle'
+
+ext {
+    templateDirectory = new File("$projectDir/src/main/cpp/templates/")
+    templateFile = new File("$projectDir/src/main/cpp/templates/templates.json")
+    exampleDirectory = new File("$projectDir/src/main/cpp/examples/")
+    exampleFile = new File("$projectDir/src/main/cpp/examples/examples.json")
+    commandDirectory = new File("$projectDir/src/main/cpp/commands/")
+    commandFile = new File("$projectDir/src/main/cpp/commands/commands.json")
+}
+
+apply from: "${rootDir}/shared/examplecheck.gradle"