/* * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ import org.jetbrains.kotlin.tools.lib import org.jetbrains.kotlin.tools.solib import org.jetbrains.kotlin.* plugins { id("org.jetbrains.kotlin.jvm") id("native") id("native-dependencies") } native { val isWindows = PlatformInfo.isWindows() val obj = if (isWindows) "obj" else "o" val lib = if (isWindows) "lib" else "a" val cflags = mutableListOf("-I${nativeDependencies.libffiPath}/include", *hostPlatform.clangForJni.hostCompilerArgsForJni) suffixes { (".c" to ".$obj") { tool(*hostPlatform.clangForJni.clangC("").toTypedArray()) flags( *cflags.toTypedArray(), "-c", "-o", ruleOut(), ruleInFirst()) } } sourceSet { "callbacks" { dir("src/callbacks/c") } } val objSet = sourceSets["callbacks"]!!.transform(".c" to ".$obj") target(solib("callbacks"), objSet) { tool(*hostPlatform.clangForJni.clangCXX("").toTypedArray()) flags("-shared", "-o",ruleOut(), *ruleInAll(), "-L${project(":kotlin-native:libclangext").layout.buildDirectory.get().asFile}", "${nativeDependencies.libffiPath}/lib/libffi.$lib", "-lclangext") } tasks.named(solib("callbacks")).configure { dependsOn(":kotlin-native:libclangext:${lib("clangext")}") dependsOn(nativeDependencies.libffiDependency) } } dependencies { implementation(project(":compiler:util")) implementation(project(":kotlin-stdlib")) implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } } val prepareSharedSourcesForJvm by tasks.registering(Sync::class) { from("src/main/kotlin") into(project.layout.buildDirectory.dir("src/main/kotlin")) } val prepareKotlinIdeaImport by tasks.registering { dependsOn(prepareSharedSourcesForJvm) } sourceSets.main.configure { kotlin.setSrcDirs(emptyList()) kotlin.srcDir("src/jvm/kotlin") kotlin.srcDir(prepareSharedSourcesForJvm) } tasks.withType>().configureEach { compilerOptions { optIn.addAll( listOf( "kotlin.ExperimentalUnsignedTypes", "kotlinx.cinterop.BetaInteropApi", "kotlinx.cinterop.ExperimentalForeignApi", ) ) freeCompilerArgs.add("-Xskip-prerelease-check") } } val nativelibs = project.tasks.create("nativelibs") { val callbacksSolib = solib("callbacks") dependsOn(callbacksSolib) from(layout.buildDirectory.dir(callbacksSolib)) into(layout.buildDirectory.dir("nativelibs")) }