Squashed 'third_party/allwpilib_2017/' content from commit 35ac87d

Change-Id: I7bb6f5556c30d3f5a092e68de0be9c710c60c9f4
git-subtree-dir: third_party/allwpilib_2017
git-subtree-split: 35ac87d6ff8b7f061c4f18c9ea316e5dccd4888a
diff --git a/hal/build.gradle b/hal/build.gradle
new file mode 100644
index 0000000..07d2d39
--- /dev/null
+++ b/hal/build.gradle
@@ -0,0 +1,160 @@
+// There are two hal libraries that are built
+// - desktop which is used by simulation (gcc/msvc)
+// - athena which is used by the roborio (arm)
+
+plugins {
+    id 'cpp'
+    id 'maven-publish'
+}
+
+defineWpiUtilProperties()
+
+debugStripSetup(project)
+
+model {
+    components {
+        HALAthena(NativeLibrarySpec) {
+            targetPlatform 'roborio-arm'
+            binaries.all {
+                tasks.withType(CppCompile) {
+                    addNiLibraryLinks(linker, targetPlatform)
+                    addWpiUtilLibraryLinks(it, linker, targetPlatform)
+                }
+            }
+            sources {
+                cpp {
+                    source {
+                        srcDirs = ["lib/athena", niLibraryHeadersRoot, "lib/shared"]
+                        includes = ["**/*.cpp"]
+                    }
+                    exportedHeaders {
+                        srcDirs = ["include", niLibraryHeadersRoot, wpiUtilInclude]
+                    }
+                }
+            }
+        }
+    }
+    tasks { tasks ->
+        tasks.halZip.dependsOn tasks.HALAthenaSharedLibrary
+        tasks.athenaRuntimeZip.dependsOn tasks.HALAthenaSharedLibrary
+    }
+}
+
+task halZip(type: Zip) {
+    description = 'Zips the HAL'
+    group = 'WPILib'
+    baseName = 'hal'
+    destinationDir = project.buildDir
+    duplicatesStrategy = 'exclude'
+
+    // Include the shared library file and header files from this project
+    model {
+        binaries {
+            withType(SharedLibraryBinarySpec) { spec ->
+                spec.headerDirs.each {
+                    def normalizedIt = it.toString().replace('/', '\\')
+                    def normalizedWPIUtil = wpiUtilInclude.toString().replace('/', '\\')
+                    // exclude the wpiUtil library, and any NI libraries (NI libraries grabbed later)
+                    if (normalizedIt != normalizedWPIUtil) {
+                        from(it) {
+                            into 'include'
+                            // We don't want to include any of the .cpp files that are in some of the header directories
+                            exclude '**/*.cpp'
+                        }
+                    }
+                }
+                from(spec.sharedLibraryFile) {
+                    into 'lib'
+                }
+                from(new File(spec.sharedLibraryFile.absolutePath + ".debug")) {
+                    into 'lib'
+                }
+            }
+        }
+    }
+
+    // Finally, include all of the shared library objects from the ni directory
+    from(project.file('../ni-libraries/lib')) {
+        into 'lib'
+        exclude 'genlinks'
+        exclude 'genlinks.bat'
+        exclude 'libwpi.so'
+    }
+}
+
+task athenaRuntimeZip(type: Zip) {
+    description = 'Zips the Athena Runtime libraries'
+    group = 'WPILib'
+    baseName = 'athena-runtime'
+    destinationDir = project.buildDir
+    duplicatesStrategy = 'exclude'
+
+    // Include the static library file and header files from this project
+    model {
+        binaries {
+            withType(SharedLibraryBinarySpec) { spec ->
+                spec.headerDirs.each {
+                    from(it) {
+                        into 'include'
+                        // We don't want to include any of the .cpp files that are in some of the header directories
+                        exclude '**/*.cpp'
+                    }
+                }
+                from(spec.sharedLibraryFile) {
+                    into 'lib'
+                }
+                from(new File(spec.sharedLibraryFile.absolutePath + ".debug")) {
+                    into 'lib'
+                }
+            }
+        }
+    }
+
+    defineNetworkTablesProperties()
+    dependsOn project(':').downloadNetworkTables
+
+    from(project.file(netTablesInclude)) {
+        into 'include'
+    }
+
+    from (file(netSharedLib)) {
+        into 'lib'
+    }
+
+    from (file(netSharedLibDebug)) {
+        into 'lib'
+    }
+
+    from (file(wpiUtilSharedLib)) {
+        into 'lib'
+    }
+
+    from (file(wpiUtilSharedLibDebug)) {
+        into 'lib'
+    }
+}
+
+
+publishing {
+    publications {
+        hal(MavenPublication) {
+            artifact halZip
+
+            groupId 'edu.wpi.first.wpilib'
+            artifactId 'hal'
+            version WPILibVersion.version
+        }
+        athenaruntime(MavenPublication) {
+            artifact athenaRuntimeZip
+
+            groupId 'edu.wpi.first.wpilib'
+            artifactId 'athena-runtime'
+            version WPILibVersion.version
+        }
+    }
+
+    setupWpilibRepo(it)
+}
+
+build.dependsOn halZip
+build.dependsOn athenaRuntimeZip