@@ -4,11 +4,15 @@ import com.badlogic.gdx.jnigen.*
4
4
import groovy.transform.CompileStatic
5
5
import org.gradle.api.DefaultTask
6
6
import org.gradle.api.file.CopySpec
7
+ import org.gradle.api.tasks.Internal
7
8
import org.gradle.api.tasks.TaskAction
8
9
9
10
@CompileStatic
10
11
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.'
12
16
13
17
private final String [] buildEnvs = System . getProperty(' envs' )?. split(' ,' )
14
18
private final boolean forWin32 = buildEnvs?. contains(' win32' )
@@ -29,11 +33,16 @@ class GenerateLibs extends DefaultTask {
29
33
@TaskAction
30
34
void generate () {
31
35
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 "
35
39
println ' ====================================='
36
40
41
+ if (! buildEnvs) {
42
+ println ' No build targets. Task is cancelled.'
43
+ return
44
+ }
45
+
37
46
// Generate h/cpp files for JNI
38
47
new NativeCodeGenerator (). generate(sourceDir, classpath, jniDir)
39
48
@@ -61,58 +70,33 @@ class GenerateLibs extends DefaultTask {
61
70
62
71
if (forWin32) {
63
72
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)
70
74
buildTargets + = win32
71
75
}
72
76
if (forWin64) {
73
77
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)
80
79
buildTargets + = win64
81
80
}
82
81
83
82
if (forLinux32) {
84
83
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)
91
85
buildTargets + = linux32
92
86
}
93
87
if (forLinux64) {
94
88
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)
101
90
buildTargets + = linux64
102
91
}
103
92
104
93
if (forMac64) {
105
94
def minMacOsVersion = ' 10.15'
106
95
def mac64 = BuildTarget . newDefaultTarget(BuildTarget.TargetOs.MacOsX , true )
107
- mac64. cppFlags + = ' -std=c++14 -stdlib=libc++ '
96
+ mac64. cppFlags + = ' -std=c++14'
108
97
mac64. cppFlags = mac64. cppFlags. replace(' 10.7' , minMacOsVersion)
109
98
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)
116
100
buildTargets + = mac64
117
101
}
118
102
@@ -121,20 +105,42 @@ class GenerateLibs extends DefaultTask {
121
105
// Generate native libraries
122
106
// Comment/uncomment lines with OS you need.
123
107
108
+ def commonParams = [' -v' , ' -Dhas-compiler=true' , ' -Drelease=true' , ' clean' , ' postcompile' ] as String []
109
+
124
110
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 )
126
112
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 )
128
114
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 )
130
116
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 )
132
118
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 )
134
120
135
121
BuildExecutor . executeAnt(jniDir + ' /build.xml' , ' -v' , ' pack-natives' )
136
122
}
137
123
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
+
138
144
void enableDefine (String define ) {
139
145
project. file(" $jniDir /imconfig.h" ). text + = " #define $define "
140
146
}
0 commit comments