[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.settings.Timeouts
|
||||
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.compileWithClang
|
||||
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 libraryName = binaryLibrary.libraryFile.nameWithoutExtension.substringAfter("lib")
|
||||
compileWithClang(
|
||||
clangDistribution = ClangDistribution.LlvmDistribution,
|
||||
sourceFiles = cSources,
|
||||
includeDirectories = includeDirectories,
|
||||
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.Timeouts
|
||||
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.compileWithClang
|
||||
import org.junit.jupiter.api.Assumptions
|
||||
@@ -224,6 +225,9 @@ class ObjCToKotlinSteppingInLLDBTest : AbstractNativeSimpleTest() {
|
||||
val executableFile = File(buildDir, clangExecutableName)
|
||||
|
||||
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),
|
||||
outputFile = executableFile,
|
||||
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 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
|
||||
// :kotlin-native:dependencies:update is not a dependency of :native:native.tests:test where this test runs
|
||||
internal fun AbstractNativeSimpleTest.compileWithClang(
|
||||
clangDistribution: ClangDistribution = ClangDistribution.LlvmDistribution,
|
||||
sourceFiles: List<File>,
|
||||
outputFile: File,
|
||||
includeDirectories: List<File> = emptyList(),
|
||||
@@ -20,8 +38,12 @@ internal fun AbstractNativeSimpleTest.compileWithClang(
|
||||
libraries: 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(
|
||||
"${testRunSettings.configurables.absoluteTargetToolchain}/bin/clang",
|
||||
clang,
|
||||
*sourceFiles.map { it.absolutePath }.toTypedArray(),
|
||||
*includeDirectories.flatMap { listOf("-I", it.absolutePath) }.toTypedArray(),
|
||||
"-isysroot", testRunSettings.configurables.absoluteTargetSysRoot,
|
||||
|
||||
Reference in New Issue
Block a user