From 7fd44e32d09a1e09798c30745ce3290dbda0c204 Mon Sep 17 00:00:00 2001 From: TSR Berry <20988865+TSRBerry@users.noreply.github.com> Date: Thu, 20 Jul 2023 22:50:12 +0200 Subject: [PATCH] Add gradle module for libryujinx --- src/RyujinxAndroid/app/build.gradle | 2 +- src/RyujinxAndroid/gradle.properties | 8 +- src/RyujinxAndroid/libryujinx/build.gradle | 88 ++++++++++++++++++++++ src/RyujinxAndroid/settings.gradle | 1 + 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/RyujinxAndroid/libryujinx/build.gradle diff --git a/src/RyujinxAndroid/app/build.gradle b/src/RyujinxAndroid/app/build.gradle index 2f0fa7a96..870e4c8cb 100644 --- a/src/RyujinxAndroid/app/build.gradle +++ b/src/RyujinxAndroid/app/build.gradle @@ -69,7 +69,7 @@ android { } dependencies { - + runtimeOnly project(":libryujinx") implementation 'androidx.core:core-ktx:1.10.1' implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1' diff --git a/src/RyujinxAndroid/gradle.properties b/src/RyujinxAndroid/gradle.properties index 3c5031eb7..f1ef5b6a3 100644 --- a/src/RyujinxAndroid/gradle.properties +++ b/src/RyujinxAndroid/gradle.properties @@ -20,4 +20,10 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +# Build configuration +# It needs to be set to either "debug" or "release" and can also be overriden on a per build basis +# by adding -Dorg.ryujinx.config=NAME to the command line. +org.ryujinx.config=debug +# Output path of libRyujinx.so +org.ryujinx.publish.path=app/src/main/jniLibs/arm64-v8a \ No newline at end of file diff --git a/src/RyujinxAndroid/libryujinx/build.gradle b/src/RyujinxAndroid/libryujinx/build.gradle new file mode 100644 index 000000000..3c4872912 --- /dev/null +++ b/src/RyujinxAndroid/libryujinx/build.gradle @@ -0,0 +1,88 @@ +plugins { + id 'base' +} + +// Configurable properties + +// Path to the LLVM toolchain to use. This should be configured in your global gradle.properties +// See: https://docs.gradle.org/current/userguide/directory_layout.html#dir:gradle_user_home +def toolchainPath = providers.gradleProperty("org.ryujinx.llvm.toolchain.path").getOrNull() +// Build configuration +def configuration = providers.gradleProperty("org.ryujinx.config").getOrElse("debug").toLowerCase() +// Publish directory +def publishDirectory = providers.gradleProperty("org.ryujinx.publish.path").getOrNull() +// Should the symbols be stripped from the published library? +// Per default the symbols will be stripped for release builds, but not for debug builds. +// This can be overridden using this property. +// Valid values are: ["true", "1", "false", "0"] +def stripSymbols = false +if (project.hasProperty("org.ryujinx.symbols.strip")) { + stripSymbols = project.property("org.ryujinx.symbols.strip") == "true" || project.property("org.ryujinx.symbols.strip") == "1" +} +else { + stripSymbols = configuration == "release" +} +// Additional arguments for the dotnet publish command. +def additionalArgs = project.hasProperty("org.ryujinx.args") ? project.property("org.ryujinx.args") : "" + +configuration = configuration.substring(0, 1).toUpperCase() + configuration.substring(1) + +if (publishDirectory != null) { + publishDirectory = "${rootProject.projectDir}/${publishDirectory}" +} +else { + publishDirectory = libsDirectory.get().toString() +} + +// Trees + +ext.outputTree = fileTree("${buildDir}/publish") { + include '**/*' + builtBy 'compileLibRyujinx' +} + +ext.publishTree = fileTree(publishDirectory) { + include '**/*.so' + builtBy 'compileLibRyujinx' +} + +// Tasks + +tasks.register('compileLibRyujinx', Exec) { + workingDir '../../LibRyujinx' + + if (toolchainPath != null) { + environment "PATH", "${toolchainPath}:${providers.environmentVariable("PATH").get()}" + } + + executable 'dotnet' + args 'publish', + '-r', 'linux-bionic-arm64', + '-c', configuration, + "-p:DisableUnsupportedError=true", + "-p:PublishAotUsingRuntimePack=true", + "-p:StripSymbols=${stripSymbols}", + "--artifacts-path", buildDir + + args additionalArgs.split(" ") + + doLast { + project.sync { + from project.ext.outputTree.getFiles() + include '*.so' + into publishDirectory + rename (String originalName) -> originalName.toLowerCase() + preserve { + include '.*' + } + } + } +} + +tasks.register("cleanLibRyujinx", Delete) { + delete project.ext.publishTree.getFiles() +} + +// Register tasks as standard lifecycle tasks +assemble.dependsOn("compileLibRyujinx") +clean.dependsOn("cleanLibRyujinx") diff --git a/src/RyujinxAndroid/settings.gradle b/src/RyujinxAndroid/settings.gradle index 50231595d..0c8087171 100644 --- a/src/RyujinxAndroid/settings.gradle +++ b/src/RyujinxAndroid/settings.gradle @@ -16,3 +16,4 @@ dependencyResolutionManagement { } rootProject.name = "RyujinxAndroid" include ':app' +include ':libryujinx'