blob: fcfdab90efe2c5ec8866fe74b4fbb644426cf859 [file] [log] [blame] [edit]
import org.jetbrains.kotlin.cpp.CppConsumerPlugin
import org.jetbrains.kotlin.cpp.CppUsage
import org.jetbrains.kotlin.cpp.DependencyHandlerExKt
import org.jetbrains.gradle.plugins.tools.*
/*
* Copyright 2010-2018 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.
*/
buildscript {
apply from: "../../kotlin-native/gradle/kotlinGradlePlugin.gradle"
apply plugin: 'project-report'
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: org.jetbrains.kotlin.NativeInteropPlugin
apply plugin: "maven-publish"
apply plugin: CppConsumerPlugin
sourceSets {
compiler {
kotlin {
srcDir 'compiler/ir/backend.native/src/'
srcDir(VersionGeneratorKt.kotlinNativeVersionSrc(project))
}
resources.srcDir 'compiler/ir/backend.native/resources/'
/* PATH to META-INF */
resources.srcDir VersionGeneratorKt.kotlinNativeVersionResourceFile(project).parentFile.parent
}
cli_bc {
kotlin.srcDir 'cli.bc/src'
}
}
compileCompilerKotlin {
kotlinOptions.jvmTarget = "1.8"
kotlinOptions.freeCompilerArgs += ['-opt-in=kotlin.RequiresOptIn', '-opt-in=org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI', '-Xskip-prerelease-check']
}
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 (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${platformManager.hostPlatform.absoluteTargetSysRoot}/usr/lib"
}
linkerOpts "-L$llvmDir/lib", "-L${rootProject.project(':kotlin-native:llvmDebugInfoC').buildDir}", "-L${rootProject.project(':kotlin-native:libllvmext').buildDir}"
}
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 {
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(DependenciesKt) {
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"))
}
kotlin_script_runtime_jar project(":kotlin-script-runtime")
compilerApi project(":kotlin-native:utilities:basic-utils")
compilerImplementation project(":kotlin-compiler")
compilerApi project(":native:kotlin-native-utils")
compilerApi project(":core:descriptors")
compilerApi project(":compiler:ir.tree")
compilerApi project(":compiler:ir.backend.common")
compilerApi project(":compiler:util")
compilerApi project(":native:frontend.native")
compilerApi project(":compiler:cli-common")
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.psi2ir")
compilerApi project(":kotlin-native-shared")
use(IntellijDependenciesKt) {
compilerApi(intellijCore())
compileOnly(jpsModel())
}
compilerApi kotlinNativeInterop['llvm'].configuration
compilerApi kotlinNativeInterop['files'].configuration
compilerApi kotlinNativeInterop['env'].configuration
cli_bcApi sourceSets.compiler.output
cli_bcApiElements sourceSets.cli_bc.output
}
classes.dependsOn 'compilerClasses', 'cli_bcClasses'
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']
task trove4jCopy(type: Copy) {
from configurations.getByName("trove4j_jar") {
include "trove4j*.jar"
rename "trove4j(.*).jar", "trove4j.jar"
into 'build/external_jars'
}
}
externalJars.each { arg ->
def jar = arg.replace('_', '-') // :(
task("${arg}Copy", type: Copy) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from configurations.getByName("kotlin_${arg}_jar") {
include "kotlin-${jar}*.jar"
rename "kotlin-${jar}(.*).jar", "kotlin-${jar}.jar"
into 'build/external_jars'
}
}
}
task external_jars(type: Copy) {
dependsOn externalJars.collect { "${it}Copy" }
dependsOn trove4jCopy
}
task debugCompiler(type: JavaExec) {
dependsOn ':dist'
main = '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() ?: []
}
publishing {
repositories {
maven { url = "$buildDir/repo" }
}
publications {
maven(MavenPublication) {
groupId = 'org.jetbrains.kotlin'
artifactId = 'backend.native'
version = konanVersionFull
from components.java
}
}
}