Add parameter to allow generation of the Godot native shared libraries from the gradle build command

This commit is contained in:
Fredia Huya-Kouadio 2023-11-09 06:49:50 -08:00
parent d1381bbca2
commit 4628d0c7dc

View file

@ -173,10 +173,21 @@ task zipGradleBuild(type: Zip) {
destinationDirectory = file(binDir) destinationDirectory = file(binDir)
} }
/**
* Returns true if the scons build tasks responsible for generating the Godot native shared
* libraries should be excluded.
*/
def excludeSconsBuildTasks() {
return !isAndroidStudio() && !project.hasProperty("generateNativeLibs")
}
/**
* Generates the list of build tasks that should be excluded from the build process.\
*/
def templateExcludedBuildTask() { def templateExcludedBuildTask() {
// We exclude these gradle tasks so we can run the scons command manually. // We exclude these gradle tasks so we can run the scons command manually.
def excludedTasks = [] def excludedTasks = []
if (!isAndroidStudio()) { if (excludeSconsBuildTasks()) {
logger.lifecycle("Excluding Android studio build tasks") logger.lifecycle("Excluding Android studio build tasks")
for (String flavor : supportedFlavors) { for (String flavor : supportedFlavors) {
String[] supportedBuildTypes = supportedFlavorsBuildTypes[flavor] String[] supportedBuildTypes = supportedFlavorsBuildTypes[flavor]
@ -190,23 +201,42 @@ def templateExcludedBuildTask() {
return excludedTasks return excludedTasks
} }
def templateBuildTasks() { /**
* Generates the build tasks for the given flavor
* @param flavor Must be one of the supported flavors ('template' / 'editor')
*/
def generateBuildTasks(String flavor = "template") {
if (!supportedFlavors.contains(flavor)) {
throw new GradleException("Invalid build flavor: $flavor")
}
def tasks = [] def tasks = []
// Only build the apks and aar files for which we have native shared libraries. // Only build the apks and aar files for which we have native shared libraries unless we intend
for (String target : supportedFlavorsBuildTypes["template"]) { // to run the scons build tasks.
File targetLibs = new File("lib/libs/" + target) boolean excludeSconsBuildTasks = excludeSconsBuildTasks()
if (targetLibs != null boolean isTemplate = flavor == "template"
String libsDir = isTemplate ? "lib/libs/" : "lib/libs/tools/"
for (String target : supportedFlavorsBuildTypes[flavor]) {
File targetLibs = new File(libsDir + target)
if (!excludeSconsBuildTasks || (targetLibs != null
&& targetLibs.isDirectory() && targetLibs.isDirectory()
&& targetLibs.listFiles() != null && targetLibs.listFiles() != null
&& targetLibs.listFiles().length > 0) { && targetLibs.listFiles().length > 0)) {
String capitalizedTarget = target.capitalize() String capitalizedTarget = target.capitalize()
// Copy the generated aar library files to the build directory. if (isTemplate) {
tasks += "copy" + capitalizedTarget + "AARToAppModule" // Copy the generated aar library files to the build directory.
// Copy the generated aar library files to the bin directory. tasks += "copy${capitalizedTarget}AARToAppModule"
tasks += "copy" + capitalizedTarget + "AARToBin" // Copy the generated aar library files to the bin directory.
// Copy the prebuilt binary templates to the bin directory. tasks += "copy${capitalizedTarget}AARToBin"
tasks += "copy" + capitalizedTarget + "BinaryToBin" // Copy the prebuilt binary templates to the bin directory.
tasks += "copy${capitalizedTarget}BinaryToBin"
} else {
// Copy the generated editor apk to the bin directory.
tasks += "copyEditor${capitalizedTarget}ApkToBin"
// Copy the generated editor aab to the bin directory.
tasks += "copyEditor${capitalizedTarget}AabToBin"
}
} else { } else {
logger.lifecycle("No native shared libs for target $target. Skipping build.") logger.lifecycle("No native shared libs for target $target. Skipping build.")
} }
@ -265,27 +295,13 @@ task copyEditorDevAabToBin(type: Copy) {
/** /**
* Generate the Godot Editor Android apk. * Generate the Godot Editor Android apk.
* *
* Note: The Godot 'tools' shared libraries must have been generated (via scons) prior to running * Note: Unless the 'generateNativeLibs` argument is specified, the Godot 'tools' shared libraries
* this gradle task. The task will only build the apk(s) for which the shared libraries is * must have been generated (via scons) prior to running this gradle task.
* available. * The task will only build the apk(s) for which the shared libraries is available.
*/ */
task generateGodotEditor { task generateGodotEditor {
gradle.startParameter.excludedTaskNames += templateExcludedBuildTask() gradle.startParameter.excludedTaskNames += templateExcludedBuildTask()
dependsOn = generateBuildTasks("editor")
def tasks = []
for (String target : supportedFlavorsBuildTypes["editor"]) {
File targetLibs = new File("lib/libs/tools/" + target)
if (targetLibs != null
&& targetLibs.isDirectory()
&& targetLibs.listFiles() != null
&& targetLibs.listFiles().length > 0) {
tasks += "copyEditor${target.capitalize()}ApkToBin"
tasks += "copyEditor${target.capitalize()}AabToBin"
}
}
dependsOn = tasks
} }
/** /**
@ -293,7 +309,7 @@ task generateGodotEditor {
*/ */
task generateGodotTemplates { task generateGodotTemplates {
gradle.startParameter.excludedTaskNames += templateExcludedBuildTask() gradle.startParameter.excludedTaskNames += templateExcludedBuildTask()
dependsOn = templateBuildTasks() dependsOn = generateBuildTasks("template")
finalizedBy 'zipGradleBuild' finalizedBy 'zipGradleBuild'
} }
@ -306,7 +322,7 @@ task generateDevTemplate {
gradle.startParameter.projectProperties += [doNotStrip: true] gradle.startParameter.projectProperties += [doNotStrip: true]
gradle.startParameter.excludedTaskNames += templateExcludedBuildTask() gradle.startParameter.excludedTaskNames += templateExcludedBuildTask()
dependsOn = templateBuildTasks() dependsOn = generateBuildTasks("template")
finalizedBy 'zipGradleBuild' finalizedBy 'zipGradleBuild'
} }