Squashed 'third_party/Phoenix-frc-lib/' content from commit 666d176

Change-Id: Ibaca2fc8ffb1177e786576cc1e4cc9f7a8c98f13
git-subtree-dir: third_party/Phoenix-frc-lib
git-subtree-split: 666d176a08151793044ab74e0005f13d3732ed96
diff --git a/wpi-dependencies-2018.gradle b/wpi-dependencies-2018.gradle
new file mode 100644
index 0000000..b38190e
--- /dev/null
+++ b/wpi-dependencies-2018.gradle
@@ -0,0 +1,472 @@
+task downloadWpiUtil() {
+    description = 'Downloads the C++ ARM wpiutil maven dependency.'
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def utilZip = file("$depFolder/wpiutil.zip")
+    outputs.file(utilZip)
+    def armWpiUtil
+
+    doFirst {
+        def armWpiUtilDependency = project.dependencies.create("edu.wpi.first.wpiutil:wpiutil-cpp:+:linuxathena@zip")
+        def armWpiUtilConfig = project.configurations.detachedConfiguration(armWpiUtilDependency)
+        armWpiUtilConfig.setTransitive(false)
+        armWpiUtil = armWpiUtilConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armWpiUtil
+            rename 'wpiutil(.+)', 'wpiutil.zip'
+            into depFolder
+        }
+    }
+}
+
+task downloadWpiUtilHeaders() {
+    description = 'Downloads the C++ ARM wpiutil maven dependency.'
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def utilZip = file("$depFolder/wpiutilHeaders.zip")
+    outputs.file(utilZip)
+    def armWpiUtilHeaders
+
+    doFirst {
+        def armWpiUtilHeadersDependency = project.dependencies.create("edu.wpi.first.wpiutil:wpiutil-cpp:+:headers@zip")
+        def armWpiUtilHeadersConfig = project.configurations.detachedConfiguration(armWpiUtilHeadersDependency)
+        armWpiUtilHeadersConfig.setTransitive(false)
+        armWpiUtilHeaders = armWpiUtilHeadersConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armWpiUtilHeaders
+            rename 'wpiutil(.+)', 'wpiutilHeaders.zip'
+            into depFolder
+        }
+    }
+}
+
+def wpiUtilUnzipLocation = "$buildDir/wpiutil"
+def wpiUtilUnzipHeadersLocation = "$buildDir/wpiutil/include"
+
+// Create a task that will unzip the wpiutil files into a temporary build directory
+task unzipWpiUtil(type: Copy) {
+    description = 'Unzips the wpiutil maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadWpiUtil
+
+    from zipTree(downloadWpiUtil.outputs.files.singleFile)
+    into wpiUtilUnzipLocation
+}
+
+// Create a task that will unzip the wpiutil files into a temporary build directory
+task unzipWpiUtilHeaders(type: Copy) {
+    description = 'Unzips the wpiutil maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadWpiUtilHeaders
+
+    from zipTree(downloadWpiUtilHeaders.outputs.files.singleFile)
+    into wpiUtilUnzipHeadersLocation
+}
+
+ext.defineWpiUtilProperties = {
+    ext.wpiUtil = wpiUtilUnzipLocation
+    ext.wpiUtilInclude = "$wpiUtilUnzipLocation/include"
+    ext.wpiUtilLibArmLocation = "$wpiUtilUnzipLocation/linux/athena/shared"
+    ext.wpiUtilSharedLib = "$wpiUtilLibArmLocation/libwpiutil.so"
+    ext.wpiUtilSharedLibDebug = "$wpiUtilLibArmLocation/libwpiutil.so.debug"
+    ext.addWpiUtilLibraryLinks = { compileTask, linker, targetPlatform ->
+        compileTask.dependsOn project(':').unzipWpiUtil
+		compileTask.dependsOn project(':').unzipWpiUtilHeaders
+        String architecture = targetPlatform.architecture
+        if (architecture.contains('arm')) {
+//            linker.args wpiUtilSharedLib
+        }
+    }
+}
+
+
+
+def NIUnzipHeadersLocation = "$buildDir/NI/include"
+
+task downloadNIHeaders() {
+    description = 'Downloads the NI headers.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/NIHeaders.zip")
+    outputs.file(libZip)
+    def NIHeaders
+    
+
+    doFirst {
+        def NIHeadersDependency = project.dependencies.create("edu.wpi.first.ni-libraries:ni-libraries:+:headers@zip")
+        def NIHeadersConfig = project.configurations.detachedConfiguration(NIHeadersDependency)
+        NIHeadersConfig.setTransitive(false)
+        NIHeaders = NIHeadersConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from NIHeaders
+            rename 'ni-libraries(.+)', 'NIHeaders.zip'
+            into depFolder
+        }
+    }
+}
+
+task unzipNIHeaders(type: Copy) {
+    description = 'Unzips the NI include files so they can be used'
+    group = 'WPILib'
+    dependsOn downloadNIHeaders
+    
+    from zipTree(downloadNIHeaders.outputs.files.singleFile)
+    into NIUnzipHeadersLocation
+}
+
+ext.defineNIProperties = {
+    ext.NI = NIUnzipHeadersLocation
+    ext.NIInclude = NIUnzipHeadersLocation
+  
+    ext.addNILibraryLinks = { compileTask, linker, targetPlatform ->
+        compileTask.dependsOn project(':').unzipNIHeaders
+    }
+}
+
+
+
+def halUnzipLocation = "$buildDir/hal"
+def halUnzipHeadersLocation = "$buildDir/hal/include"
+
+task downloadHAL() {
+    description = 'Downloads the C++ ARM HAL maven dependency.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/hal.zip")
+    outputs.file(libZip)
+    def armHal
+    
+
+    doFirst {
+        def armHALDependency = project.dependencies.create("edu.wpi.first.hal:hal:+:linuxathena@zip")
+        def armHALConfig = project.configurations.detachedConfiguration(armHALDependency)
+        armHALConfig.setTransitive(false)
+        armHal = armHALConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armHal
+            rename 'hal(.+)', 'hal.zip'
+            into depFolder
+        }
+    }
+}
+
+task downloadHALHeaders() {
+    description = 'Downloads the C++ ARM HAL maven dependency.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/halHeaders.zip")
+    outputs.file(libZip)
+    def armHalHeaders
+    
+
+    doFirst {
+        def armHALHeadersDependency = project.dependencies.create("edu.wpi.first.hal:hal:+:headers@zip")
+        def armHALHeadersConfig = project.configurations.detachedConfiguration(armHALHeadersDependency)
+        armHALHeadersConfig.setTransitive(false)
+        armHalHeaders = armHALHeadersConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armHalHeaders
+            rename 'hal(.+)', 'halHeaders.zip'
+            into depFolder
+        }
+    }
+}
+
+// Create a task that will unzip the hal files into a temporary build directory
+task unzipHAL(type: Copy) {
+    description = 'Unzips the hal maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadHAL
+    
+    from zipTree(downloadHAL.outputs.files.singleFile)
+    into halUnzipLocation
+}
+task unzipHALHeaders(type: Copy) {
+    description = 'Unzips the hal maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadHALHeaders
+    
+    from zipTree(downloadHALHeaders.outputs.files.singleFile)
+    into halUnzipHeadersLocation
+}
+
+ext.defineHALProperties = {
+    ext.hal = halUnzipLocation
+    ext.halInclude = "$halUnzipLocation/include"
+    ext.halLocation = "$halUnzipLocation/linux/athena/shared"
+    ext.halSharedLib = "$halLocation/libwpiHal.so"
+  
+    ext.addHalLibraryLinks = { compileTask, linker, targetPlatform ->
+        compileTask.dependsOn project(':').unzipHAL
+		compileTask.dependsOn project(':').unzipHALHeaders
+        String architecture = targetPlatform.architecture
+        if (architecture.contains('arm')) {
+            // Grab all the shared libraries and link them
+            linker.args halSharedLib      
+//            linker.args "$halLocation/libnilibraries.so"
+
+            def libraryPath = halLocation
+
+            linker.args << '-L' + libraryPath
+        }
+    }
+}
+
+task downloadNetworkTables() {
+    description = 'Downloads the C++ ARM NetworkTables maven dependency.'
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def ntZip = file("$depFolder/ntcore.zip")
+    outputs.file(ntZip)
+    def armNetTables
+
+    doFirst {
+        def armNtDependency = project.dependencies.create('edu.wpi.first.ntcore:ntcore-cpp:+:linuxathena@zip')
+        def armConfig = project.configurations.detachedConfiguration(armNtDependency)
+        armConfig.setTransitive(false)
+        armNetTables = armConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armNetTables
+            rename 'ntcore(.+)', 'ntcore.zip'
+            into depFolder
+        }
+    }
+}
+task downloadNetworkTablesHeaders() {
+    description = 'Downloads the C++ ARM NetworkTables maven dependency.'
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def ntZip = file("$depFolder/ntcoreHeaders.zip")
+    outputs.file(ntZip)
+    def armNetTablesHeaders
+
+    doFirst {
+        def armNtHeadersDependency = project.dependencies.create('edu.wpi.first.ntcore:ntcore-cpp:+:headers@zip')
+        def armHeadersConfig = project.configurations.detachedConfiguration(armNtHeadersDependency)
+        armHeadersConfig.setTransitive(false)
+        armNetTablesHeaders = armHeadersConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armNetTablesHeaders
+            rename 'ntcore(.+)', 'ntcoreHeaders.zip'
+            into depFolder
+        }
+    }
+}
+
+def netTablesUnzipLocation = "$buildDir/ntcore"
+def netTablesHeadersUnzipLocation = "$buildDir/ntcore/include"
+
+// Create a task that will unzip the networktables files into a temporary build directory
+task unzipNetworkTables(type: Copy) {
+    description = 'Unzips the networktables maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadNetworkTables
+
+    from zipTree(downloadNetworkTables.outputs.files.singleFile)
+    into netTablesUnzipLocation
+}
+task unzipNetworkTablesHeaders(type: Copy) {
+    description = 'Unzips the networktables maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadNetworkTablesHeaders
+
+    from zipTree(downloadNetworkTablesHeaders.outputs.files.singleFile)
+    into netTablesHeadersUnzipLocation
+}
+
+// This defines a project property that projects depending on network tables can use to setup that dependency.
+ext.defineNetworkTablesProperties = {
+    ext.netTables = netTablesUnzipLocation
+    ext.netTablesInclude = "$netTablesUnzipLocation/include"
+    ext.netLibArmLocation = "$netTablesUnzipLocation/linux/athena/shared"
+    ext.netSharedLib = "$netLibArmLocation/libntcore.so"
+    ext.netSharedLibDebug = "$netLibArmLocation/libntcore.so.debug"
+
+    ext.addNetworkTablesLibraryLinks = { compileTask, linker, targetPlatform ->
+        compileTask.dependsOn project(':').unzipNetworkTables
+		compileTask.dependsOn project(':').unzipNetworkTablesHeaders
+        String architecture = targetPlatform.architecture
+        if (architecture.contains('arm')) {
+            linker.args netSharedLib
+        }
+        addWpiUtilLibraryLinks(compileTask, linker, targetPlatform)
+    }
+}
+
+
+def wpilibUnzipLocation = "$buildDir/wpilib"
+def wpilibHeadersUnzipLocation = "$buildDir/wpilib/include"
+
+task downloadWpilib() {
+    description = 'Downloads the C++ ARM wpilib maven dependency.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/wpilibc.zip")
+    outputs.file(libZip)
+    def armWPILib
+    
+
+    doFirst {
+        def armWpiLibDependency = project.dependencies.create("edu.wpi.first.wpilibc:wpilibc:+:linuxathena@zip")
+        def armWpiLibConfig = project.configurations.detachedConfiguration(armWpiLibDependency)
+        armWpiLibConfig.setTransitive(false)
+        armWPILib = armWpiLibConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armWPILib
+            rename 'wpilibc(.+)', 'wpilibc.zip'
+            into depFolder
+        }
+    }
+}
+task downloadWpilibHeaders() {
+    description = 'Downloads the C++ ARM wpilib maven dependency.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/wpilibcHeaders.zip")
+    outputs.file(libZip)
+    def armWPILibHeaders
+    
+
+    doFirst {
+        def armWpiLibHeadersDependency = project.dependencies.create("edu.wpi.first.wpilibc:wpilibc:+:headers@zip")
+        def armWpiLibHeadersConfig = project.configurations.detachedConfiguration(armWpiLibHeadersDependency)
+        armWpiLibHeadersConfig.setTransitive(false)
+        armWPILibHeaders = armWpiLibHeadersConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armWPILibHeaders
+            rename 'wpilibc(.+)', 'wpilibcHeaders.zip'
+            into depFolder
+        }
+    }
+}
+
+// Create a task that will unzip the wpilib files into a temporary build directory
+task unzipWpilib(type: Copy) {
+    description = 'Unzips the wpilib maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadWpilib
+    
+    from zipTree(downloadWpilib.outputs.files.singleFile)
+    into wpilibUnzipLocation
+}
+task unzipWpilibHeaders(type: Copy) {
+    description = 'Unzips the wpilib maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadWpilibHeaders
+    
+    from zipTree(downloadWpilibHeaders.outputs.files.singleFile)
+    into wpilibHeadersUnzipLocation
+}
+
+ext.defineWpiLibProperties = {
+    ext.wpilib = wpilibUnzipLocation
+    ext.wpilibInclude = "$wpilibUnzipLocation/include"
+    ext.wpilibLocation = "$wpilibUnzipLocation/linux/athena/shared"
+    ext.wpilibSharedLib = "$wpilibLocation/libwpilibc.so"
+    
+    ext.addWpilibLibraryLinks = { compileTask, linker, targetPlatform ->
+        compileTask.dependsOn project(':').unzipWpilib
+		compileTask.dependsOn project(':').unzipWpilibHeaders
+        String architecture = targetPlatform.architecture
+        if (architecture.contains('arm')) {
+            // Grab all the shared libraries and link them
+            linker.args wpilibSharedLib
+
+            def libraryPath = wpilibLocation
+
+            linker.args << '-L' + libraryPath
+        }
+    }
+}
+
+def cscoreUnzipLocation = "$buildDir/cscore"
+
+task downloadCsCore() {
+    description = 'Downloads the C++ ARM CsCore maven dependency.'
+
+    group = 'WPILib'
+    def depFolder = "$buildDir/dependencies"
+    def libZip = file("$depFolder/cscore.zip")
+    outputs.file(libZip)
+    def armCsCore
+    
+
+    doFirst {
+        def armCsDependency = project.dependencies.create("edu.wpi.cscore.cpp:cscore:+:athena-uberzip@zip")
+        def armCsConfig = project.configurations.detachedConfiguration(armCsDependency)
+        armCsConfig.setTransitive(false)
+        armCsCore = armCsConfig.files[0].canonicalFile
+    }
+
+    doLast {
+        copy {
+            from armCsCore
+            rename 'cscore(.+)', 'cscore.zip'
+            into depFolder
+        }
+    }
+}
+
+// Create a task that will unzip the cscore files into a temporary build directory
+task unzipCsCore(type: Copy) {
+    description = 'Unzips the cscore maven dependency so that the include files and libraries can be used'
+    group = 'WPILib'
+    dependsOn downloadCsCore
+    
+    from zipTree(downloadCsCore.outputs.files.singleFile)
+    into cscoreUnzipLocation
+}
+
+ext.defineCsCoreProperties = {
+    ext.cscore = cscoreUnzipLocation
+    ext.cscoreInclude = "$cscoreUnzipLocation/include"
+    ext.cscoreLocation = "$cscoreUnzipLocation/lib"
+    ext.opencvSharedLib = "$cscoreLocation/libopencv.so"
+	ext.cscoreSharedLib = "$cscoreLocation/libcscore.so"
+    
+    ext.addCsCoreLibraryLinks = { compileTask, linker, targetPlatform ->
+//        compileTask.dependsOn project(':').unzipCsCore
+        String architecture = targetPlatform.architecture
+        if (architecture.contains('arm')) {
+            // Grab all the shared libraries and link them
+            linker.args opencvSharedLib
+			linker.args cscoreSharedLib
+
+            def libraryPath = cscoreLocation
+
+            linker.args << '-L' + libraryPath
+        }
+    }
+}