apply from: "${rootDir}/shared/resources.gradle" ext { noWpiutil = true skipJniCheck = true baseId = 'wpiutil' groupId = 'edu.wpi.first.wpiutil' nativeName = 'wpiutil' devMain = 'edu.wpi.first.wpiutil.DevMain' def generateTask = createGenerateResourcesTask('main', 'WPI', 'wpi', project) splitSetup = { it.tasks.withType(CppCompile) { dependsOn generateTask } it.sources { libuvCpp(CppSourceSet) { source { srcDirs 'src/main/native/libuv/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src' } } resourcesCpp(CppSourceSet) { source { srcDirs "$buildDir/generated/main/cpp", "$rootDir/shared/singlelib" include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/include' } } } if (!it.targetPlatform.operatingSystem.isWindows()) { it.cppCompiler.define '_GNU_SOURCE' it.sources { libuvUnixCpp(CppSourceSet) { source { srcDirs 'src/main/native/libuv/src/unix' includes = [ 'async.cpp', 'core.cpp', 'dl.cpp', 'fs.cpp', 'getaddrinfo.cpp', 'getnameinfo.cpp', 'loop-watcher.cpp', 'loop.cpp', 'pipe.cpp', 'poll.cpp', 'process.cpp', 'signal.cpp', 'stream.cpp', 'tcp.cpp', 'thread.cpp', 'timer.cpp', 'tty.cpp', 'udp.cpp', ] } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src' } } wpiutilUnixCpp(CppSourceSet) { source { srcDirs 'src/main/native/unix' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp' include '**/*.h' } } } } if (it.targetPlatform.operatingSystem.isWindows()) { if (it in SharedLibraryBinarySpec) { it.cppCompiler.define 'BUILDING_UV_SHARED' } it.sources { libuvWindowsCpp(CppSourceSet) { source { srcDirs 'src/main/native/libuv/src/win' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src' } } wpiutilWindowsCpp(CppSourceSet) { source { srcDirs 'src/main/native/windows' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp' include '**/*.h' } } } } else if (it.targetPlatform.operatingSystem.isMacOsX()) { it.sources { libuvMacCpp(CppSourceSet) { source { srcDirs 'src/main/native/libuv/src/unix' includes = [ 'bsd-ifaddrs.cpp', 'darwin.cpp', 'darwin-proctitle.cpp', 'fsevents.cpp', 'kqueue.cpp', 'proctitle.cpp' ] } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src' } } } } else { it.sources { libuvLinuxCpp(CppSourceSet) { source { srcDirs 'src/main/native/libuv/src/unix' includes = [ 'linux-core.cpp', 'linux-inotify.cpp', 'linux-syscalls.cpp', 'procfs-exepath.cpp', 'proctitle.cpp', 'sysinfo-loadavg.cpp', ] } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src' } } } } } } def examplesMap = [:]; file("$projectDir/examples").list(new FilenameFilter() { @Override public boolean accept(File current, String name) { return new File(current, name).isDirectory(); } }).each { examplesMap.put(it, []) } apply from: "${rootDir}/shared/jni/setupBuild.gradle" nativeUtils.exportsConfigs { wpiutil { x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] } } cppHeadersZip { from('src/main/native/libuv/include') { into '/' } from('src/main/native/eigeninclude') { into '/' } } model { components { all { it.sources.each { it.exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/libuv/include', 'src/main/native/libuv/src', 'src/main/native/eigeninclude' } } } } } model { components { examplesMap.each { key, value -> "${key}"(NativeExecutableSpec) { targetBuildTypes 'debug' binaries.all { lib library: 'wpiutil', linkage: 'shared' } sources { cpp { source { srcDirs 'examples/' + "${key}" include '**/*.cpp' } } } } } netconsoleServer(NativeExecutableSpec) { targetBuildTypes 'release' sources { cpp { source { srcDirs = ['src/netconsoleServer/native/cpp'] includes = ['**/*.cpp'] } } } binaries.all { binary -> lib project: ':wpiutil', library: 'wpiutil', linkage: 'static' if (binary.targetPlatform.operatingSystem.isLinux()) { linker.args "-lutil" } } } netconsoleTee(NativeExecutableSpec) { targetBuildTypes 'release' sources { cpp { source { srcDirs = ['src/netconsoleTee/native/cpp'] includes = ['**/*.cpp'] } } } binaries.all { binary -> lib project: ':wpiutil', library: 'wpiutil', linkage: 'static' } } } } dependencies { api "org.ejml:ejml-simple:0.38" api "com.fasterxml.jackson.core:jackson-annotations:2.10.0" api "com.fasterxml.jackson.core:jackson-core:2.10.0" api "com.fasterxml.jackson.core:jackson-databind:2.10.0" } def wpilibNumberFileInput = file("src/generate/GenericNumber.java.in") def natFileInput = file("src/generate/Nat.java.in") def natGetterInput = file("src/generate/NatGetter.java.in") def wpilibNumberFileOutputDir = file("$buildDir/generated/java/edu/wpi/first/wpiutil/math/numbers") def wpilibNatFileOutput = file("$buildDir/generated/java/edu/wpi/first/wpiutil/math/Nat.java") def maxNum = 20 task generateNumbers() { description = "Generates generic number classes from template" group = "WPILib" inputs.file wpilibNumberFileInput outputs.dir wpilibNumberFileOutputDir doLast { if(wpilibNumberFileOutputDir.exists()) { wpilibNumberFileOutputDir.delete() } wpilibNumberFileOutputDir.mkdirs() for(i in 0..maxNum) { def outputFile = new File(wpilibNumberFileOutputDir, "N${i}.java") def read = wpilibNumberFileInput.text.replace('${num}', i.toString()) outputFile.write(read) } } } task generateNat() { description = "Generates Nat.java" group = "WPILib" inputs.files([natFileInput, natGetterInput]) outputs.file wpilibNatFileOutput dependsOn generateNumbers doLast { if(wpilibNatFileOutput.exists()) { wpilibNatFileOutput.delete() } def template = natFileInput.text + "\n" def importsString = ""; for(i in 0..maxNum) { importsString += "import edu.wpi.first.wpiutil.math.numbers.N${i};\n" template += natGetterInput.text.replace('${num}', i.toString()) + "\n" } template += "}\n" // Close the class body template = template.replace('{{REPLACEWITHIMPORTS}}', importsString) wpilibNatFileOutput.write(template) } } sourceSets.main.java.srcDir "${buildDir}/generated/java" compileJava.dependsOn generateNumbers compileJava.dependsOn generateNat