import edu.wpi.first.toolchain.NativePlatforms apply plugin: "java" apply plugin: "cpp" apply plugin: "edu.wpi.first.NativeUtils" apply from: "${rootDir}/shared/config.gradle" nativeUtils { dependencyConfigs { gui { groupId = "edu.wpi.first.halsim" artifactId = "halsim_gui" headerClassifier = "headers" sourceClassifier = "sources" ext = "zip" version = wpilibVersion sharedPlatforms << "osxx86-64" << "linuxx86-64" << "windowsx86-64" } } combinedDependencyConfigs { halsim_gui { libraryName = "halsim_gui" targetPlatforms << "osxx86-64" << "linuxx86-64" << "windowsx86-64" dependencies << "gui_shared" } } } ext { exampleFile = new File("$projectDir/src/main/java/org/photonlib/examples/examples.json") } dependencies { implementation project(":photon-lib") implementation project(":photon-targeting") implementation "edu.wpi.first.cscore:cscore-java:$wpilibVersion" implementation "edu.wpi.first.cameraserver:cameraserver-java:$wpilibVersion" implementation "edu.wpi.first.ntcore:ntcore-java:$wpilibVersion" implementation "edu.wpi.first.wpilibj:wpilibj-java:$wpilibVersion" implementation "edu.wpi.first.wpiutil:wpiutil-java:$wpilibVersion" implementation "edu.wpi.first.wpimath:wpimath-java:$wpilibVersion" implementation "edu.wpi.first.hal:hal-java:$wpilibVersion" implementation "org.ejml:ejml-simple:0.38" implementation "com.fasterxml.jackson.core:jackson-annotations:2.10.0" implementation "com.fasterxml.jackson.core:jackson-core:2.10.0" implementation "com.fasterxml.jackson.core:jackson-databind:2.10.0" implementation "edu.wpi.first.thirdparty.frc2020.opencv:opencv-java:3.4.7-3" } model { components { dev(NativeExecutableSpec) { targetBuildTypes "debug" sources { cpp { source { srcDirs "src/dev/native/cpp" include "**/*.cpp" } exportedHeaders { srcDirs "src/dev/native/include" } } } binaries.all { binary -> nativeUtils.useRequiredLibrary(binary, "wpilib_executable_shared") nativeUtils.useRequiredLibrary(binary, "opencv_shared") if (binary.targetPlatform.name == NativePlatforms.desktop) { nativeUtils.useRequiredLibrary(binary, "halsim_gui") } } } } tasks { def found = false $.components.each { if (it in NativeExecutableSpec && it.name == "dev") { it.binaries.each { if (found) return 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 } } new groovy.json.JsonSlurper().parseText(exampleFile.text).each { entry -> project.tasks.create("run${entry.foldername}", JavaExec) { run -> main = "org.photonlib.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"] } } } } } } } } }