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" test { useJUnitPlatform() systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' testLogging { events "failed" exceptionFormat "full" } finalizedBy jacocoTestReport } if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxraspbian') || project.hasProperty('onlylinuxaarch64bionic')) { test.enabled = false } dependencies { implementation project(':wpilibj') implementation project(':wpimath') implementation project(':hal') implementation project(':wpiutil') implementation project(':ntcore') implementation project(':cscore') implementation project(':cameraserver') implementation project(':wpilibOldCommands') implementation project(':wpilibNewCommands') testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' } jacoco { toolVersion = "0.8.7" } 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: ':wpilibNewCommands', library: 'wpilibNewCommands', linkage: 'shared' lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared' lib project: ':wpimath', library: 'wpimath', linkage: 'shared' lib project: ':wpimath', library: 'wpimathJNI', linkage: 'shared' lib project: ':ntcore', library: 'ntcore', linkage: 'shared' lib project: ':cscore', library: 'cscore', linkage: 'shared' lib project: ':ntcore', library: 'ntcoreJNIShared', 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: 'wpiutilJNI', linkage: 'shared' lib project: ':cameraserver', library: 'cameraserver', 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 test.environment 'LD_LIBRARY_PATH', filePath test.workingDir filePath } new groovy.json.JsonSlurper().parseText(exampleFile.text).each { entry -> project.tasks.create("run${entry.foldername}", JavaExec) { run -> mainClass = "edu.wpi.first.wpilibj.examples." + entry.foldername + ".Main" classpath = sourceSets.main.runtimeClasspath run.dependsOn it.tasks.install run.systemProperty 'java.library.path', filePath run.environment 'LD_LIBRARY_PATH', filePath run.workingDir filePath doFirst { doFirstTask(run) } if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) { run.jvmArgs = ['-XstartOnFirstThread'] } } } found = true } } } } } } } ext { isCppCommands = false } apply from: "${rootDir}/shared/examplecheck.gradle"