Added "start" function between the C launcher and Kotlin "main"

This commit is contained in:
Alexander Gorshenev
2016-12-01 15:11:42 +03:00
committed by alexander-gorshenev
parent 1aa7b23853
commit 22d748001d
4 changed files with 46 additions and 4 deletions
+21 -1
View File
@@ -162,7 +162,6 @@ dependencies {
build.dependsOn 'compilerClasses','cli_bcClasses','bc_frontendClasses'
task stdlib(type: JavaExec) {
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
classpath configurations.cli_bc
@@ -182,6 +181,27 @@ task stdlib(type: JavaExec) {
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
+7 -1
View File
@@ -13,6 +13,7 @@ abstract class KonanTest extends DefaultTask {
def llvmLlc = llvmTool("llc")
def runtimeBc = new File("${runtimeProject.buildDir.canonicalPath}/runtime.bc")
def launcherBc = new File("${runtimeProject.buildDir.canonicalPath}/launcher.bc")
def startKtBc = new File("${runtimeProject.buildDir.canonicalPath}/start.kt.bc")
def stdlibKtBc = new File("${runtimeProject.buildDir.canonicalPath}/stdlib.kt.bc")
def mainC = 'main.c'
String goldValue = null
@@ -136,7 +137,7 @@ class UnitKonanTest extends KonanTest {
class RunKonanTest extends KonanTest {
void compileTest(File sourceS, File runtimeS, File libraryPath, File exe) {
project.execClang {
commandLine "clang++", launcherBc.absolutePath, runtimeS.absolutePath, stdlibKtBc.absolutePath, sourceS.absolutePath,
commandLine "clang++", launcherBc.absolutePath, startKtBc.absolutePath, runtimeS.absolutePath, stdlibKtBc.absolutePath, sourceS.absolutePath,
"-o", exe.absolutePath, linkDl(), linkM(), rdynamic(), '-xc'
}
}
@@ -611,3 +612,8 @@ task args0(type: RunKonanTest) {
source = "runtime/basic/args0.kt"
}
task main_exception(type: RunKonanTest) {
goldValue = "Uncaught exception from kotlin main: Throwable\n"
source = "runtime/basic/main_exception.kt"
}
+2 -2
View File
@@ -22,14 +22,14 @@ ArrayHeader* setupArgs(int argc, char** argv) {
return args;
}
extern "C" void konanMain(void*) asm("_kfun:main(Array<String>)");
extern "C" void konanStart(void*) asm("_kfun:start(Array<String>)");
int main(int argc, char** argv) {
InitMemory();
ArrayHeader* args = setupArgs(argc, argv);
konanMain(args);
konanStart(args);
// Yes, we have to follow Java convention and return zero.
return 0;
@@ -0,0 +1,16 @@
external fun main(args: Array<String>)
fun start(args: Array<String>) {
try {
// This is kotlin program main entry point
main(args)
} catch (e: Throwable) {
// TODO: Remove .toString() when println is more capabe,
// and may be add some more info.
print("Uncaught exception from kotlin main: ")
println(e.toString())
}
}