Added "start" function between the C launcher and Kotlin "main"
This commit is contained in:
committed by
alexander-gorshenev
parent
1aa7b23853
commit
22d748001d
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user