apply from: "${rootDir}/shared/resources.gradle" apply plugin: 'c' ext { noWpiutil = true baseId = 'wpiutil' groupId = 'org.wpilib.wpiutil' nativeName = 'wpiutil' devMain = 'org.wpilib.util.DevMain' def generateTask = createGenerateResourcesTask('main', 'WPI', 'wpi', project) splitSetup = { it.tasks.withType(CppCompile) { dependsOn generateTask } it.sources { debuggingCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/debugging/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/debugging/include' } } doubleConversionCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/double-conversion/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/double-conversion/include' } } fmtlibCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/fmtlib/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/fmtlib/include' } } jsonCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/json/src' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/thirdparty/double-conversion/include', 'src/main/native/thirdparty/expected/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/json/include' } } llvmCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/llvm/cpp' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/thirdparty/expected/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/llvm/include' } } mpackCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/mpack/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/mpack/include' } } nanopbCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/nanopb/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/nanopb/include' } } sigslotCpp(CppSourceSet) { source { srcDirs 'src/main/native/thirdparty/sigslot/src' include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/thirdparty/sigslot/include' } } resourcesCpp(CppSourceSet) { source { srcDirs "$buildDir/generated/main/cpp", "$rootDir/shared/singlelib" include '*.cpp' } exportedHeaders { srcDirs 'src/main/native/include' } } upbCpp(CSourceSet) { source { srcDirs 'src/main/native/thirdparty/upb/src' include '**/*.c' } exportedHeaders { srcDirs 'src/main/native/thirdparty/upb/include' } } } if (!it.targetPlatform.operatingSystem.isWindows()) { it.cppCompiler.define '_GNU_SOURCE' it.sources { wpiutilUnixCpp(CppSourceSet) { source { srcDirs 'src/main/native/unix' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include' include '**/*.h' } } } } if (it.targetPlatform.operatingSystem.isWindows()) { it.sources { wpiutilWindowsCpp(CppSourceSet) { source { srcDirs 'src/main/native/windows' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include' include '**/*.h' } } } } else if (it.targetPlatform.operatingSystem.isMacOsX()) { it.sources { wpiutilmacOSCpp(CppSourceSet) { source { srcDirs 'src/main/native/macOS' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include' include '**/*.h' } } } } else { it.sources { wpiutilLinuxCpp(CppSourceSet) { source { srcDirs 'src/main/native/linux' include '**/*.cpp' } exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/cpp', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include' include '**/*.h' } } } } } } apply from: "${rootDir}/shared/jni/setupBuild.gradle" nativeUtils.exportsConfigs { wpiutil { } } nativeUtils.platformConfigs.each { if (it.name.contains('windows')) { it.cppCompiler.args.add("/D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR") } } cppHeadersZip { def thirdpartyIncDirs = [ 'src/main/native/thirdparty/argparse/include', 'src/main/native/thirdparty/debugging/include', 'src/main/native/thirdparty/double-conversion/include', 'src/main/native/thirdparty/expected/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/upb/include' ] thirdpartyIncDirs.each { ext.includeDirs << project.file(it) from(it) { into '/' } } } cppSourcesZip { from('src/main/native/thirdparty/debugging/src') { into '/' } from('src/main/native/thirdparty/double-conversion/src') { into '/' } from('src/main/native/thirdparty/fmtlib/src') { into '/' } from('src/main/native/thirdparty/json/src') { into '/' } from('src/main/native/thirdparty/llvm/cpp') { into '/' } from('src/main/native/thirdparty/mpack/src') { into '/' } from('src/main/native/thirdparty/nanopb/src') { into '/' } from('src/main/native/thirdparty/sigslot/src') { into '/' } from('src/main/native/thirdparty/upb/src') { into '/' } } model { components { all { it.sources.each { it.exportedHeaders { srcDirs 'src/main/native/include', 'src/main/native/thirdparty/argparse/include/', 'src/main/native/thirdparty/debugging/include', 'src/main/native/thirdparty/double-conversion/include', 'src/main/native/thirdparty/expected/include', 'src/main/native/thirdparty/fmtlib/include', 'src/main/native/thirdparty/llvm/include', 'src/main/native/thirdparty/sigslot/include', 'src/main/native/thirdparty/json/include', 'src/main/native/thirdparty/mpack/include', 'src/main/native/thirdparty/nanopb/include', 'src/main/native/thirdparty/upb/include' } } } } testSuites { "${nativeName}Catch2Test"(GoogleTestTestSuiteSpec) { for(NativeComponentSpec c : $.components) { if (c.name == nativeName) { testing c break } } sources { cpp { source { srcDirs 'src/test/native/cpp' include '**/TestCatch2.cpp', '**/catch2main.cpp' } exportedHeaders { srcDirs 'src/test/native/include', 'src/main/native/cpp' } } } binaries.all { lib project: ':thirdparty:catch2', library: 'catch2', linkage: 'static' } } withType(GoogleTestTestSuiteSpec) { sources { protobufGenCpp(CppSourceSet) { source { srcDirs 'src/generated/test/native/cpp' include '**/*.cpp' } exportedHeaders { srcDirs 'src/generated/test/native/cpp' } } } it.sources.each { it.exportedHeaders { srcDirs 'src/test/native/include', 'src/generated/test/native/cpp' } } } } } dependencies { api libs.bundles.jackson api libs.quickbuf.runtime }