| import org.gradle.internal.os.OperatingSystem |
| |
| apply plugin: 'java' |
| |
| def generatedJNIHeaderLoc = '../build/include' |
| |
| sourceSets { |
| main { |
| java { |
| srcDirs = ['../java/src'] |
| } |
| } |
| } |
| |
| jar { |
| description = 'Generates NetworkTables jar, with the JNI shared libraries embedded' |
| baseName = 'ntcore' |
| classifier = "$buildPlatform" |
| |
| dependsOn { classes } |
| binaries.withType(SharedLibraryBinary) { 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 == 'x64NtcoreSharedLibrary' || task.name == 'x86NtcoreSharedLibrary') |
| 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('../java/arm-linux').absolutePath |
| cppCompiler.args '-I', file('../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 |
| } |
| } |
| } |