[K/N] Support cross targets in FileCheckTest
Also mark property's getter with Input and Optional annotations instead of property itself.
This commit is contained in:
@@ -5895,6 +5895,7 @@ Task fileCheckTest(String name, Closure<FileCheckTest> configureClosure) {
|
||||
return project.tasks.create(name, FileCheckTest) { task ->
|
||||
task.configure(configureClosure)
|
||||
task.llvmIr = project.file("$testOutputFileCheck/$name/$target/out.${task.phaseToCheck}.ll")
|
||||
def target = task.target
|
||||
if (task.enabled) {
|
||||
konanArtifacts {
|
||||
def lib = task.interop
|
||||
|
||||
@@ -11,8 +11,8 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileProgramTask
|
||||
import org.jetbrains.kotlin.konan.target.AppleConfigurables
|
||||
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileTask
|
||||
import org.jetbrains.kotlin.konan.target.*
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Files
|
||||
@@ -21,15 +21,6 @@ import java.nio.file.Files
|
||||
* Gradle task that wraps FileCheck LLVM utility.
|
||||
*/
|
||||
open class FileCheckTest : DefaultTask() {
|
||||
|
||||
private val target = project.testTarget
|
||||
private val platform = project.platformManager.platform(target)
|
||||
private val configurables = platform.configurables
|
||||
|
||||
private val llvmBin = "${configurables.absoluteLlvmHome}/bin"
|
||||
|
||||
private val fileCheck = "$llvmBin/FileCheck"
|
||||
|
||||
/**
|
||||
* File annotated with FileCheck directives.
|
||||
*/
|
||||
@@ -45,8 +36,8 @@ open class FileCheckTest : DefaultTask() {
|
||||
/**
|
||||
* Optional cinterop task dependency.
|
||||
*/
|
||||
@Optional
|
||||
@Input
|
||||
@get:Optional
|
||||
@get:Input
|
||||
var interop: String? = null
|
||||
|
||||
@TaskAction
|
||||
@@ -57,23 +48,43 @@ open class FileCheckTest : DefaultTask() {
|
||||
/**
|
||||
* What prefix should checked for pattern instead of default CHECK?
|
||||
*/
|
||||
@Input
|
||||
@Optional
|
||||
@get:Input
|
||||
@get:Optional
|
||||
var checkPrefix: String? = null
|
||||
|
||||
/**
|
||||
* Compiler pipeline phase name, after which check should be done
|
||||
*/
|
||||
@Input
|
||||
@get:Input
|
||||
var phaseToCheck: String = "CStubs"
|
||||
|
||||
/**
|
||||
* Should we generate framework instead of an executable?
|
||||
* This option is useful for, well, checking framework-specific code.
|
||||
*/
|
||||
@Input
|
||||
@get:Input
|
||||
var generateFramework: Boolean = false
|
||||
|
||||
@get:Input
|
||||
@get:Optional
|
||||
var additionalFileCheckFlags: List<String>? = null
|
||||
|
||||
@get:Optional
|
||||
@get:Input
|
||||
var targetName: String = project.testTarget.name
|
||||
|
||||
@get:Internal
|
||||
val target: KonanTarget
|
||||
get() = project.platformManager.targetByName(targetName)
|
||||
|
||||
override fun configure(closure: Closure<*>): Task {
|
||||
super.configure(closure)
|
||||
if (target != HostManager.host) {
|
||||
dependsOnCrossDist(target)
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that [inputFile] matches [annotatedFile] with FileCheck.
|
||||
*/
|
||||
@@ -82,6 +93,10 @@ open class FileCheckTest : DefaultTask() {
|
||||
checkPrefix?.let {
|
||||
args.addAll(listOf("--check-prefix", it))
|
||||
}
|
||||
val platform = project.platformManager.platform(target)
|
||||
val configurables = platform.configurables
|
||||
val llvmBin = "${configurables.absoluteLlvmHome}/bin"
|
||||
val fileCheck = "$llvmBin/FileCheck"
|
||||
return runProcess(localExecutor(project), fileCheck, *args.toTypedArray())
|
||||
.ensureSuccessful(fileCheck, *args.toTypedArray())
|
||||
}
|
||||
|
||||
@@ -264,6 +264,20 @@ fun Task.dependsOnDist() {
|
||||
}
|
||||
}
|
||||
|
||||
fun Task.dependsOnCrossDist(target: KonanTarget) {
|
||||
if (project.isDefaultNativeHome) {
|
||||
if (target != HostManager.host) {
|
||||
// if a test_target property is set then tests should depend on a crossDist
|
||||
// otherwise, runtime components would not be build for a target.
|
||||
dependsOn(":kotlin-native:${target.name}CrossDist")
|
||||
}
|
||||
} else {
|
||||
if (!project.isCrossDist) {
|
||||
dependsOn(":kotlin-native:${target.name}CrossDist")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Task.konanOldPluginTaskDependenciesWalker(index:Int = 0, walker: Task.(Int)->Unit) {
|
||||
walker(index + 1)
|
||||
dependsOn.forEach{
|
||||
|
||||
Reference in New Issue
Block a user