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'
|
build.dependsOn 'compilerClasses','cli_bcClasses','bc_frontendClasses'
|
||||||
|
|
||||||
|
|
||||||
task stdlib(type: JavaExec) {
|
task stdlib(type: JavaExec) {
|
||||||
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
||||||
classpath configurations.cli_bc
|
classpath configurations.cli_bc
|
||||||
@@ -182,6 +181,27 @@ task stdlib(type: JavaExec) {
|
|||||||
environment 'LD_LIBRARY_PATH' : "${llvmDir}/lib:${project.buildDir}/nativelibs"
|
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) {
|
task run(type: JavaExec) {
|
||||||
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
main 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
||||||
classpath configurations.cli_bc
|
classpath configurations.cli_bc
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ abstract class KonanTest extends DefaultTask {
|
|||||||
def llvmLlc = llvmTool("llc")
|
def llvmLlc = llvmTool("llc")
|
||||||
def runtimeBc = new File("${runtimeProject.buildDir.canonicalPath}/runtime.bc")
|
def runtimeBc = new File("${runtimeProject.buildDir.canonicalPath}/runtime.bc")
|
||||||
def launcherBc = new File("${runtimeProject.buildDir.canonicalPath}/launcher.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 stdlibKtBc = new File("${runtimeProject.buildDir.canonicalPath}/stdlib.kt.bc")
|
||||||
def mainC = 'main.c'
|
def mainC = 'main.c'
|
||||||
String goldValue = null
|
String goldValue = null
|
||||||
@@ -136,7 +137,7 @@ class UnitKonanTest extends KonanTest {
|
|||||||
class RunKonanTest extends KonanTest {
|
class RunKonanTest extends KonanTest {
|
||||||
void compileTest(File sourceS, File runtimeS, File libraryPath, File exe) {
|
void compileTest(File sourceS, File runtimeS, File libraryPath, File exe) {
|
||||||
project.execClang {
|
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'
|
"-o", exe.absolutePath, linkDl(), linkM(), rdynamic(), '-xc'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -611,3 +612,8 @@ task args0(type: RunKonanTest) {
|
|||||||
source = "runtime/basic/args0.kt"
|
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;
|
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) {
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
InitMemory();
|
InitMemory();
|
||||||
|
|
||||||
ArrayHeader* args = setupArgs(argc, argv);
|
ArrayHeader* args = setupArgs(argc, argv);
|
||||||
konanMain(args);
|
konanStart(args);
|
||||||
|
|
||||||
// Yes, we have to follow Java convention and return zero.
|
// Yes, we have to follow Java convention and return zero.
|
||||||
return 0;
|
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