[Native][Tests] Make it possible to run LLVM Clang
Not all K/N targets have Clang in their toolchain. Thus, we need to run the one from LLVM in our tests.
This commit is contained in:
committed by
Space Team
parent
c165171471
commit
2ed84f6a11
+2
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck
|
|||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.ClangDistribution
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.DEFAULT_MODULE_NAME
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.DEFAULT_MODULE_NAME
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
|
||||||
@@ -68,6 +69,7 @@ abstract class AbstractNativeCExportTest(
|
|||||||
val includeDirectories = binaryLibrary.headerFile?.let { listOf(it.parentFile) } ?: emptyList()
|
val includeDirectories = binaryLibrary.headerFile?.let { listOf(it.parentFile) } ?: emptyList()
|
||||||
val libraryName = binaryLibrary.libraryFile.nameWithoutExtension.substringAfter("lib")
|
val libraryName = binaryLibrary.libraryFile.nameWithoutExtension.substringAfter("lib")
|
||||||
compileWithClang(
|
compileWithClang(
|
||||||
|
clangDistribution = ClangDistribution.LlvmDistribution,
|
||||||
sourceFiles = cSources,
|
sourceFiles = cSources,
|
||||||
includeDirectories = includeDirectories,
|
includeDirectories = includeDirectories,
|
||||||
outputFile = executableFile,
|
outputFile = executableFile,
|
||||||
|
|||||||
+4
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.LLDB
|
|||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.PipelineType
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.PipelineType
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.ClangDistribution
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.LLDBSessionSpec
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.LLDBSessionSpec
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang
|
||||||
import org.junit.jupiter.api.Assumptions
|
import org.junit.jupiter.api.Assumptions
|
||||||
@@ -224,6 +225,9 @@ class ObjCToKotlinSteppingInLLDBTest : AbstractNativeSimpleTest() {
|
|||||||
val executableFile = File(buildDir, clangExecutableName)
|
val executableFile = File(buildDir, clangExecutableName)
|
||||||
|
|
||||||
compileWithClang(
|
compileWithClang(
|
||||||
|
// This code was initially written against clang from toolchain.
|
||||||
|
// Changing it to another one probably won't hurt, but it was not tested.
|
||||||
|
clangDistribution = ClangDistribution.Toolchain,
|
||||||
sourceFiles = listOf(clangFile),
|
sourceFiles = listOf(clangFile),
|
||||||
outputFile = executableFile,
|
outputFile = executableFile,
|
||||||
frameworkDirectories = listOf(buildDir),
|
frameworkDirectories = listOf(buildDir),
|
||||||
|
|||||||
+23
-1
@@ -9,9 +9,27 @@ import org.jetbrains.kotlin.konan.test.blackbox.AbstractNativeSimpleTest
|
|||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies which Clang should be used for compilation.
|
||||||
|
*/
|
||||||
|
internal enum class ClangDistribution {
|
||||||
|
/**
|
||||||
|
* Use Clang from target's toolchain.
|
||||||
|
* Note that not all targets do have a toolchain with Clang.
|
||||||
|
* For example, Apple targets do (from Xcode), and GCC-based Linux targets do not.
|
||||||
|
*/
|
||||||
|
Toolchain,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use Clang from Kotlin/Native LLVM distribution.
|
||||||
|
*/
|
||||||
|
LlvmDistribution
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: absoluteTargetToolchain might not work correctly with KONAN_USE_INTERNAL_SERVER because
|
// FIXME: absoluteTargetToolchain might not work correctly with KONAN_USE_INTERNAL_SERVER because
|
||||||
// :kotlin-native:dependencies:update is not a dependency of :native:native.tests:test where this test runs
|
// :kotlin-native:dependencies:update is not a dependency of :native:native.tests:test where this test runs
|
||||||
internal fun AbstractNativeSimpleTest.compileWithClang(
|
internal fun AbstractNativeSimpleTest.compileWithClang(
|
||||||
|
clangDistribution: ClangDistribution = ClangDistribution.LlvmDistribution,
|
||||||
sourceFiles: List<File>,
|
sourceFiles: List<File>,
|
||||||
outputFile: File,
|
outputFile: File,
|
||||||
includeDirectories: List<File> = emptyList(),
|
includeDirectories: List<File> = emptyList(),
|
||||||
@@ -20,8 +38,12 @@ internal fun AbstractNativeSimpleTest.compileWithClang(
|
|||||||
libraries: List<String> = emptyList(),
|
libraries: List<String> = emptyList(),
|
||||||
additionalLinkerFlags: List<String> = emptyList(),
|
additionalLinkerFlags: List<String> = emptyList(),
|
||||||
) {
|
) {
|
||||||
|
val clang = when (clangDistribution) {
|
||||||
|
ClangDistribution.Toolchain -> "${testRunSettings.configurables.absoluteTargetToolchain}/bin/clang"
|
||||||
|
ClangDistribution.LlvmDistribution -> "${testRunSettings.configurables.absoluteLlvmHome}/bin/clang"
|
||||||
|
}
|
||||||
val process = ProcessBuilder(
|
val process = ProcessBuilder(
|
||||||
"${testRunSettings.configurables.absoluteTargetToolchain}/bin/clang",
|
clang,
|
||||||
*sourceFiles.map { it.absolutePath }.toTypedArray(),
|
*sourceFiles.map { it.absolutePath }.toTypedArray(),
|
||||||
*includeDirectories.flatMap { listOf("-I", it.absolutePath) }.toTypedArray(),
|
*includeDirectories.flatMap { listOf("-I", it.absolutePath) }.toTypedArray(),
|
||||||
"-isysroot", testRunSettings.configurables.absoluteTargetSysRoot,
|
"-isysroot", testRunSettings.configurables.absoluteTargetSysRoot,
|
||||||
|
|||||||
Reference in New Issue
Block a user