buildscript { repositories { mavenCentral() } 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-20161116.235936-256' // (gets applied to this project and all its subprojects) allprojects { repositories { mavenCentral() 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 llvmLinkerOpts() { // TODO: cannot use llvm-config because it can be inaccessible during project configuration final List 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 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 run(type: JavaExec) { main 'org.jetbrains.kotlin.cli.bc.K2NativeKt' classpath configurations.cli_bc args 'tests/codegen/function/sum.kt' args '-headers', project(':runtime').file('src/main/kotlin') args '-output', "$buildDir/out.bc" jvmArgs '-ea', "-Djava.library.path=${project.buildDir}/nativelibs" dependsOn ':runtime:build' 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' } }