blob: 42dfa73ef8a932486df68f991eed2d4a11413571 [file] [log] [blame]
import org.gradle.internal.logging.text.StyledTextOutput;
import org.gradle.internal.logging.text.StyledTextOutputFactory;
import static org.gradle.internal.logging.text.StyledTextOutput.Style;
defaultTasks 'clean', 'archiveZip'
def getAndroidNDKPath() {
return System.getenv("ANDROID_NDK")
}
def getAndroidSDKPath() {
return System.getenv("ANDROID_HOME")
}
ext.tempFolder = '.temp'
ext.buildFolder = 'build'
ext.androidNDK = getAndroidNDKPath()
ext.androidNDKVersion = "26"
ext.androidSDK = getAndroidSDKPath()
if (ext.androidSDK == null) {
throw new GradleException('Must set ANDROID_HOME')
}
if (ext.androidNDK == null) {
ext.androidNDK = ext.androidSDK + '/ndk-bundle'
if (!file(ext.androidNDK).exists())
throw new GradleException('No NDK found in SDK: must set ANDROID_NDK')
}
def findCMake() {
def cmake = System.getenv("CMAKE");
if (cmake != null) {
return cmake;
}
def cmakes = fileTree(project.property('androidSDK')).matching { include 'cmake/*/bin/cmake' }
if (cmakes.size() == 0) {
throw new GradleException('No cmake found in ' + project.property('androidSDK') + 'cmake')
}
return cmakes.last();
}
ext.cmake = findCMake()
println "Build folder: $buildFolder"
println "Android SDK folder: $androidSDK"
println "Android NDK folder: $androidNDK"
println "Using cmake from: $cmake"
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
def cmake(projectFolder, cmakeFolder, arch, ndkVersion) {
exec {
workingDir cmakeFolder
commandLine "$cmake",
"$projectFolder",
"-DCMAKE_BUILD_TYPE=Release ",
"-DANDROID_PLATFORM=android-" + ndkVersion,
"-DANDROID_NDK=" + project.property('androidNDK') + " ",
"-DANDROID_STL=c++_static ",
"-DANDROID_ABI=" + arch,
"-DCMAKE_CXX_FLAGS= ",
"-DCMAKE_TOOLCHAIN_FILE=" + project.property('androidNDK') + "/build/cmake/android.toolchain.cmake",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=./"
}
}
def buildGameSDK(arch, ndkVersion) {
def cmakeFolder = project.property('tempFolder') + '/' + arch + '/.cmake'
def buildFolder = project.property('buildFolder') + '/libs/' + arch
mkdir cmakeFolder
mkdir buildFolder
exec {
commandLine "$cmake", '--version'
}
cmake("$projectDir/src/swappy/", cmakeFolder, arch, ndkVersion)
exec {
workingDir cmakeFolder
commandLine "make"
}
copy {
from file(cmakeFolder + "/libswappy_static.a")
into file(buildFolder + "/libswappy_static.a")
}
copy {
from file(cmakeFolder + "/libswappy.so")
into file(buildFolder + "/libswappy.so")
}
}
task clean(type: Delete) {
delete project.property('tempFolder')
delete project.property('buildFolder')
}
task buildGameSDKJavaLibs() {
def buildFolder = project.property('buildFolder') + '/aar'
def outputFolder = 'src/swappy/build/outputs/aar'
dependsOn ':swappy:assembleRelease'
doLast {
copy {
from file(outputFolder + "/swappy-release.aar")
into file(buildFolder + "/swappy-release.aar")
}
}
}
task build(dependsOn: 'buildGameSDKJavaLibs') {
def includeFolder = project.property('buildFolder') + '/include'
doFirst {
delete includeFolder
mkdir includeFolder
}
def ndkVersion = project.property('androidNDKVersion')
buildGameSDK("armeabi-v7a", ndkVersion)
buildGameSDK("arm64-v8a", ndkVersion)
doLast {
copy {
from "$projectDir/include"
into includeFolder
}
}
}
task archiveZip(type: Zip, dependsOn: 'build') {
baseName = project.property('buildFolder') + '/gamesdk'
from fileTree(project.property('buildFolder'))
exclude "*.zip"
into 'gamesdk'
doLast {
def out = services.get(StyledTextOutputFactory).create("ouput")
out.style(Style.Identifier).text('\nGameSDK zip is in ')
.style(Style.ProgressStatus)
.println(project.property('buildFolder') + '/gamesdk.zip' );
}
}