|
|
|
String jmeBulletNativeProjectPath = project(":jme3-bullet-native").projectDir
|
|
|
|
|
|
|
|
String localUnzipPath = jmeBulletNativeProjectPath
|
|
|
|
String localZipFile = jmeBulletNativeProjectPath + File.separator + bulletZipFile
|
|
|
|
String localZipFolder = jmeBulletNativeProjectPath + File.separator + bulletFolder
|
|
|
|
String bulletSrcPath = localZipFolder + File.separator + 'src'
|
|
|
|
|
|
|
|
String jmeAndroidPath = 'src/native/android'
|
|
|
|
String jmeCppPath = jmeBulletNativeProjectPath + '/src/native/cpp'
|
|
|
|
|
|
|
|
//Working directories for the ndk build.
|
|
|
|
String ndkWorkingPath = "${buildDir}" + '/bullet'
|
|
|
|
String jniPath = ndkWorkingPath + '/jni'
|
|
|
|
String ndkOutputPath = ndkWorkingPath + '/libs'
|
|
|
|
|
|
|
|
//Pre-compiled libs directory
|
|
|
|
String bulletPreCompiledLibsDir = 'libs'
|
|
|
|
|
|
|
|
if (!hasProperty('mainClass')) {
|
|
|
|
ext.mainClass = ''
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
compile project(':jme3-bullet')
|
|
|
|
}
|
|
|
|
|
|
|
|
// Java source sets for IDE access and source jar bundling / mavenization
|
|
|
|
sourceSets {
|
|
|
|
main {
|
|
|
|
java {
|
|
|
|
srcDir jmeCppPath
|
|
|
|
srcDir jmeAndroidPath
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Download bullet if not available
|
|
|
|
task downloadBullet(type: MyDownload) {
|
|
|
|
sourceUrl = bulletUrl
|
|
|
|
target = file(localZipFile)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Unzip bullet if not available
|
|
|
|
task unzipBullet(type: Copy) {
|
|
|
|
from zipTree(localZipFile)
|
|
|
|
into file(localUnzipPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
unzipBullet.dependsOn {
|
|
|
|
if (!file(localZipFile).exists()) {
|
|
|
|
downloadBullet
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy Bullet files to jni directory
|
|
|
|
task copyBullet(type: Copy) {
|
|
|
|
from file(bulletSrcPath)
|
|
|
|
into file(jniPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
copyBullet.dependsOn {
|
|
|
|
if (!file(localZipFolder).isDirectory()) {
|
|
|
|
unzipBullet
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy jME cpp native files to jni directory
|
|
|
|
task copyJmeCpp(type: Copy) {
|
|
|
|
from file(jmeCppPath)
|
|
|
|
into file(jniPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy jME android native files to jni directory
|
|
|
|
task copyJmeAndroid(type: Copy) {
|
|
|
|
from file(jmeAndroidPath)
|
|
|
|
into file(jniPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
task buildBulletNativeLib(type: Exec, dependsOn: [copyJmeAndroid, ':jme3-bullet:compileJava', copyJmeCpp, copyBullet]) {
|
|
|
|
// args 'TARGET_PLATFORM=android-9'
|
|
|
|
// println "buildBulletNativeLib ndkWorkingPath: " + ndkWorkingPath
|
|
|
|
// println "buildBulletNativeLib rootProject.ndkCommandPath: " + rootProject.ndkCommandPath
|
|
|
|
workingDir ndkWorkingPath
|
|
|
|
executable rootProject.ndkCommandPath
|
|
|
|
args "-j" + Runtime.runtime.availableProcessors()
|
|
|
|
}
|
|
|
|
|
|
|
|
/* The following two tasks: We store a prebuilt version in the repository, so nobody has to build
|
|
|
|
* natives in order to build the engine. When building these natives however, the prebuilt libraries
|
|
|
|
* can be updated (which is what the CI does). That's what the following two tasks do
|
|
|
|
*/
|
|
|
|
|
|
|
|
task updatePreCompiledBulletLibs(type: Copy, dependsOn: buildBulletNativeLib) {
|
|
|
|
from file(ndkOutputPath)
|
|
|
|
into file(bulletPreCompiledLibsDir)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy pre-compiled libs to build directory (when not building new libs)
|
|
|
|
task copyPreCompiledBulletLibs(type: Copy) {
|
|
|
|
from file(bulletPreCompiledLibsDir)
|
|
|
|
into file(ndkOutputPath)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ndkExists is a boolean from the build.gradle in the root project
|
|
|
|
// buildNativeProjects is a string set to "true"
|
|
|
|
if (ndkExists && buildNativeProjects == "true") {
|
|
|
|
// build native libs and update stored pre-compiled libs to commit
|
|
|
|
compileJava.dependsOn { updatePreCompiledBulletLibs }
|
|
|
|
} else {
|
|
|
|
// use pre-compiled native libs (not building new ones)
|
|
|
|
compileJava.dependsOn { copyPreCompiledBulletLibs }
|
|
|
|
}
|
|
|
|
|
|
|
|
jar.into("lib") { from ndkOutputPath }
|
|
|
|
|
|
|
|
|
|
|
|
// Helper class to wrap ant download task
|
|
|
|
class MyDownload extends DefaultTask {
|
|
|
|
@Input
|
|
|
|
String sourceUrl
|
|
|
|
|
|
|
|
@OutputFile
|
|
|
|
File target
|
|
|
|
|
|
|
|
@TaskAction
|
|
|
|
void download() {
|
|
|
|
ant.get(src: sourceUrl, dest: target)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|