blob: 1805fc52bec610b9e9cc5abc4589621516c6aeb9 [file] [log] [blame]
// Top-level build file where you can add configuration options common to all sub-projects/modules.
import java.io.File
import java.nio.file.Paths
import org.apache.tools.ant.taskdefs.condition.Os
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
def setupSkiaLibraryBuild(project, appVariants, appName) {
appVariants.all{ variant ->
def buildNativeLib = project.task("${variant.name}_BuildSkiaLib", type:Exec) {
workingDir '../../../..' // top-level skia directory
final String cmd = constructBuildCommand(project, variant, appName)
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine "cmd", "/c", cmd
} else {
commandLine cmd.split()
}
}
buildNativeLib.onlyIf { !project.hasProperty("suppressNativeBuild") }
def copyNativeLib = project.task("${variant.name}_CopySkiaLib", type:Copy) {
def fromDir = getVariantOutDir(project, variant).skiaOut
def intoDir = getVariantOutDir(project, variant).androidOut
from fromDir
into intoDir
include "${appName}.so"
}
TaskCollection<Task> compileTask = project.tasks.matching {
// println(it.name)
it.name.toLowerCase().contains("compile" + variant.name.toLowerCase()) &&
it.name.toLowerCase().endsWith("ndk")
}
compileTask.findAll()*.dependsOn copyNativeLib
copyNativeLib.dependsOn buildNativeLib
}
}
def getLocalProperties() {
Properties properties = new Properties()
File propFile = project.rootProject.file('local.properties')
if (propFile.canRead()) {
properties.load(propFile.newDataInputStream())
}
propFile = project.rootProject.file('gradle.properties')
if (propFile.canRead()) {
properties.load(propFile.newDataInputStream())
}
return properties
}
def getVariantOutDir(project, variant) {
String variantPrefix = null
String androidLibDir = null
if (variant.name.startsWith("arm64")) {
variantPrefix = "arm64"
androidLibDir = "arm64-v8a"
} else if (variant.name.startsWith("arm")) {
variantPrefix = "arm"
androidLibDir = "armeabi-v7a"
} else if (variant.name.startsWith("x64")) {
variantPrefix = "x64"
androidLibDir = "x86_64"
} else if (variant.name.startsWith("x86")) {
variantPrefix = "x86"
androidLibDir = "x86"
}
String skiaOutDir = null
String propName = "${variantPrefix}.out.dir"
if (project.hasProperty(propName)) {
skiaOutDir = project.getProperties().getAt(propName)
} else {
skiaOutDir = getLocalProperties().getProperty(propName, "missing_variant_out")
}
return [skiaOut: skiaOutDir,
androidOut: "src/main/libs/${androidLibDir}"]
}
def constructBuildCommand(project, variant, appName) {
String depotToolsDir = null
for (String entry : System.getenv("PATH").split(File.pathSeparator)) {
if (Paths.get(entry).endsWith("depot_tools")) {
depotToolsDir = entry;
break;
}
}
if (depotToolsDir == null) {
depotToolsDir = getLocalProperties().getProperty('depot_tools.dir', null)
}
if (depotToolsDir == null) {
throw GradleScriptException("Depot Tools not found! Please update your path to include" +
" depot_tools or define depot_tools.dir in local.properties")
}
String ninja = Paths.get(depotToolsDir, "ninja")
String out_dir = getVariantOutDir(project, variant).skiaOut
return "$ninja -C $out_dir $appName"
}