From 91f19bf94c2e65db9b75be3afb2edcd5c3a5e8b6 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sat, 18 Jan 2025 16:34:43 +0100 Subject: [PATCH] Native Libraries: - Linux: added dumps - macOS: replaced deprecated Gradle `exec` --- .../flatlaf-natives-linux/build.gradle.kts | 36 ++++++++++++++++++- .../flatlaf-natives-macos/build.gradle.kts | 17 +++++---- .../flatlaf-natives-windows/build.gradle.kts | 2 +- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/flatlaf-natives/flatlaf-natives-linux/build.gradle.kts b/flatlaf-natives/flatlaf-natives-linux/build.gradle.kts index abfad042..dc9de1e5 100644 --- a/flatlaf-natives/flatlaf-natives-linux/build.gradle.kts +++ b/flatlaf-natives/flatlaf-natives-linux/build.gradle.kts @@ -14,6 +14,8 @@ * limitations under the License. */ +import java.io.FileOutputStream + plugins { `cpp-library` `flatlaf-cpp-library` @@ -96,8 +98,10 @@ tasks { copy { from( linkedFile ) into( nativesDir ) - rename( "libflatlaf-natives-linux.so", libraryName ) + rename( linkedFile.get().asFile.name, libraryName ) } + +// dump( linkedFile.asFile.get(), true ) } } @@ -160,7 +164,37 @@ tasks { from( "$outDir/$libraryName" ) into( nativesDir ) } + +// dump( file( "$outDir/$libraryName" ), false ) } } } } + +/*dump +interface InjectedExecOps { @get:Inject val execOps: ExecOperations } +val injected = project.objects.newInstance() + +fun dump( dylib: File, disassemble: Boolean ) { + + val dylibDir = dylib.parent + injected.execOps.exec { commandLine( "size", dylib ); standardOutput = FileOutputStream( "$dylibDir/size.txt" ) } + injected.execOps.exec { + commandLine( "objdump", + // commands + "--archive-headers", + "--section-headers", + "--private-headers", + "--reloc", + "--dynamic-reloc", + "--syms", + // files + dylib ) + standardOutput = FileOutputStream( "$dylibDir/objdump.txt" ) + } + if( disassemble ) + injected.execOps.exec { commandLine( "objdump", "--disassemble-all", dylib ); standardOutput = FileOutputStream( "$dylibDir/disassemble.txt" ) } + injected.execOps.exec { commandLine( "objdump", "--full-contents", dylib ); standardOutput = FileOutputStream( "$dylibDir/full-contents.txt" ) } + injected.execOps.exec { commandLine( "hexdump", dylib ); standardOutput = FileOutputStream( "$dylibDir/hexdump.txt" ) } +} +dump*/ diff --git a/flatlaf-natives/flatlaf-natives-macos/build.gradle.kts b/flatlaf-natives/flatlaf-natives-macos/build.gradle.kts index 5b542d3a..961121d8 100644 --- a/flatlaf-natives/flatlaf-natives-macos/build.gradle.kts +++ b/flatlaf-natives/flatlaf-natives-macos/build.gradle.kts @@ -43,6 +43,9 @@ var javaHome = System.getProperty( "java.home" ) if( javaHome.endsWith( "jre" ) ) javaHome += "/.." +interface InjectedExecOps { @get:Inject val execOps: ExecOperations } +val injected = project.objects.newInstance() + tasks { register( "build-natives" ) { group = "build" @@ -95,21 +98,21 @@ tasks { doLast { // sign shared library -// exec { commandLine( "codesign", "-s", "FormDev Software GmbH", "--timestamp", "${linkedFile.asFile.get()}" ) } +// injected.execOps.exec { commandLine( "codesign", "-s", "FormDev Software GmbH", "--timestamp", "${linkedFile.asFile.get()}" ) } // copy shared library to flatlaf-core resources copy { from( linkedFile ) into( nativesDir ) - rename( "libflatlaf-natives-macos.dylib", libraryName ) + rename( linkedFile.get().asFile.name, libraryName ) } /*dump val dylib = linkedFile.asFile.get() val dylibDir = dylib.parent - exec { commandLine( "size", dylib ) } - exec { commandLine( "size", "-m", dylib ) } - exec { + injected.execOps.exec { commandLine( "size", dylib ); standardOutput = FileOutputStream( "$dylibDir/size.txt" ) } + injected.execOps.exec { commandLine( "size", "-m", dylib ); standardOutput = FileOutputStream( "$dylibDir/size-m.txt" ) } + injected.execOps.exec { commandLine( "objdump", // commands "--archive-headers", @@ -127,8 +130,8 @@ tasks { dylib ) standardOutput = FileOutputStream( "$dylibDir/objdump.txt" ) } - exec { commandLine( "objdump", "--disassemble-all", dylib ); standardOutput = FileOutputStream( "$dylibDir/disassemble.txt" ) } - exec { commandLine( "objdump", "--full-contents", dylib ); standardOutput = FileOutputStream( "$dylibDir/full-contents.txt" ) } + injected.execOps.exec { commandLine( "objdump", "--disassemble-all", dylib ); standardOutput = FileOutputStream( "$dylibDir/disassemble.txt" ) } + injected.execOps.exec { commandLine( "objdump", "--full-contents", dylib ); standardOutput = FileOutputStream( "$dylibDir/full-contents.txt" ) } dump*/ } } diff --git a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts index e297703e..0a7eee0d 100644 --- a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts +++ b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts @@ -91,7 +91,7 @@ tasks { copy { from( linkedFile ) into( nativesDir ) - rename( "flatlaf-natives-windows.dll", libraryName ) + rename( linkedFile.get().asFile.name, libraryName ) } } }