mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
This will allow dependencies such as wpilibc to update to use wpiutil without breaking "normal" ntcore static library use in the meantime. This commit also restructures the gradle files by creating a new (placeholder) wpiutil project, and moving the ntcore project into a separate gradle file. Added toolchains/native.gradle (refactored from ntcore). Also fixes ntcore skipJava on Windows by providing an alternate .def file for this case.
148 lines
4.7 KiB
Groovy
148 lines
4.7 KiB
Groovy
import org.gradle.internal.os.OperatingSystem
|
|
|
|
apply plugin: 'java'
|
|
apply plugin: 'net.ltgt.errorprone'
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
configurations.errorprone {
|
|
resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.9'
|
|
}
|
|
|
|
def generatedJNIHeaderLoc = "${buildDir}/include"
|
|
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
srcDirs = ["${rootDir}/java/src"]
|
|
}
|
|
}
|
|
}
|
|
|
|
jar {
|
|
description = 'Generates NetworkTables jar, with the JNI shared libraries embedded'
|
|
baseName = 'ntcore'
|
|
classifier = "$buildPlatform"
|
|
|
|
dependsOn { classes }
|
|
model {
|
|
binaries {
|
|
withType(SharedLibraryBinarySpec) { binary ->
|
|
from(file(binary.sharedLibraryFile)) {
|
|
into getPlatformPath(binary)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
project.tasks.whenTaskAdded { task ->
|
|
if (isArm) {
|
|
if (task.name == 'ntcoreSharedLibrary') jar.dependsOn task
|
|
} else {
|
|
if (task.name == 'ntcoreX64SharedLibrary' || task.name == 'ntcoreX86SharedLibrary')
|
|
jar.dependsOn task
|
|
}
|
|
}
|
|
|
|
task networktablesJavaSource(type: Jar, dependsOn: classes) {
|
|
description = 'Generates the source jar for NetworkTables java'
|
|
group = 'WPILib'
|
|
baseName = 'ntcore'
|
|
classifier = "sources"
|
|
from sourceSets.main.allJava
|
|
}
|
|
|
|
task networktablesJavadoc(type: Jar, dependsOn: javadoc) {
|
|
description = 'Generates the javadoc jar for NetworkTables java'
|
|
group = 'WPILib'
|
|
baseName = 'ntcore'
|
|
classifier = "javadoc"
|
|
from javadoc.destinationDir
|
|
}
|
|
|
|
build.dependsOn networktablesJavaSource
|
|
build.dependsOn networktablesJavadoc
|
|
|
|
/**
|
|
* Generates the JNI headers
|
|
*/
|
|
task jniHeadersNetworkTables {
|
|
description = 'Generates JNI headers from edu.wpi.first.wpilibj.networktables.*'
|
|
group = 'WPILib'
|
|
def outputFolder = file(generatedJNIHeaderLoc)
|
|
inputs.files sourceSets.main.output
|
|
outputs.file outputFolder
|
|
doLast {
|
|
outputFolder.mkdirs()
|
|
exec {
|
|
executable org.gradle.internal.jvm.Jvm.current().getExecutable('javah')
|
|
args '-d', outputFolder
|
|
args '-classpath', sourceSets.main.output.classesDir
|
|
args 'edu.wpi.first.wpilibj.networktables.NetworkTablesJNI'
|
|
}
|
|
}
|
|
}
|
|
|
|
clean {
|
|
delete generatedJNIHeaderLoc
|
|
}
|
|
|
|
compileJava {
|
|
options.compilerArgs << '-Xlint:unchecked'
|
|
}
|
|
|
|
javadoc {
|
|
options.addStringOption('Xdoclint:none', '-quiet')
|
|
}
|
|
|
|
// This creates a lambda that the main build.gradle can access, which sets up the JNI includes for the
|
|
// target build platform. This lambda is exposed as a property in the main build.gradle.
|
|
ext.setupJniIncludes = { binaries ->
|
|
def platformSpecificIncludeFlag = { loc, cppCompiler ->
|
|
if (OperatingSystem.current().isWindows()) {
|
|
cppCompiler.args "/I$loc"
|
|
} else {
|
|
cppCompiler.args '-I', loc
|
|
}
|
|
}
|
|
binaries.all {
|
|
tasks.withType(CppCompile) {
|
|
if (buildPlatform == 'arm') {
|
|
cppCompiler.args '-I', file("${rootDir}/java/arm-linux").absolutePath
|
|
cppCompiler.args '-I', file("${rootDir}/java/arm-linux/linux").absolutePath
|
|
} else {
|
|
def jdkLocation = org.gradle.internal.jvm.Jvm.current().javaHome
|
|
platformSpecificIncludeFlag("${jdkLocation}/include", cppCompiler)
|
|
|
|
if (targetPlatform.operatingSystem.macOsX) {
|
|
platformSpecificIncludeFlag("${jdkLocation}/include/darwin", cppCompiler)
|
|
} else if (targetPlatform.operatingSystem.linux) {
|
|
platformSpecificIncludeFlag("${jdkLocation}/include/linux", cppCompiler)
|
|
} else if (targetPlatform.operatingSystem.windows) {
|
|
platformSpecificIncludeFlag("${jdkLocation}/include/win32", cppCompiler)
|
|
} else if (targetPlatform.operatingSystem.freeBSD) {
|
|
platformSpecificIncludeFlag("${jdkLocation}/include/freebsd", cppCompiler)
|
|
} else if (file("$jdkLocation/include/darwin").exists()) {
|
|
// TODO: As of Gradle 2.8, targetPlatform.operatingSystem.macOsX returns false
|
|
// on El Capitan. We therefore manually test for the darwin folder and include it
|
|
// if it exists
|
|
platformSpecificIncludeFlag("${jdkLocation}/include/darwin", cppCompiler)
|
|
}
|
|
}
|
|
|
|
jniHeadersNetworkTables.outputs.files.each { file ->
|
|
if (buildPlatform == 'arm') {
|
|
cppCompiler.args '-I', file.getPath()
|
|
} else {
|
|
platformSpecificIncludeFlag(file.getPath(), cppCompiler)
|
|
}
|
|
}
|
|
|
|
dependsOn jniHeadersNetworkTables
|
|
}
|
|
}
|
|
}
|