// 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