blob: 07d2d39b1d5c22e2091d83f6d0b12259f458f347 [file] [log] [blame]
// 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