[Build] Move sourceCompatibility option to the root build file
This commit is contained in:
1 parent
a4dd33e421
commit
255f2e2286
5 files changed
+7
-8
No files matched your search
@@ -0,0 +1,131 @@
|
||||
package tool.generator
|
||||
|
||||
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 {
|
||||
@Internal
|
||||
String group = 'build'
|
||||
@Internal
|
||||
String description = 'Generate imgui-java native binaries.'
|
||||
|
||||
private final String[] buildEnvs = System.getProperty('envs')?.split(',')
|
||||
private final boolean forWindows = buildEnvs?.contains('win')
|
||||
private final boolean forLinux = buildEnvs?.contains('linux')
|
||||
private final boolean forMac = buildEnvs?.contains('mac')
|
||||
|
||||
private final boolean isLocal = System.properties.containsKey('local')
|
||||
private final boolean withFreeType = Boolean.valueOf(System.properties.getProperty('freetype', 'false'))
|
||||
|
||||
private final String sourceDir = project.file('src/main/java')
|
||||
private final String classpath = project.file('build/classes/java/main')
|
||||
private final String jniDir = (isLocal ? project.buildDir.path : '/tmp/imgui') + '/jni'
|
||||
private final String tmpFolder = (isLocal ? project.buildDir.path : '/tmp/imgui') + '/tmp'
|
||||
private final String libsFolder = 'libsNative'
|
||||
|
||||
@TaskAction
|
||||
void generate() {
|
||||
println 'Generating Native Libraries...'
|
||||
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)
|
||||
|
||||
// Copy ImGui h/cpp files
|
||||
project.copy { CopySpec spec ->
|
||||
['include/imgui', 'include/imnodes', 'include/imgui-node-editor', 'include/imguizmo', 'include/implot'].each {
|
||||
spec.from(project.rootProject.file(it)) { CopySpec s -> s.include('*.h', '*.cpp', '*.inl') }
|
||||
}
|
||||
spec.from(project.rootProject.file('imgui-binding/src/main/native'))
|
||||
spec.into(jniDir)
|
||||
}
|
||||
|
||||
if (withFreeType) {
|
||||
project.copy { CopySpec spec ->
|
||||
spec.from(project.rootProject.file('include/imgui/misc/freetype')) { CopySpec it -> it.include('*.h', '*.cpp') }
|
||||
spec.into("$jniDir/misc/freetype")
|
||||
}
|
||||
|
||||
enableDefine('IMGUI_ENABLE_FREETYPE')
|
||||
}
|
||||
|
||||
// Generate platform dependant ant configs and header files
|
||||
def buildConfig = new BuildConfig('imgui-java', tmpFolder, libsFolder, jniDir)
|
||||
def buildTargets = [] as BuildTarget[]
|
||||
|
||||
if (forWindows) {
|
||||
def win64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, true)
|
||||
addFreeTypeIfEnabled(win64)
|
||||
buildTargets += win64
|
||||
}
|
||||
|
||||
if (forLinux) {
|
||||
def linux64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, true)
|
||||
addFreeTypeIfEnabled(linux64)
|
||||
buildTargets += linux64
|
||||
}
|
||||
|
||||
if (forMac) {
|
||||
def minMacOsVersion = '10.15'
|
||||
def mac64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.MacOsX, true)
|
||||
mac64.cppFlags += ' -std=c++14'
|
||||
mac64.cppFlags = mac64.cppFlags.replace('10.7', minMacOsVersion)
|
||||
mac64.linkerFlags = mac64.linkerFlags.replace('10.7', minMacOsVersion)
|
||||
addFreeTypeIfEnabled(mac64)
|
||||
buildTargets += mac64
|
||||
}
|
||||
|
||||
new AntScriptGenerator().generate(buildConfig, buildTargets)
|
||||
|
||||
// Generate native libraries
|
||||
// Comment/uncomment lines with OS you need.
|
||||
|
||||
def commonParams = ['-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile'] as String[]
|
||||
|
||||
if (forWindows)
|
||||
BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', commonParams)
|
||||
if (forLinux)
|
||||
BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', commonParams)
|
||||
if (forMac)
|
||||
BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', commonParams)
|
||||
|
||||
BuildExecutor.executeAnt(jniDir + '/build.xml', '-v', 'pack-natives')
|
||||
}
|
||||
|
||||
void addFreeTypeIfEnabled(BuildTarget target) {
|
||||
if (!withFreeType) {
|
||||
return
|
||||
}
|
||||
|
||||
switch (target.os) {
|
||||
case BuildTarget.TargetOs.Windows:
|
||||
target.cppFlags += ' -I/usr/x86_64-w64-mingw32/include/freetype2'
|
||||
break
|
||||
case BuildTarget.TargetOs.Linux:
|
||||
target.cppFlags += ' -I/usr/include/freetype2'
|
||||
break
|
||||
case BuildTarget.TargetOs.MacOsX:
|
||||
target.cppFlags += ' -I/usr/local/include/freetype2'
|
||||
break
|
||||
}
|
||||
|
||||
target.libraries += ' -lfreetype'
|
||||
}
|
||||
|
||||
void enableDefine(String define) {
|
||||
project.file("$jniDir/imconfig.h").text += "#define $define"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user