e409c60780
FL-23390 ^KT-64168 Fixed
248 lines
8.3 KiB
Groovy
248 lines
8.3 KiB
Groovy
/*
|
|
* Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
* that can be found in the LICENSE file.
|
|
*/
|
|
|
|
import org.jetbrains.kotlin.PlatformInfo
|
|
import org.jetbrains.kotlin.cpp.CppConsumerPlugin
|
|
import org.jetbrains.kotlin.cpp.CppUsage
|
|
import org.jetbrains.kotlin.cpp.DependencyHandlerExKt
|
|
import org.jetbrains.kotlin.tools.NativePluginKt
|
|
|
|
|
|
buildscript {
|
|
apply from: "../../kotlin-native/gradle/kotlinGradlePlugin.gradle"
|
|
}
|
|
|
|
apply plugin: 'java'
|
|
apply plugin: 'kotlin'
|
|
apply plugin: "native-interop-plugin"
|
|
apply plugin: "maven-publish"
|
|
apply plugin: CppConsumerPlugin
|
|
|
|
sourceSets {
|
|
compiler {
|
|
kotlin {
|
|
srcDir 'compiler/ir/backend.native/src/'
|
|
}
|
|
resources.srcDir 'compiler/ir/backend.native/resources/'
|
|
}
|
|
cli_bc {
|
|
kotlin.srcDir 'cli.bc/src'
|
|
}
|
|
}
|
|
|
|
compileCompilerKotlin {
|
|
kotlinOptions.jvmTarget = "1.8"
|
|
kotlinOptions.freeCompilerArgs += [
|
|
'-opt-in=kotlin.RequiresOptIn',
|
|
"-opt-in=kotlinx.cinterop.BetaInteropApi",
|
|
"-opt-in=kotlinx.cinterop.ExperimentalForeignApi",
|
|
"-opt-in=org.jetbrains.kotlin.backend.konan.InternalKotlinNativeApi",
|
|
'-Xskip-prerelease-check']
|
|
}
|
|
|
|
TasksKt.optInToUnsafeDuringIrConstructionAPI(project)
|
|
|
|
compileCli_bcKotlin {
|
|
kotlinOptions.freeCompilerArgs += ['-Xskip-prerelease-check']
|
|
}
|
|
|
|
configurations {
|
|
commonFilesBitcode {
|
|
canBeConsumed = false
|
|
canBeResolved = true
|
|
attributes {
|
|
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, CppUsage.LLVM_BITCODE))
|
|
}
|
|
}
|
|
commonEnvBitcode {
|
|
canBeConsumed = false
|
|
canBeResolved = true
|
|
attributes {
|
|
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, CppUsage.LLVM_BITCODE))
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
use(DependencyHandlerExKt) {
|
|
commonFilesBitcode module(project(":kotlin-native:common"), "files")
|
|
commonEnvBitcode module(project(":kotlin-native:common"), "env")
|
|
}
|
|
}
|
|
|
|
kotlinNativeInterop {
|
|
llvm {
|
|
|
|
dependsOn ":kotlin-native:llvmDebugInfoC:${NativePluginKt.lib("debugInfo")}"
|
|
dependsOn ":kotlin-native:libllvmext:${NativePluginKt.lib("llvmext")}"
|
|
defFile 'llvm.def'
|
|
compilerOpts "-I$llvmDir/include", "-I${rootProject.project(':kotlin-native:llvmDebugInfoC').projectDir}/src/main/include", "-I${rootProject.project(':kotlin-native:libllvmext').projectDir}/src/main/include"
|
|
if (PlatformInfo.isMac()) {
|
|
// $llvmDir/lib contains libc++.1.dylib too, and it seems to be preferred by the linker
|
|
// over the sysroot-provided one.
|
|
// As a result, libllvmstubs.dylib gets linked with $llvmDir/lib/libc++.1.dylib.
|
|
// It has install_name = @rpath/libc++.1.dylib, which won't work for us, because
|
|
// dynamic loader won't be able to find libc++ when loading libllvmstubs.
|
|
// For some reason, this worked fine before macOS 12.3.
|
|
//
|
|
// To enforce linking with proper libc++, pass the default path explicitly:
|
|
linkerOpts "-L${hostPlatform.absoluteTargetSysRoot}/usr/lib"
|
|
}
|
|
linkerOpts "-L$llvmDir/lib", "-L${rootProject.project(':kotlin-native:llvmDebugInfoC').layout.buildDirectory.get().asFile}", "-L${rootProject.project(':kotlin-native:libllvmext').layout.buildDirectory.get().asFile}"
|
|
}
|
|
|
|
files {
|
|
linker 'clang++'
|
|
link configurations.commonFilesBitcode
|
|
|
|
// TODO: These should come from some sort of commonFilesApi configuration
|
|
headers fileTree('../common/src/files/headers') {
|
|
include '**/*.h'
|
|
include '**/*.hpp'
|
|
}
|
|
|
|
pkg 'org.jetbrains.kotlin.backend.konan.files'
|
|
}
|
|
|
|
|
|
env {
|
|
linker 'clang++'
|
|
link configurations.commonEnvBitcode
|
|
|
|
// TODO: These should come from some sort of commonEnvApi configuration
|
|
headers fileTree('../common/src/env/headers') {
|
|
include '**/*.h'
|
|
include '**/*.hpp'
|
|
}
|
|
|
|
pkg 'org.jetbrains.kotlin.backend.konan.env'
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
compilerApi {
|
|
extendsFrom kotlinNativeInterop['llvm'].configuration
|
|
extendsFrom kotlinNativeInterop['files'].configuration
|
|
extendsFrom kotlinNativeInterop['env'].configuration
|
|
}
|
|
kotlin_compiler_jar
|
|
kotlin_stdlib_jar
|
|
kotlin_reflect_jar
|
|
kotlin_script_runtime_jar
|
|
trove4j_jar
|
|
|
|
cli_bcApiElements {
|
|
extendsFrom cli_bcApi
|
|
}
|
|
|
|
cli_bcApi.extendsFrom compilerApi
|
|
}
|
|
|
|
dependencies {
|
|
kotlin_compiler_jar kotlinCompilerModule
|
|
kotlin_stdlib_jar kotlinStdLibModule
|
|
use(RepoDependencies) {
|
|
trove4j_jar commonDependency("org.jetbrains.intellij.deps:trove4j")
|
|
kotlin_reflect_jar commonDependency("org.jetbrains.kotlin:kotlin-reflect")
|
|
compilerApi(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) { setTransitive(false) }
|
|
compilerApi(commonDependency("org.jetbrains.intellij.deps:log4j")) { setTransitive(false) }
|
|
compilerApi(commonDependency("org.jetbrains.intellij.deps:jdom"))
|
|
compilerApi(commonDependency("com.fasterxml:aalto-xml")) { setTransitive(false) }
|
|
compilerApi(commonDependency("org.codehaus.woodstox:stax2-api")) { setTransitive(false) }
|
|
}
|
|
kotlin_script_runtime_jar project(":kotlin-script-runtime")
|
|
|
|
compilerApi project(":kotlin-native:utilities:basic-utils")
|
|
compilerApi project(":native:objcexport-header-generator")
|
|
compilerApi project(":native:objcexport-header-generator-k1")
|
|
compilerApi project(":native:base")
|
|
|
|
compilerImplementation project(":kotlin-compiler")
|
|
compilerApi project(":native:kotlin-native-utils")
|
|
compilerApi project(":core:descriptors")
|
|
compilerApi project(":core:compiler.common.native")
|
|
compilerApi project(":compiler:ir.tree")
|
|
compilerApi project(":compiler:ir.backend.common")
|
|
compilerApi project(":compiler:ir.objcinterop")
|
|
compilerApi project(":compiler:util")
|
|
compilerApi project(":native:frontend.native")
|
|
compilerApi project(":compiler:cli-common")
|
|
compilerApi project(":compiler:cli-base")
|
|
compilerApi project(":compiler:cli")
|
|
compilerApi project(":kotlin-util-klib")
|
|
compilerApi project(":kotlin-util-klib-metadata")
|
|
compilerApi project(":compiler:ir.serialization.common")
|
|
compilerApi project(":compiler:ir.serialization.native")
|
|
compilerApi project(":compiler:fir:fir-serialization")
|
|
compilerApi project(":compiler:fir:native")
|
|
compilerApi project(":compiler:ir.psi2ir")
|
|
use(IntellijDependenciesKt) {
|
|
compilerApi(intellijCore())
|
|
compileOnly(jpsModel())
|
|
}
|
|
|
|
cli_bcApi sourceSets.compiler.output
|
|
|
|
cli_bcApiElements sourceSets.cli_bc.output
|
|
}
|
|
|
|
classes.dependsOn 'compilerClasses', 'cli_bcClasses'
|
|
|
|
tasks.named("jar") {
|
|
from sourceSets.cli_bc.output,
|
|
sourceSets.compiler.output,
|
|
sourceSets.filesInteropStubs.output,
|
|
sourceSets.envInteropStubs.output,
|
|
sourceSets.llvmInteropStubs.output
|
|
|
|
dependsOn 'external_jars'
|
|
}
|
|
|
|
def externalJars = ['compiler', 'stdlib', 'reflect', 'script_runtime']
|
|
|
|
tasks.register("trove4jCopy", Copy) {
|
|
from configurations.named("trove4j_jar") {
|
|
include "trove4j*.jar"
|
|
rename "trove4j(.*).jar", "trove4j.jar"
|
|
|
|
into 'build/external_jars'
|
|
}
|
|
}
|
|
|
|
externalJars.each { arg ->
|
|
def jar = arg.replace('_', '-') // :(
|
|
tasks.register("${arg}Copy", Copy) {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
from configurations.named("kotlin_${arg}_jar") {
|
|
include "kotlin-${jar}*.jar"
|
|
rename "kotlin-${jar}(.*).jar", "kotlin-${jar}.jar"
|
|
|
|
into 'build/external_jars'
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register("external_jars", Copy) {
|
|
dependsOn externalJars.collect { "${it}Copy" }
|
|
dependsOn trove4jCopy
|
|
}
|
|
|
|
tasks.register("debugCompiler", JavaExec) {
|
|
dependsOn ':dist'
|
|
mainClass = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
|
classpath = project.fileTree("${distDir.canonicalPath}/konan/lib/") {
|
|
include '*.jar'
|
|
}
|
|
jvmArgs "-Dorg.jetbrains.kotlin.native.home=${distDir.canonicalPath}"
|
|
enableAssertions = true
|
|
args = findProperty("konan.debug.args").toString().tokenize() ?: []
|
|
}
|
|
|
|
RepoArtifacts.sourcesJar(project) {
|
|
it.from(sourceSets["cli_bc"].allSource)
|
|
it.from(sourceSets["compiler"].allSource)
|
|
}
|
|
|
|
RepoArtifacts.javadocJar(project) |