Urho3D/android/urho3d-lib/build.gradle.kts
2021-07-17 16:43:46 +00:00

238 lines
8.3 KiB
Plaintext

//
// Copyright (c) 2008-2021 the Urho3D project.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import org.gradle.internal.io.NullOutputStream
import org.gradle.internal.os.OperatingSystem
plugins {
id("com.android.library")
id("com.jfrog.bintray")
kotlin("android")
kotlin("android.extensions")
`maven-publish`
}
val kotlinVersion: String by ext
val ndkSideBySideVersion: String by ext
val cmakeVersion: String by ext
val buildStagingDir: String by ext
android {
ndkVersion = ndkSideBySideVersion
compileSdkVersion(30)
defaultConfig {
minSdkVersion(18)
targetSdkVersion(30)
versionCode = 1
versionName = project.version.toString()
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
arguments.apply {
System.getenv("ANDROID_CCACHE")?.let { add("-D ANDROID_CCACHE=$it") }
// Pass along matching env-vars as CMake build options
addAll(project.file("../../script/.build-options")
.readLines()
.mapNotNull { variable -> System.getenv(variable)?.let { "-D $variable=$it" } }
)
}
targets.add("Urho3D")
}
}
splits {
abi {
isEnable = project.hasProperty("ANDROID_ABI")
reset()
include(
*(project.findProperty("ANDROID_ABI") as String? ?: "")
.split(',')
.toTypedArray()
)
}
}
}
buildTypes {
named("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
externalNativeBuild {
cmake {
version = cmakeVersion
path = project.file("../../CMakeLists.txt")
setBuildStagingDirectory(buildStagingDir)
}
}
sourceSets {
named("main") {
java.srcDir("../../Source/ThirdParty/SDL/android-project/app/src/main/java")
}
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
implementation("com.getkeepsafe.relinker:relinker:1.4.1")
testImplementation("junit:junit:4.13.1")
androidTestImplementation("androidx.test:runner:1.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0")
}
android.libraryVariants.whenObjectAdded {
val config = name
packageLibraryProvider.get().apply {
// Customize bundle task to also zip the Urho3D headers and libraries
File(android.externalNativeBuild.cmake.buildStagingDirectory, "cmake/$config").list()?.forEach { abi ->
listOf("include", "lib").forEach {
from(File(android.externalNativeBuild.cmake.buildStagingDirectory, "cmake/$config/$abi/$it")) {
into("urho3d/$config/$abi/$it")
}
}
}
}
}
tasks {
register<Delete>("cleanAll") {
dependsOn("clean")
delete = setOf(android.externalNativeBuild.cmake.buildStagingDirectory)
}
register<Jar>("sourcesJar") {
archiveClassifier.set("sources")
from(android.sourceSets.getByName("main").java.srcDirs)
}
register<Zip>("documentationZip") {
archiveClassifier.set("documentation")
dependsOn("makeDoc")
}
register<Exec>("makeDoc") {
// Ignore the exit status on Windows host system because Doxygen may not return exit status correctly on Windows
isIgnoreExitValue = OperatingSystem.current().isWindows
standardOutput = NullOutputStream.INSTANCE
args("--build", ".", "--target", "doc")
dependsOn("makeDocConfigurer")
}
register<Task>("makeDocConfigurer") {
dependsOn("generateJsonModelRelease")
doLast {
val abi = File(android.externalNativeBuild.cmake.buildStagingDirectory, "cmake/release").list()!!.first()
val buildTree = File(android.externalNativeBuild.cmake.buildStagingDirectory, "cmake/release/$abi")
named<Exec>("makeDoc") {
// This is a hack - expect the first line to contain the path to the CMake executable
executable = File(buildTree, "build_command.txt").readLines().first().split(":").last().trim()
workingDir = buildTree
}
named<Zip>("documentationZip") {
from(File(buildTree, "Docs/html")) {
into("docs")
}
}
}
}
}
publishing {
publications {
android.buildTypes.forEach {
val config = it.name
register<MavenPublication>("Urho${config.capitalize()}") {
configure(config)
}
}
}
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/urho3d/Urho3D")
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
bintray {
user = System.getenv("BINTRAY_USER")
key = System.getenv("BINTRAY_KEY")
publish = true
override = true
setPublications("UrhoRelease", "UrhoDebug")
pkg.apply {
repo = "maven"
name = project.name
setLicenses("MIT")
vcsUrl = "https://github.com/urho3d/Urho3D.git"
userOrg = "urho3d"
setLabels("android", "game-development", "game-engine", "open-source", "urho3d")
websiteUrl = "https://urho3d.io/"
issueTrackerUrl = "https://github.com/urho3d/Urho3D/issues"
githubRepo = "urho3d/Urho3D"
publicDownloadNumbers = true
desc = project.description
version.apply {
name = project.version.toString()
desc = project.description
}
}
}
fun MavenPublication.configure(config: String) {
val libType = System.getenv("URHO3D_LIB_TYPE")?.toLowerCase() ?: "static"
groupId = project.group.toString()
artifactId = "${project.name}-$libType${if (config == "debug") "-debug" else ""}"
afterEvaluate {
from(components[config])
}
artifact(tasks["sourcesJar"])
artifact(tasks["documentationZip"])
pom {
inceptionYear.set("2008")
licenses {
license {
name.set("MIT License")
url.set("https://github.com/urho3d/Urho3D/blob/master/LICENSE")
}
}
developers {
developer {
name.set("Urho3D contributors")
url.set("https://github.com/urho3d/Urho3D/graphs/contributors")
}
}
scm {
url.set("https://github.com/urho3d/Urho3D.git")
connection.set("scm:git:ssh://git@github.com:urho3d/Urho3D.git")
developerConnection.set("scm:git:ssh://git@github.com:urho3d/Urho3D.git")
}
withXml {
asNode().apply {
appendNode("name", "Urho3D")
appendNode("description", project.description)
appendNode("url", "https://urho3d.io/")
}
}
}
}