245 lines
6.3 KiB
Groovy
245 lines
6.3 KiB
Groovy
buildscript {
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0"
|
|
}
|
|
|
|
}
|
|
|
|
apply plugin: "com.google.protobuf"
|
|
apply plugin: 'java'
|
|
apply plugin: 'kotlin'
|
|
apply plugin: org.jetbrains.kotlin.NativeInteropPlugin
|
|
|
|
String kotlinCompilerModule = 'org.jetbrains.kotlin:kotlin-compiler:1.1-20161201.112229-281'
|
|
|
|
|
|
// (gets applied to this project and all its subprojects)
|
|
allprojects {
|
|
repositories {
|
|
maven {
|
|
url 'http://oss.sonatype.org/content/repositories/snapshots'
|
|
}
|
|
}
|
|
|
|
configurations.all {
|
|
// kotlin-compiler module includes Kotlin runtime bundled;
|
|
// make Gradle aware of this to avoid multiple Kotlin runtimes in classpath:
|
|
resolutionStrategy.dependencySubstitution {
|
|
substitute module('org.jetbrains.kotlin:kotlin-runtime') with module(kotlinCompilerModule)
|
|
substitute module('org.jetbrains.kotlin:kotlin-stdlib') with module(kotlinCompilerModule)
|
|
substitute module('org.jetbrains.kotlin:kotlin-reflect') with module(kotlinCompilerModule)
|
|
}
|
|
// TODO: probably we should use kotlin-compiler without bundled runtime
|
|
}
|
|
|
|
}
|
|
|
|
sourceSets {
|
|
compiler {
|
|
proto.srcDir 'compiler/ir/backend.native/src/'
|
|
java.srcDirs 'compiler/ir/backend.native/src/', 'build/generated/source/proto/compiler/java/'
|
|
kotlin.srcDir 'compiler/ir/backend.native/src/'
|
|
}
|
|
cli_bc {
|
|
java.srcDir 'cli.bc/src'
|
|
kotlin.srcDir 'cli.bc/src'
|
|
}
|
|
bc_frontend {
|
|
java.srcDir 'bc.frontend/src'
|
|
kotlin.srcDir 'bc.frontend/src'
|
|
}
|
|
}
|
|
|
|
// The protobuf plugin specifies this dependency for java by itself,
|
|
// but not for Kotlin.
|
|
compileCompilerKotlin {
|
|
dependsOn('generateCompilerProto')
|
|
}
|
|
|
|
List<String> llvmLinkerOpts() {
|
|
// TODO: cannot use llvm-config because it can be inaccessible during project configuration
|
|
final List<String> libs = [
|
|
'-lLLVMX86Disassembler',
|
|
'-lLLVMX86AsmParser',
|
|
'-lLLVMX86CodeGen',
|
|
'-lLLVMSelectionDAG',
|
|
'-lLLVMAsmPrinter',
|
|
'-lLLVMX86Desc',
|
|
'-lLLVMMCDisassembler',
|
|
'-lLLVMX86Info',
|
|
'-lLLVMX86AsmPrinter',
|
|
'-lLLVMX86Utils',
|
|
'-lLLVMInterpreter',
|
|
'-lLLVMCodeGen',
|
|
'-lLLVMScalarOpts',
|
|
'-lLLVMInstCombine',
|
|
'-lLLVMInstrumentation',
|
|
'-lLLVMProfileData',
|
|
'-lLLVMTransformUtils',
|
|
'-lLLVMBitWriter',
|
|
'-lLLVMExecutionEngine',
|
|
'-lLLVMTarget',
|
|
'-lLLVMAnalysis',
|
|
'-lLLVMRuntimeDyld',
|
|
'-lLLVMObject',
|
|
'-lLLVMMCParser',
|
|
'-lLLVMBitReader',
|
|
'-lLLVMMC',
|
|
'-lLLVMCore',
|
|
'-lLLVMSupport'
|
|
]
|
|
|
|
final List<String> res = new ArrayList<>()
|
|
|
|
res << "-L$llvmDir/lib"
|
|
|
|
if (isLinux()) {
|
|
res.addAll(["-Wl,-Bstatic", "-Wl,--whole-archive"]
|
|
+ libs
|
|
+ ["-Wl,--no-whole-archive", "-Wl,-Bdynamic"])
|
|
} else {
|
|
res.addAll(libs)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
kotlinNativeInterop {
|
|
llvm {
|
|
defFile 'llvm.def'
|
|
compilerOpts "-fPIC", "-I$llvmDir/include"
|
|
linkerOpts llvmLinkerOpts()
|
|
}
|
|
|
|
hash { // TODO: copy-pasted from ':common:compileHash'
|
|
compilerOpts '-fPIC'
|
|
linkerOpts '-fPIC'
|
|
linker 'clang++'
|
|
linkOutputs ':common:compileHash'
|
|
|
|
headers fileTree('../common/src/hash/headers') {
|
|
include '**/*.h'
|
|
include '**/*.hpp'
|
|
}
|
|
|
|
pkg 'org.jetbrains.kotlin.backend.konan.hash'
|
|
}
|
|
}
|
|
|
|
|
|
configurations {
|
|
cli_bcRuntime.extendsFrom compilerRuntime
|
|
|
|
cli_bc {
|
|
extendsFrom cli_bcRuntime
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
|
|
compilerCompile "com.google.protobuf:protobuf-java:3.0.0"
|
|
|
|
compilerCompile kotlinCompilerModule
|
|
compilerCompile kotlinNativeInterop['llvm'].configuration
|
|
compilerCompile kotlinNativeInterop['hash'].configuration
|
|
|
|
cli_bcCompile "org.jetbrains.kotlin:kotlin-runtime:$kotlin_version"
|
|
cli_bcCompile sourceSets.compiler.output
|
|
|
|
bc_frontendCompile kotlinCompilerModule
|
|
|
|
cli_bc sourceSets.cli_bc.output
|
|
}
|
|
|
|
|
|
build.dependsOn 'compilerClasses','cli_bcClasses','bc_frontendClasses'
|
|
|
|
task stdlib(type: JavaExec) {
|
|
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
|
classpath configurations.cli_bc
|
|
|
|
args project(':runtime').file('src/main/kotlin')
|
|
|
|
args '-output', project(':runtime').file('build/stdlib.kt.bc')
|
|
|
|
jvmArgs '-ea', "-Djava.library.path=${project.buildDir}/nativelibs"
|
|
|
|
dependsOn ':runtime:build'
|
|
outputs.file(project(':runtime').file('build/stdlib.kt.bc'))
|
|
|
|
doFirst {
|
|
args '-runtime', project(':runtime').build.outputs.files.singleFile
|
|
}
|
|
environment 'LD_LIBRARY_PATH' : "${llvmDir}/lib:${project.buildDir}/nativelibs"
|
|
}
|
|
|
|
task start(type: JavaExec) {
|
|
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
|
classpath configurations.cli_bc
|
|
|
|
args project(':runtime').file('src/launcher/kotlin')
|
|
|
|
args '-library', project(':runtime').file('build/stdlib.kt.bc')
|
|
|
|
args '-output', project(':runtime').file('build/start.kt.bc')
|
|
|
|
jvmArgs '-ea', "-Djava.library.path=${project.buildDir}/nativelibs"
|
|
|
|
dependsOn 'stdlib'
|
|
outputs.file(project(':runtime').file('build/start.kt.bc'))
|
|
|
|
doFirst {
|
|
args '-runtime', project(':runtime').build.outputs.files.singleFile
|
|
}
|
|
environment 'LD_LIBRARY_PATH' : "${llvmDir}/lib:${project.buildDir}/nativelibs"
|
|
}
|
|
|
|
task run(type: JavaExec) {
|
|
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
|
classpath configurations.cli_bc
|
|
|
|
args 'tests/codegen/function/sum.kt'
|
|
|
|
args '-library', project(':runtime').file('build/stdlib.kt.bc')
|
|
|
|
args '-output', "$buildDir/out.bc"
|
|
|
|
jvmArgs '-ea', "-Djava.library.path=${project.buildDir}/nativelibs"
|
|
|
|
dependsOn ':runtime:build'
|
|
dependsOn 'stdlib'
|
|
|
|
doFirst {
|
|
args '-runtime', project(':runtime').build.outputs.files.singleFile
|
|
}
|
|
environment 'LD_LIBRARY_PATH' : "${llvmDir}/lib:${project.buildDir}/nativelibs"
|
|
}
|
|
|
|
|
|
|
|
task jars {
|
|
doFirst {
|
|
project.buildscript.configurations.classpath.each {
|
|
String jarName = it.getName();
|
|
print jarName + ":"
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protobuf {
|
|
protoc {
|
|
artifact = 'com.google.protobuf:protoc:3.0.0'
|
|
}
|
|
}
|
|
|
|
|