From 5ac9f688931a22a126b6d30fee75e3512ac21046 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 23 Dec 2023 18:01:51 -0800 Subject: [PATCH] Create test-jni --- build.gradle | 2 + photon-core/build.gradle | 17 +++----- .../src/main/native/{cpp => }/jni/TestJni.cpp | 0 shared/javacpp/publish.gradle | 39 ++++++++++++++++++- 4 files changed, 45 insertions(+), 13 deletions(-) rename photon-core/src/main/native/{cpp => }/jni/TestJni.cpp (100%) diff --git a/build.gradle b/build.gradle index b571df5302..47453850bc 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,6 @@ plugins { + id "java" + id "cpp" id "com.diffplug.spotless" version "6.22.0" id "edu.wpi.first.NativeUtils" version "2024.6.1" apply false id "edu.wpi.first.wpilib.repositories.WPILibRepositoriesPlugin" version "2020.2" diff --git a/photon-core/build.gradle b/photon-core/build.gradle index a93e094586..46dd210111 100644 --- a/photon-core/build.gradle +++ b/photon-core/build.gradle @@ -9,16 +9,12 @@ apply from: "${rootDir}/shared/common.gradle" ext { nativeName = "photoncore" - main_native_libs = [ - "opencv_shared" - ] + main_native_libs = ["opencv_shared"] - test_native_libs = [ - "opencv_static" - ] + test_native_libs = ["opencv_shared"] dev_native_libs = [ - "opencv_static", + "opencv_shared", ] } @@ -64,11 +60,11 @@ model { sources { cpp { source { - srcDirs 'src/main/native/cpp' + srcDirs 'src/main/native/jni' if (project.hasProperty('generatedSources')) { srcDir generatedSources } - include '**/jni/**/*.cpp' + include '**/*.cpp' } exportedHeaders { srcDir 'src/main/native/include' @@ -86,9 +82,6 @@ model { return } lib library: "${nativeName}", linkage: 'shared' - if (!project.hasProperty('noWpiutil')) { - lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared' - } if (project.hasProperty('jniSplitSetup')) { jniSplitSetup(it) } diff --git a/photon-core/src/main/native/cpp/jni/TestJni.cpp b/photon-core/src/main/native/jni/TestJni.cpp similarity index 100% rename from photon-core/src/main/native/cpp/jni/TestJni.cpp rename to photon-core/src/main/native/jni/TestJni.cpp diff --git a/shared/javacpp/publish.gradle b/shared/javacpp/publish.gradle index 22389e2342..6f5fa80813 100644 --- a/shared/javacpp/publish.gradle +++ b/shared/javacpp/publish.gradle @@ -1,3 +1,5 @@ +import java.security.MessageDigest + apply plugin: 'maven-publish' def outputsFolder = file("$buildDir/outputs") @@ -5,6 +7,7 @@ def outputsFolder = file("$buildDir/outputs") def baseArtifactId = nativeName def artifactGroupId = 'org.photonvision' def zipBaseName = "_GROUP_org_photonvision_${baseArtifactId}_ID_${baseArtifactId}-cpp_CLS" +def jniBaseName = "_GROUP_org_photonvision_${nativeName}_ID_${nativeName}-jni_CLS" def licenseFile = file("$rootDir/LICENCE") @@ -52,7 +55,32 @@ addTaskToCopyAllOutputs(cppHeadersZip) model { publishing { - def taskList = createComponentZipTasks($.components, [nativeName], zipBaseName, Zip, project, includeStandardZipFormat) + def taskList = createComponentZipTasks($.components, [ + nativeName, + "${nativeName}JNI" + ], zipBaseName, Zip, project, includeStandardZipFormat) + + def jniTaskList = createComponentZipTasks($.components, ["${nativeName}JNI"], jniBaseName, Jar, project, { task, value -> + value.each { binary -> + if (binary.buildable) { + if (binary instanceof SharedLibraryBinarySpec) { + task.dependsOn binary.tasks.link + def hashFile = new File(binary.sharedLibraryFile.parentFile.absolutePath, "${binary.component.baseName}.hash") + task.outputs.file(hashFile) + task.inputs.file(binary.sharedLibraryFile) + task.from(hashFile) { + into nativeUtils.getPlatformPath(binary) + } + task.doFirst { + hashFile.text = MessageDigest.getInstance("MD5").digest(binary.sharedLibraryFile.bytes).encodeHex().toString() + } + task.from(binary.sharedLibraryFile) { + into nativeUtils.getPlatformPath(binary) + } + } + } + } + }) publications { cpp(MavenPublication) { @@ -66,6 +94,15 @@ model { groupId artifactGroupId version pubVersion } + jni(MavenPublication) { + jniTaskList.each { + artifact it + } + + artifactId = "${baseArtifactId}-jni" + groupId artifactGroupId + version pubVersion + } } repositories {