From ad24d65c86b888b7c2f051f6bd189201cc4c860e Mon Sep 17 00:00:00 2001 From: SpaiR Date: Sat, 10 Apr 2021 14:24:52 +0300 Subject: [PATCH] [Build] QOL for build scripts --- .../groovy/imgui/generate/GenerateLibs.groovy | 86 ++++++++++--------- imgui-app/build.gradle | 10 --- imgui-binding-natives/build.gradle | 12 +-- imgui-binding/build.gradle | 13 +-- imgui-lwjgl3/build.gradle | 11 --- publish.gradle | 10 +++ settings.gradle | 6 -- 7 files changed, 59 insertions(+), 89 deletions(-) diff --git a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy index d692909..a87f327 100644 --- a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy +++ b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy @@ -4,11 +4,15 @@ import com.badlogic.gdx.jnigen.* import groovy.transform.CompileStatic import org.gradle.api.DefaultTask import org.gradle.api.file.CopySpec +import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction @CompileStatic class GenerateLibs extends DefaultTask { - String description = 'Generates native libraries using classes under ":imgui-binding" and Dear ImGui itself from "imgui" submodule.' + @Internal + String group = 'build' + @Internal + String description = 'Generate imgui-java native binaries.' private final String[] buildEnvs = System.getProperty('envs')?.split(',') private final boolean forWin32 = buildEnvs?.contains('win32') @@ -29,11 +33,16 @@ class GenerateLibs extends DefaultTask { @TaskAction void generate() { println 'Generating Native Libraries...' - println "Build environments: $buildEnvs" - println "Local mode: $isLocal" - println "With FreeType: $withFreeType" + println "Build targets: $buildEnvs" + println "Local: $isLocal" + println "FreeType: $withFreeType" println '=====================================' + if (!buildEnvs) { + println 'No build targets. Task is cancelled.' + return + } + // Generate h/cpp files for JNI new NativeCodeGenerator().generate(sourceDir, classpath, jniDir) @@ -61,58 +70,33 @@ class GenerateLibs extends DefaultTask { if (forWin32) { def win32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, false) - - if (withFreeType) { - win32.cppFlags += ' -fstack-protector -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include' - win32.libraries += '-lfreetype -lbz2 -lssp' - } - + addFreeTypeIfEnabled(win32) buildTargets += win32 } if (forWin64) { def win64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, true) - - if (withFreeType) { - win64.cppFlags += ' -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include' - win64.libraries += '-lfreetype -lbz2 -lssp' - } - + addFreeTypeIfEnabled(win64) buildTargets += win64 } if (forLinux32) { def linux32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, false) - - if (withFreeType) { - linux32.cppFlags += ' -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include' - linux32.linkerFlags += ' -lfreetype' - } - + addFreeTypeIfEnabled(linux32) buildTargets += linux32 } if (forLinux64) { def linux64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, true) - - if (withFreeType) { - linux64.cppFlags += ' -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include' - linux64.linkerFlags += ' -lfreetype' - } - + addFreeTypeIfEnabled(linux64) buildTargets += linux64 } if (forMac64) { def minMacOsVersion = '10.15' def mac64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.MacOsX, true) - mac64.cppFlags += ' -std=c++14 -stdlib=libc++' + mac64.cppFlags += ' -std=c++14' mac64.cppFlags = mac64.cppFlags.replace('10.7', minMacOsVersion) mac64.linkerFlags = mac64.linkerFlags.replace('10.7', minMacOsVersion) - - if (withFreeType) { - mac64.cppFlags += ' -I/usr/local/include/freetype2 -I/usr/local/include/libpng16 -I/usr/local/include/harfbuzz -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include' - mac64.linkerFlags += ' -lfreetype' - } - + addFreeTypeIfEnabled(mac64) buildTargets += mac64 } @@ -121,20 +105,42 @@ class GenerateLibs extends DefaultTask { // Generate native libraries // Comment/uncomment lines with OS you need. + def commonParams = ['-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile'] as String[] + if (forWin32) - BuildExecutor.executeAnt(jniDir + '/build-windows32.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-windows32.xml', commonParams) if (forWin64) - BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', commonParams) if (forLinux32) - BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', commonParams) if (forLinux64) - BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', commonParams) if (forMac64) - BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', commonParams) BuildExecutor.executeAnt(jniDir + '/build.xml', '-v', 'pack-natives') } + void addFreeTypeIfEnabled(BuildTarget target) { + if (!withFreeType) { + return + } + + if (target.os == BuildTarget.TargetOs.Windows) { + if (!target.is64Bit) { + target.cppFlags += ' -fstack-protector' + } + target.libraries += '-lbz2 -lssp' + } + + target.cppFlags += ' -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include' + target.libraries += ' -lfreetype' + + if (target.os == BuildTarget.TargetOs.MacOsX) { + target.cppFlags.replace('-I/usr/include/', '-I/usr/local/include/') + } + } + void enableDefine(String define) { project.file("$jniDir/imconfig.h").text += "#define $define" } diff --git a/imgui-app/build.gradle b/imgui-app/build.gradle index 7b460b4..73d1df3 100644 --- a/imgui-app/build.gradle +++ b/imgui-app/build.gradle @@ -38,15 +38,5 @@ jar { } } -task sourcesJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('sources') - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set('javadoc') - from javadoc.destinationDir -} - apply from: "$rootDir/publish.gradle" configurePublishing('imgui-java-app', 'Application wrapper for Dear ImGui') diff --git a/imgui-binding-natives/build.gradle b/imgui-binding-natives/build.gradle index 0f2b31e..a04f3ec 100644 --- a/imgui-binding-natives/build.gradle +++ b/imgui-binding-natives/build.gradle @@ -4,16 +4,6 @@ plugins { id 'signing' } -task sourcesJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('sources') - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set('javadoc') - from javadoc.destinationDir -} - def packageName = 'imgui-java-natives-linux' def packageDesc = 'Native binaries for imgui-java binding for 64bit Linux' def libName = 'libimgui-java64.so' @@ -48,7 +38,7 @@ if (System.getProperty('freetype')) { jar { from('../bin') { - include "$libName" // it's ok + include "$libName" // this is fine into 'io/imgui/java/native-bin/' } } diff --git a/imgui-binding/build.gradle b/imgui-binding/build.gradle index 82251fe..340e2eb 100644 --- a/imgui-binding/build.gradle +++ b/imgui-binding/build.gradle @@ -18,17 +18,8 @@ test { useJUnitPlatform() } -assemble.dependsOn clean -task generateLibs(type: GenerateLibs, dependsOn: assemble) - -task sourcesJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('sources') - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set('javadoc') - from javadoc.destinationDir +tasks.register('generateLibs', GenerateLibs) { + it.dependsOn assemble } apply from: "$rootDir/publish.gradle" diff --git a/imgui-lwjgl3/build.gradle b/imgui-lwjgl3/build.gradle index ba222e0..c638e3a 100644 --- a/imgui-lwjgl3/build.gradle +++ b/imgui-lwjgl3/build.gradle @@ -1,7 +1,6 @@ plugins { id 'java' id 'checkstyle' - id 'com.jfrog.bintray' id 'maven-publish' id 'signing' } @@ -18,15 +17,5 @@ dependencies { implementation project(':imgui-binding') } -task sourcesJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('sources') - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set('javadoc') - from javadoc.destinationDir -} - apply from: "$rootDir/publish.gradle" configurePublishing('imgui-java-lwjgl3', 'Backend LWJGL3 implementation for imgui-java') diff --git a/publish.gradle b/publish.gradle index 15ebb4d..a78c847 100644 --- a/publish.gradle +++ b/publish.gradle @@ -1,4 +1,14 @@ ext.configurePublishing = { packageName, packageDesc -> + tasks.register('sourcesJar', Jar) { + it.dependsOn classes + it.archiveClassifier.set('sources') + it.from sourceSets.main.allSource + } + tasks.register('javadocJar', Jar) { + it.dependsOn javadoc + it.archiveClassifier.set('javadoc') + it.from javadoc.destinationDir + } publishing { repositories { maven { diff --git a/settings.gradle b/settings.gradle index daad188..6640a25 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,9 +1,3 @@ -pluginManagement { - plugins { - id 'com.jfrog.bintray' version '1.8.5' - } -} - rootProject.name = 'imgui-java' include 'imgui-binding' include 'imgui-lwjgl3'