diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCExportTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCExportTest.kt index 0d5c1410518..c154c17d7bc 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCExportTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCExportTest.kt @@ -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, diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ObjCToKotlinSteppingInLLDBTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ObjCToKotlinSteppingInLLDBTest.kt index f61f6426e19..ebe124de69f 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ObjCToKotlinSteppingInLLDBTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ObjCToKotlinSteppingInLLDBTest.kt @@ -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), diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt index fed57e61c1e..93e1dc450de 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt @@ -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, outputFile: File, includeDirectories: List = emptyList(), @@ -20,8 +38,12 @@ internal fun AbstractNativeSimpleTest.compileWithClang( libraries: List = emptyList(), additionalLinkerFlags: List = 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,