Skip to content

Commit ad24d65

Browse files
committed
[Build] QOL for build scripts
1 parent e8ef911 commit ad24d65

File tree

7 files changed

+59
-89
lines changed

7 files changed

+59
-89
lines changed

buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy

Lines changed: 46 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ import com.badlogic.gdx.jnigen.*
44
import groovy.transform.CompileStatic
55
import org.gradle.api.DefaultTask
66
import org.gradle.api.file.CopySpec
7+
import org.gradle.api.tasks.Internal
78
import org.gradle.api.tasks.TaskAction
89

910
@CompileStatic
1011
class GenerateLibs extends DefaultTask {
11-
String description = 'Generates native libraries using classes under ":imgui-binding" and Dear ImGui itself from "imgui" submodule.'
12+
@Internal
13+
String group = 'build'
14+
@Internal
15+
String description = 'Generate imgui-java native binaries.'
1216

1317
private final String[] buildEnvs = System.getProperty('envs')?.split(',')
1418
private final boolean forWin32 = buildEnvs?.contains('win32')
@@ -29,11 +33,16 @@ class GenerateLibs extends DefaultTask {
2933
@TaskAction
3034
void generate() {
3135
println 'Generating Native Libraries...'
32-
println "Build environments: $buildEnvs"
33-
println "Local mode: $isLocal"
34-
println "With FreeType: $withFreeType"
36+
println "Build targets: $buildEnvs"
37+
println "Local: $isLocal"
38+
println "FreeType: $withFreeType"
3539
println '====================================='
3640

41+
if (!buildEnvs) {
42+
println 'No build targets. Task is cancelled.'
43+
return
44+
}
45+
3746
// Generate h/cpp files for JNI
3847
new NativeCodeGenerator().generate(sourceDir, classpath, jniDir)
3948

@@ -61,58 +70,33 @@ class GenerateLibs extends DefaultTask {
6170

6271
if (forWin32) {
6372
def win32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, false)
64-
65-
if (withFreeType) {
66-
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'
67-
win32.libraries += '-lfreetype -lbz2 -lssp'
68-
}
69-
73+
addFreeTypeIfEnabled(win32)
7074
buildTargets += win32
7175
}
7276
if (forWin64) {
7377
def win64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, true)
74-
75-
if (withFreeType) {
76-
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'
77-
win64.libraries += '-lfreetype -lbz2 -lssp'
78-
}
79-
78+
addFreeTypeIfEnabled(win64)
8079
buildTargets += win64
8180
}
8281

8382
if (forLinux32) {
8483
def linux32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, false)
85-
86-
if (withFreeType) {
87-
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'
88-
linux32.linkerFlags += ' -lfreetype'
89-
}
90-
84+
addFreeTypeIfEnabled(linux32)
9185
buildTargets += linux32
9286
}
9387
if (forLinux64) {
9488
def linux64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, true)
95-
96-
if (withFreeType) {
97-
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'
98-
linux64.linkerFlags += ' -lfreetype'
99-
}
100-
89+
addFreeTypeIfEnabled(linux64)
10190
buildTargets += linux64
10291
}
10392

10493
if (forMac64) {
10594
def minMacOsVersion = '10.15'
10695
def mac64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.MacOsX, true)
107-
mac64.cppFlags += ' -std=c++14 -stdlib=libc++'
96+
mac64.cppFlags += ' -std=c++14'
10897
mac64.cppFlags = mac64.cppFlags.replace('10.7', minMacOsVersion)
10998
mac64.linkerFlags = mac64.linkerFlags.replace('10.7', minMacOsVersion)
110-
111-
if (withFreeType) {
112-
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'
113-
mac64.linkerFlags += ' -lfreetype'
114-
}
115-
99+
addFreeTypeIfEnabled(mac64)
116100
buildTargets += mac64
117101
}
118102

@@ -121,20 +105,42 @@ class GenerateLibs extends DefaultTask {
121105
// Generate native libraries
122106
// Comment/uncomment lines with OS you need.
123107

108+
def commonParams = ['-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile'] as String[]
109+
124110
if (forWin32)
125-
BuildExecutor.executeAnt(jniDir + '/build-windows32.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile')
111+
BuildExecutor.executeAnt(jniDir + '/build-windows32.xml', commonParams)
126112
if (forWin64)
127-
BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile')
113+
BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', commonParams)
128114
if (forLinux32)
129-
BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile')
115+
BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', commonParams)
130116
if (forLinux64)
131-
BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile')
117+
BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', commonParams)
132118
if (forMac64)
133-
BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile')
119+
BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', commonParams)
134120

135121
BuildExecutor.executeAnt(jniDir + '/build.xml', '-v', 'pack-natives')
136122
}
137123

124+
void addFreeTypeIfEnabled(BuildTarget target) {
125+
if (!withFreeType) {
126+
return
127+
}
128+
129+
if (target.os == BuildTarget.TargetOs.Windows) {
130+
if (!target.is64Bit) {
131+
target.cppFlags += ' -fstack-protector'
132+
}
133+
target.libraries += '-lbz2 -lssp'
134+
}
135+
136+
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'
137+
target.libraries += ' -lfreetype'
138+
139+
if (target.os == BuildTarget.TargetOs.MacOsX) {
140+
target.cppFlags.replace('-I/usr/include/', '-I/usr/local/include/')
141+
}
142+
}
143+
138144
void enableDefine(String define) {
139145
project.file("$jniDir/imconfig.h").text += "#define $define"
140146
}

imgui-app/build.gradle

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,5 @@ jar {
3838
}
3939
}
4040

41-
task sourcesJar(type: Jar, dependsOn: classes) {
42-
archiveClassifier.set('sources')
43-
from sourceSets.main.allSource
44-
}
45-
46-
task javadocJar(type: Jar, dependsOn: javadoc) {
47-
archiveClassifier.set('javadoc')
48-
from javadoc.destinationDir
49-
}
50-
5141
apply from: "$rootDir/publish.gradle"
5242
configurePublishing('imgui-java-app', 'Application wrapper for Dear ImGui')

imgui-binding-natives/build.gradle

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,6 @@ plugins {
44
id 'signing'
55
}
66

7-
task sourcesJar(type: Jar, dependsOn: classes) {
8-
archiveClassifier.set('sources')
9-
from sourceSets.main.allSource
10-
}
11-
12-
task javadocJar(type: Jar, dependsOn: javadoc) {
13-
archiveClassifier.set('javadoc')
14-
from javadoc.destinationDir
15-
}
16-
177
def packageName = 'imgui-java-natives-linux'
188
def packageDesc = 'Native binaries for imgui-java binding for 64bit Linux'
199
def libName = 'libimgui-java64.so'
@@ -48,7 +38,7 @@ if (System.getProperty('freetype')) {
4838

4939
jar {
5040
from('../bin') {
51-
include "$libName" // it's ok
41+
include "$libName" // this is fine
5242
into 'io/imgui/java/native-bin/'
5343
}
5444
}

imgui-binding/build.gradle

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,8 @@ test {
1818
useJUnitPlatform()
1919
}
2020

21-
assemble.dependsOn clean
22-
task generateLibs(type: GenerateLibs, dependsOn: assemble)
23-
24-
task sourcesJar(type: Jar, dependsOn: classes) {
25-
archiveClassifier.set('sources')
26-
from sourceSets.main.allSource
27-
}
28-
29-
task javadocJar(type: Jar, dependsOn: javadoc) {
30-
archiveClassifier.set('javadoc')
31-
from javadoc.destinationDir
21+
tasks.register('generateLibs', GenerateLibs) {
22+
it.dependsOn assemble
3223
}
3324

3425
apply from: "$rootDir/publish.gradle"

imgui-lwjgl3/build.gradle

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
plugins {
22
id 'java'
33
id 'checkstyle'
4-
id 'com.jfrog.bintray'
54
id 'maven-publish'
65
id 'signing'
76
}
@@ -18,15 +17,5 @@ dependencies {
1817
implementation project(':imgui-binding')
1918
}
2019

21-
task sourcesJar(type: Jar, dependsOn: classes) {
22-
archiveClassifier.set('sources')
23-
from sourceSets.main.allSource
24-
}
25-
26-
task javadocJar(type: Jar, dependsOn: javadoc) {
27-
archiveClassifier.set('javadoc')
28-
from javadoc.destinationDir
29-
}
30-
3120
apply from: "$rootDir/publish.gradle"
3221
configurePublishing('imgui-java-lwjgl3', 'Backend LWJGL3 implementation for imgui-java')

publish.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
ext.configurePublishing = { packageName, packageDesc ->
2+
tasks.register('sourcesJar', Jar) {
3+
it.dependsOn classes
4+
it.archiveClassifier.set('sources')
5+
it.from sourceSets.main.allSource
6+
}
7+
tasks.register('javadocJar', Jar) {
8+
it.dependsOn javadoc
9+
it.archiveClassifier.set('javadoc')
10+
it.from javadoc.destinationDir
11+
}
212
publishing {
313
repositories {
414
maven {

settings.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
pluginManagement {
2-
plugins {
3-
id 'com.jfrog.bintray' version '1.8.5'
4-
}
5-
}
6-
71
rootProject.name = 'imgui-java'
82
include 'imgui-binding'
93
include 'imgui-lwjgl3'

0 commit comments

Comments
 (0)