buildscript { ext.kotlin_ir_path = "$projectDir/kotlin-ir/dist" repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'java' apply plugin: 'kotlin' apply plugin: org.jetbrains.kotlin.NativeInteropPlugin def deps = files("$kotlin_ir_path/kotlinc/lib/kotlin-compiler.jar", "$kotlin_ir_path/kotlinc/lib/kotlin-runtime.jar", "$kotlin_ir_path/kotlinc/lib/kotlin-reflect.jar") //export dependencies jars ext['deps'] = deps sourceSets { compiler { java.srcDir 'compiler/ir/backend.native/src/' 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' } } String[] linkerOpts1() { def 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'] List ldflags = new ArrayList<>() if (System.properties['os.name'].startsWith("Linux")) ldflags.addAll(["-L$llvmDir/lib", "-Wl,-Bstatic", "-Wl,--whole-archive"] + libs + ["-Wl,--no-whole-archive", "-Wl,-Bdynamic", "-L$libffiDir/lib -lffi", "-lrt", "-ldl","-lpthread", "-lz", "-lm"]) else ldflags.addAll(["-L$llvmDir/lib", "-lc++"] + libs + ["-L$libffiDir/lib", "-lffi"]) ArrayList strldflags = new ArrayList<>() ldflags.forEach{strldflags.add(it.toString())} return strldflags.toArray(new String[0]) } kotlinNativeInterop { llvm { defFile 'llvm.def' compilerOpts "-fPIC", "-I$llvmDir/include" linkerOpts linkerOpts1() } 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.native.hash' } } dependencies { compilerCompile deps compilerCompile kotlinNativeInterop['llvm'] compilerCompile kotlinNativeInterop['hash'] cli_bcCompile deps cli_bcCompile sourceSets.compiler.output bc_frontendCompile deps } configurations { cli_bcRuntime.extendsFrom compilerRuntime } build.dependsOn 'compilerClasses','cli_bcClasses','bc_frontendClasses' task run(type: JavaExec) { main 'org.jetbrains.kotlin.cli.bc.K2NativeKt' classpath sourceSets.cli_bc.runtimeClasspath args 'tests/codegen/function/sum.kt' args 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 { println "kotlin-ir: $kotlin_ir_path" project.buildscript.configurations.classpath.each { String jarName = it.getName(); print jarName + ":" } } repositories { mavenCentral() }