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' } } fmtlibCpp(CppSourceSet) { source { srcDirs 'src/main/native/fmtlib/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/fmtlib/include' } } 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' } } wpiutilmacOSCpp(CppSourceSet) { source { srcDirs 'src/main/native/macOS' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp' include '**/*.h' } } } } 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' } } wpiutilLinuxCpp(CppSourceSet) { source { srcDirs 'src/main/native/linux' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/fmtlib/include' include '**/*.h' } } } } } } 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/fmtlib/include') { 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/fmtlib/include' } } } } } 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' } } } } sourceSets { printlog } task runPrintLog(type: JavaExec) { classpath = sourceSets.printlog.runtimeClasspath mainClass = 'printlog.PrintLog' } dependencies { api "com.fasterxml.jackson.core:jackson-annotations:2.12.4" api "com.fasterxml.jackson.core:jackson-core:2.12.4" api "com.fasterxml.jackson.core:jackson-databind:2.12.4" printlogImplementation sourceSets.main.output }