aboutsummaryrefslogtreecommitdiff
path: root/nosession_libc/build.gradle.kts
diff options
context:
space:
mode:
Diffstat (limited to 'nosession_libc/build.gradle.kts')
-rw-r--r--nosession_libc/build.gradle.kts60
1 files changed, 60 insertions, 0 deletions
diff --git a/nosession_libc/build.gradle.kts b/nosession_libc/build.gradle.kts
new file mode 100644
index 0000000..0f64343
--- /dev/null
+++ b/nosession_libc/build.gradle.kts
@@ -0,0 +1,60 @@
+import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
+
+plugins {
+ `cpp-library`
+ `java-base`
+
+}
+val lib by configurations.creating
+
+library {
+ linkage.set(listOf(Linkage.SHARED))
+}
+
+project.afterEvaluate {
+ tasks.withType(CppCompile::class) {
+ val javaHome = rootProject.the<JavaToolchainService>()
+ .compilerFor(rootProject.the<JavaPluginExtension>().toolchain)
+ .map { it.metadata.installationPath.asFile }
+ val includeDir = javaHome.map { it.resolve("include") }
+ val os = targetPlatform.get().operatingSystem
+ compilerArgs.add("-I")
+ compilerArgs.add(includeDir.map { it.absolutePath })
+ compilerArgs.add("-I")
+ compilerArgs.add(includeDir.map {
+ it.resolve(
+ when {
+ os.isMacOsX -> "darwin"
+ os.isLinux -> "linux"
+ os.isWindows -> "win32"
+ os.isFreeBSD -> "freebsd"
+ else -> TODO("Unsupported operating system")
+ }
+ ).absolutePath
+ })
+ if (os.isLinux) {
+ compilerArgs.add("-D_FILE_OFFSET_BITS=64")
+ }
+ if (os.isMacOsX) {
+ compilerArgs.add("-mmacosx-version-min=10.4")
+ }
+ }
+
+ tasks.withType(AbstractLinkTask::class) {
+ if (targetPlatform.get().operatingSystem.isMacOsX)
+ linkerArgs.add("-mmacosx-version-min=10.4")
+ }
+ val linkRelease: AbstractLinkTask by tasks
+ val archive by tasks.creating(Zip::class) {
+ archivesName.set("archive.jar")
+ destinationDirectory.set(layout.buildDirectory.dir("libs"))
+ from(linkRelease.linkedFile) {
+ val targetPlatform = linkRelease.targetPlatform.get()
+ into("native/" + when(val arch = targetPlatform.architecture.name) {
+ "x86-64" -> "amd64"
+ else -> arch
+ } + "/" +targetPlatform.operatingSystem.name)
+ }
+ }
+ artifacts.add(lib.name, archive)
+}