This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
ScriptCraft/build.gradle

234 lines
5.4 KiB
Groovy
Raw Normal View History

2020-04-25 13:33:17 +00:00
plugins {
id 'fabric-loom' version '0.2.7-SNAPSHOT'
id 'com.matthewprenger.cursegradle' version '1.4.0'
}
def cDir = new File(rootProject.projectDir.absolutePath, 'src/main/c')
class JNIPlatform {
String name
String[] cmakeArgs
String libExtension
2020-04-25 17:25:37 +00:00
JNIPlatform(String name, String libExtension, File rootDir) {
2020-04-25 13:33:17 +00:00
this.name = name
2020-04-25 17:25:37 +00:00
this.cmakeArgs = ["-DCMAKE_TOOLCHAIN_FILE=${rootDir.absolutePath}/cmake/${name}-toolchain.cmake"] as String[]
2020-04-25 13:33:17 +00:00
this.libExtension = libExtension
}
}
JNIPlatform[] jniPlatforms = [
2020-04-25 17:25:37 +00:00
new JNIPlatform("linux-x86_64", ".so", rootDir),
new JNIPlatform("linux-x86", ".so", rootDir),
new JNIPlatform("linux-armhf", ".so", rootDir),
new JNIPlatform("linux-arm64", ".so", rootDir),
new JNIPlatform("windows-x86_64", ".dll", rootDir),
new JNIPlatform("windows-x86", ".dll", rootDir)
2020-04-25 13:33:17 +00:00
]
2020-04-25 17:25:37 +00:00
task cleanJNI {}
task compileJNI {}
2020-04-25 13:33:17 +00:00
for (JNIPlatform platform : jniPlatforms) {
def buildDir = new File(cDir, "build-${platform.name}")
if (!buildDir.exists()) {
buildDir.mkdir()
}
2020-04-27 18:18:56 +00:00
tasks.create(name: "cmake-${platform.name}", group: 'jni', type: Exec) {
2020-04-25 13:33:17 +00:00
workingDir buildDir
executable 'cmake'
args platform.cmakeArgs + ['..']
}
2020-04-27 18:18:56 +00:00
tasks.create(name: "compileJNI-${platform.name}", group: 'jni', type: Exec) {
2020-04-25 13:33:17 +00:00
workingDir buildDir
executable 'make'
dependsOn tasks.getByName("cmake-${platform.name}")
}
2020-04-25 17:25:37 +00:00
compileJNI.dependsOn tasks.getByName("compileJNI-${platform.name}")
2020-04-25 13:33:17 +00:00
2020-04-27 18:18:56 +00:00
tasks.create(name: "cleanJNI-${platform.name}", group: 'jni', type: Delete) {
2020-04-25 13:33:17 +00:00
delete buildDir.absolutePath
}
2020-04-25 17:25:37 +00:00
cleanJNI.dependsOn tasks.getByName("cleanJNI-${platform.name}")
2020-04-25 13:33:17 +00:00
}
2020-04-25 17:25:37 +00:00
clean.dependsOn cleanJNI
processResources.dependsOn compileJNI
2020-04-25 13:33:17 +00:00
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
archivesBaseName = project.archives_base_name
def mod_version = project.mod_version as Object
version = "${mod_version}+${project.minecraft_version}"
group = project.maven_group as Object
minecraft {
}
dependencies {
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.minecraft_version}+build.${project.yarn_build}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
}
def typescriptOut = new File(buildDir, 'generated/typescript')
sourceSets {
main {
resources {
srcDir typescriptOut
}
}
}
2020-04-28 02:30:12 +00:00
def typescriptRoot = 'src/main/js'
def typescriptRootFile = new File(rootDir.absolutePath, typescriptRoot)
2020-04-25 13:33:17 +00:00
2020-04-27 18:18:56 +00:00
task typescript(group: 'build') {
2020-04-25 13:33:17 +00:00
inputs.dir typescriptRootFile
outputs.dir typescriptOut
doFirst {
project.delete {
delete typescriptOut
}
typescriptOut.mkdirs()
project.exec {
2020-04-28 02:30:12 +00:00
workingDir typescriptRootFile
executable 'npm'
2020-04-25 13:33:17 +00:00
2020-04-28 02:30:12 +00:00
args 'run', 'build', '--'
args '--outDir', new File(typescriptOut, 'scriptcraft').absolutePath
2020-04-25 13:33:17 +00:00
}
}
}
2020-04-28 02:30:12 +00:00
task eslint(group: 'verification', type: Exec) {
workingDir typescriptRootFile
executable 'npm'
args 'run', 'eslint'
}
2020-04-27 18:18:56 +00:00
processResources.dependsOn typescript
2020-04-25 13:33:17 +00:00
def typedocOut = new File(buildDir, 'typedoc')
2020-04-27 18:18:56 +00:00
task typedoc(group: 'documentation') {
2020-04-25 13:33:17 +00:00
inputs.dir typescriptRootFile
outputs.dir typedocOut
doFirst {
project.delete {
delete typedocOut
}
typedocOut.mkdirs()
project.exec {
workingDir typescriptRootFile
2020-04-28 02:30:12 +00:00
executable 'npm'
args 'run', 'typedoc', '--'
2020-04-25 13:33:17 +00:00
args '--out', typedocOut.absolutePath
}
}
}
processResources {
inputs.property 'version', mod_version
inputs.property 'name', rootProject.name
from(sourceSets.main.resources.srcDirs) {
include 'fabric.mod.json'
expand 'version': mod_version, 'name': rootProject.name
}
from(sourceSets.main.resources.srcDirs) {
exclude 'fabric.mod.json'
}
for (JNIPlatform platform : jniPlatforms) {
def buildDir = new File(cDir, "build-${platform.name}")
if (!buildDir.exists()) {
buildDir.mkdir()
}
def file = new File(buildDir, 'libscriptcraft' + platform.libExtension)
inputs.files file
from(file.absolutePath) {
into new File('natives', platform.name).path
}
}
}
// ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this task, sources will not be generated.
task sourcesJar(type: Jar, dependsOn: classes) {
classifier 'sources'
from sourceSets.main.allSource
}
task typedocJar(type: Jar) {
classifier 'typedoc'
from typedocOut
}
typedocJar.dependsOn typedoc
artifacts {
archives sourcesJar
archives typedocJar
}
jar {
from 'LICENSE'
}
if (project.hasProperty('curseforge.api_key')) {
curseforge {
apiKey = project.getProperty('curseforge.api_key')
project {
id = project.curseforge_id
changelog = 'A changelog can be found at https://gitea.thebrokenrail.com/TheBrokenRail/ScriptCraft/src/branch/master/CHANGELOG.md'
releaseType = 'release'
addGameVersion project.simple_minecraft_version
addGameVersion 'Fabric'
mainArtifact(remapJar) {
displayName = "ScriptCraft v${mod_version} for ${project.minecraft_version}"
}
afterEvaluate {
uploadTask.dependsOn('remapJar')
}
relations {
requiredDependency 'fabric-api'
}
}
options {
forgeGradleIntegration = false
}
}
}