A -produce dynamic test.
This commit is contained in:
committed by
alexander-gorshenev
parent
ff4a0a03b2
commit
bf612fdbdc
+1
-1
@@ -71,7 +71,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
|
|||||||
private val suffix = produce.suffix(target)
|
private val suffix = produce.suffix(target)
|
||||||
val outputName = configuration.get(KonanConfigKeys.OUTPUT)?.removeSuffixIfPresent(suffix) ?: produce.name.toLowerCase()
|
val outputName = configuration.get(KonanConfigKeys.OUTPUT)?.removeSuffixIfPresent(suffix) ?: produce.name.toLowerCase()
|
||||||
val outputFile = outputName
|
val outputFile = outputName
|
||||||
.prefixIfNot(prefix)
|
.prefixBaseNameIfNot(prefix)
|
||||||
.suffixIfNot(suffix)
|
.suffixIfNot(suffix)
|
||||||
|
|
||||||
val tempFiles = TempFiles(outputName)
|
val tempFiles = TempFiles(outputName)
|
||||||
|
|||||||
+8
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.konan.util
|
package org.jetbrains.kotlin.backend.konan.util
|
||||||
|
|
||||||
import kotlin.system.measureTimeMillis
|
import kotlin.system.measureTimeMillis
|
||||||
|
import org.jetbrains.kotlin.konan.file.*
|
||||||
|
|
||||||
fun printMillisec(message: String, body: () -> Unit) {
|
fun printMillisec(message: String, body: () -> Unit) {
|
||||||
val msec = measureTimeMillis{
|
val msec = measureTimeMillis{
|
||||||
@@ -39,6 +40,13 @@ fun nTabs(amount: Int): String {
|
|||||||
fun String.prefixIfNot(prefix: String) =
|
fun String.prefixIfNot(prefix: String) =
|
||||||
if (this.startsWith(prefix)) this else "$prefix$this"
|
if (this.startsWith(prefix)) this else "$prefix$this"
|
||||||
|
|
||||||
|
fun String.prefixBaseNameIfNot(prefix: String): String {
|
||||||
|
val file = File(this)
|
||||||
|
val name = file.name
|
||||||
|
val directory = file.parent
|
||||||
|
return "$directory/${name.prefixIfNot(prefix)}"
|
||||||
|
}
|
||||||
|
|
||||||
fun String.suffixIfNot(suffix: String) =
|
fun String.suffixIfNot(suffix: String) =
|
||||||
if (this.endsWith(suffix)) this else "$this$suffix"
|
if (this.endsWith(suffix)) this else "$this$suffix"
|
||||||
|
|
||||||
|
|||||||
@@ -2336,6 +2336,12 @@ if (isMac()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task produce_dynamic(type: DynamicKonanTest) {
|
||||||
|
source = "produce_dynamic/simple/hello.kt"
|
||||||
|
cSource = "$projectDir/produce_dynamic/simple/main.c"
|
||||||
|
goldValue = "Hello, dynamic!\n"
|
||||||
|
}
|
||||||
|
|
||||||
task buildKonanTests(type: BuildKonanTest) {
|
task buildKonanTests(type: BuildKonanTest) {
|
||||||
compileList = [ "codegen", "datagen", "lower", "runtime", "serialization"]
|
compileList = [ "codegen", "datagen", "lower", "runtime", "serialization"]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
fun hello() {
|
||||||
|
println("Hello, dynamic!")
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#include "testlib_api.h"
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
testlib_symbols()->kotlin.root.hello();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -492,14 +492,45 @@ class LinkKonanTest extends KonanTest {
|
|||||||
protected String lib
|
protected String lib
|
||||||
|
|
||||||
void compileTest(List<String> filesToCompile, String exe) {
|
void compileTest(List<String> filesToCompile, String exe) {
|
||||||
def libDir = project.file(lib).absolutePath
|
def libname = "testklib"
|
||||||
def libBc = "${libDir}.bc"
|
def klib = "$outputDirectory/$libname"
|
||||||
|
|
||||||
runCompiler(lib, libBc, ['-produce', 'library'] + ((flags != null) ? flags :[]))
|
runCompiler(lib, klib, ['-produce', 'library'] + ((flags != null) ? flags :[]))
|
||||||
runCompiler(filesToCompile, exe, ['-library', libBc] + ((flags != null) ? flags :[]))
|
runCompiler(filesToCompile, exe, ['-library', klib] + ((flags != null) ? flags :[]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DynamicKonanTest extends KonanTest {
|
||||||
|
protected String cSource
|
||||||
|
|
||||||
|
void compileTest(List<String> filesToCompile, String exe) {
|
||||||
|
def libname = "testlib"
|
||||||
|
def dylib = "$outputDirectory/$libname"
|
||||||
|
def realExe = "${exe}.${targetManager.target.family.exeSuffix}"
|
||||||
|
|
||||||
|
runCompiler(filesToCompile, dylib, ['-produce', 'dynamic'] + ((flags != null) ? flags :[]))
|
||||||
|
runClang([cSource], realExe, ['-I', outputDirectory, '-L', outputDirectory, '-l', libname])
|
||||||
|
}
|
||||||
|
|
||||||
|
void runClang(List<String> cSources, String output, List<String> moreArgs) {
|
||||||
|
def log = new ByteArrayOutputStream()
|
||||||
|
project.execKonanClang(project.testTarget) {
|
||||||
|
workingDir outputDirectory
|
||||||
|
|
||||||
|
executable "clang"
|
||||||
|
args cSources
|
||||||
|
args '-o', output
|
||||||
|
args moreArgs
|
||||||
|
args "-Wl,-rpath,$outputDirectory"
|
||||||
|
|
||||||
|
standardOutput = log
|
||||||
|
errorOutput = log
|
||||||
|
}
|
||||||
|
def logString = log.toString("UTF-8")
|
||||||
|
project.file("${output}.compilation.log").write(logString)
|
||||||
|
println(logString)
|
||||||
|
}
|
||||||
|
}
|
||||||
class RunExternalTestGroup extends RunStandaloneKonanTest {
|
class RunExternalTestGroup extends RunStandaloneKonanTest {
|
||||||
|
|
||||||
def groupDirectory = "."
|
def groupDirectory = "."
|
||||||
|
|||||||
Reference in New Issue
Block a user