mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
With fixes to Windows and macOS library path handling, all the tricks we used in the past to make library loading work are no longer required.
217 lines
9.4 KiB
Groovy
217 lines
9.4 KiB
Groovy
import edu.wpi.first.toolchain.NativePlatforms
|
|
|
|
apply plugin: 'java'
|
|
apply plugin: 'jacoco'
|
|
|
|
ext {
|
|
useJava = true
|
|
useCpp = false
|
|
skipDev = true
|
|
}
|
|
|
|
apply from: "${rootDir}/shared/opencv.gradle"
|
|
|
|
dependencies {
|
|
implementation project(':wpilibj')
|
|
implementation project(':apriltag')
|
|
implementation project(':wpimath')
|
|
implementation project(':hal')
|
|
implementation project(':wpiutil')
|
|
implementation project(':wpinet')
|
|
implementation project(':ntcore')
|
|
implementation project(':cscore')
|
|
implementation project(':cameraserver')
|
|
implementation project(':wpilibNewCommands')
|
|
implementation project(':romiVendordep')
|
|
implementation project(':xrpVendordep')
|
|
|
|
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
|
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
|
}
|
|
|
|
jacoco {
|
|
toolVersion = "0.8.10"
|
|
}
|
|
|
|
jacocoTestReport {
|
|
reports {
|
|
xml.required = true
|
|
html.required = true
|
|
}
|
|
}
|
|
|
|
if (!project.hasProperty('skipJavaFormat')) {
|
|
apply plugin: 'pmd'
|
|
|
|
pmd {
|
|
consoleOutput = true
|
|
reportsDir = file("$project.buildDir/reports/pmd")
|
|
ruleSetFiles = files(new File(rootDir, "styleguide/pmd-ruleset.xml"))
|
|
ruleSets = []
|
|
}
|
|
}
|
|
|
|
gradle.projectsEvaluated {
|
|
tasks.withType(JavaCompile) {
|
|
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Werror"
|
|
}
|
|
}
|
|
|
|
tasks.register('buildDesktopJava') {
|
|
it.dependsOn tasks.withType(JavaCompile)
|
|
}
|
|
|
|
apply from: 'publish.gradle'
|
|
|
|
ext {
|
|
templateDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/templates/")
|
|
templateFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/templates/templates.json")
|
|
exampleDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/examples/")
|
|
exampleFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/examples/examples.json")
|
|
commandDirectory = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/commands/")
|
|
commandFile = new File("$projectDir/src/main/java/edu/wpi/first/wpilibj/commands/commands.json")
|
|
}
|
|
|
|
apply plugin: 'cpp'
|
|
apply plugin: 'edu.wpi.first.NativeUtils'
|
|
|
|
apply from: '../shared/config.gradle'
|
|
|
|
|
|
model {
|
|
components {
|
|
wpilibjExamplesDev(NativeExecutableSpec) {
|
|
targetBuildTypes 'debug'
|
|
sources {
|
|
cpp {
|
|
source {
|
|
srcDirs 'src/dev/native/cpp'
|
|
include '**/*.cpp'
|
|
}
|
|
exportedHeaders {
|
|
srcDirs 'src/dev/native/include'
|
|
}
|
|
}
|
|
}
|
|
binaries.all { binary ->
|
|
lib project: ':apriltag', library: 'apriltag', linkage: 'shared'
|
|
lib project: ':apriltag', library: 'apriltagJNIShared', linkage: 'shared'
|
|
lib project: ':wpimath', library: 'wpimath', linkage: 'shared'
|
|
lib project: ':wpimath', library: 'wpimathJNIShared', linkage: 'shared'
|
|
project(':ntcore').addNtcoreDependency(binary, 'shared')
|
|
project(':ntcore').addNtcoreJniDependency(binary)
|
|
lib project: ':cscore', library: 'cscore', linkage: 'shared'
|
|
lib project: ':cscore', library: 'cscoreJNIShared', linkage: 'shared'
|
|
project(':hal').addHalDependency(binary, 'shared')
|
|
project(':hal').addHalJniDependency(binary)
|
|
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
|
|
lib project: ':wpiutil', library: 'wpiutilJNIShared', linkage: 'shared'
|
|
lib project: ':wpinet', library: 'wpinet', linkage: 'shared'
|
|
lib project: ':wpinet', library: 'wpinetJNIShared', linkage: 'shared'
|
|
if (binary.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
|
|
nativeUtils.useRequiredLibrary(binary, 'ni_link_libraries', 'ni_runtime_libraries')
|
|
} else {
|
|
def systemArch = getCurrentArch()
|
|
if (binary.targetPlatform.name == systemArch) {
|
|
lib project: ":simulation:halsim_gui", library: 'halsim_gui', linkage: 'shared'
|
|
}
|
|
}
|
|
nativeUtils.useRequiredLibrary(binary, 'opencv_shared')
|
|
}
|
|
}
|
|
}
|
|
tasks {
|
|
def c = $.components
|
|
def found = false
|
|
c.each {
|
|
if (it in NativeExecutableSpec && it.name == "wpilibjExamplesDev") {
|
|
it.binaries.each {
|
|
if (!found) {
|
|
def arch = it.targetPlatform.name
|
|
if (arch == NativePlatforms.desktop) {
|
|
found = true
|
|
def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib'
|
|
|
|
def doFirstTask = { task ->
|
|
def extensions = ''
|
|
it.tasks.install.installDirectory.get().getAsFile().eachFileRecurse {
|
|
def name = it.name
|
|
if (!(name.endsWith('.dll') || name.endsWith('.so') || name.endsWith('.dylib'))) {
|
|
return
|
|
}
|
|
def file = it
|
|
if (name.startsWith("halsim_gui") || name.startsWith("libhalsim_gui".toString())) {
|
|
extensions += file.absolutePath + File.pathSeparator
|
|
}
|
|
}
|
|
if (extensions != '') {
|
|
task.environment 'HALSIM_EXTENSIONS', extensions
|
|
}
|
|
}
|
|
|
|
project.tasks.create("runCpp", Exec) { task ->
|
|
dependsOn it.tasks.install
|
|
commandLine it.tasks.install.runScriptFile.get().asFile.toString()
|
|
test.dependsOn it.tasks.install
|
|
test.systemProperty 'java.library.path', filePath
|
|
}
|
|
|
|
new groovy.json.JsonSlurper().parseText(exampleFile.text).each { entry ->
|
|
project.tasks.create("run${entry.foldername}", JavaExec) { run ->
|
|
run.group "run examples"
|
|
run.mainClass = "edu.wpi.first.wpilibj.examples." + entry.foldername + "." + entry.mainclass
|
|
run.classpath = sourceSets.main.runtimeClasspath
|
|
run.dependsOn it.tasks.install
|
|
run.systemProperty 'java.library.path', filePath
|
|
doFirst { doFirstTask(run) }
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
|
|
run.jvmArgs = ['-XstartOnFirstThread']
|
|
}
|
|
}
|
|
project.tasks.create("test${entry.foldername}", Test) { testTask ->
|
|
testTask.group "verification"
|
|
testTask.useJUnitPlatform()
|
|
testTask.filter {
|
|
includeTestsMatching("edu.wpi.first.wpilibj.examples.${entry.foldername}.*")
|
|
// armsimulation regularly fails on CI Win64Debug
|
|
if (project.hasProperty('ciDebugOnly')) {
|
|
excludeTestsMatching("edu.wpi.first.wpilibj.examples.armsimulation.*")
|
|
}
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
test.filter {
|
|
excludeTestsMatching("edu.wpi.first.wpilibj.examples.${entry.foldername}.*")
|
|
setFailOnNoMatchingTests(false)
|
|
}
|
|
testTask.classpath = sourceSets.test.runtimeClasspath
|
|
testTask.dependsOn it.tasks.install
|
|
|
|
testTask.systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
|
|
testTask.testLogging {
|
|
events "failed"
|
|
exceptionFormat "full"
|
|
}
|
|
testTask.systemProperty 'java.library.path', filePath
|
|
|
|
if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxarm32') || project.hasProperty('onlylinuxarm64') || project.hasProperty('onlywindowsarm64')) {
|
|
testTask.enabled = false
|
|
}
|
|
test.dependsOn(testTask)
|
|
}
|
|
}
|
|
|
|
found = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ext {
|
|
isCppCommands = false
|
|
}
|
|
apply from: "${rootDir}/shared/examplecheck.gradle"
|