| 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 |
| } |
| } |
| } |