From 3ad8fed5a303a46a18593cf1bc494d126d23bd40 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Tue, 13 Feb 2024 14:40:57 +0100 Subject: [PATCH] [K/N][Tests] Migrate test embedStaticLibraries.kt ^KT-61259 --- .../backend.native/tests/build.gradle | 29 --------- .../embedStaticLibraries.def | 2 - .../interop/embedStaticLibraries/1.c | 0 .../interop/embedStaticLibraries/2.c | 0 .../interop/embedStaticLibraries/3.c | 0 .../interop/embedStaticLibraries/4.c | 0 .../embedStaticLibraries.h | 0 .../embedStaticLibraries.kt | 0 .../test/blackbox/ComplexCInteropTest.kt | 65 +++++++++++++++++++ 9 files changed, 65 insertions(+), 31 deletions(-) delete mode 100644 kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.def rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/embedStaticLibraries/1.c (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/embedStaticLibraries/2.c (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/embedStaticLibraries/3.c (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/embedStaticLibraries/4.c (100%) rename {kotlin-native/backend.native/tests => native/native.tests/testData}/interop/embedStaticLibraries/embedStaticLibraries.h (100%) rename kotlin-native/backend.native/tests/interop/embedStaticLibraries/main.kt => native/native.tests/testData/interop/embedStaticLibraries/embedStaticLibraries.kt (100%) diff --git a/kotlin-native/backend.native/tests/build.gradle b/kotlin-native/backend.native/tests/build.gradle index eef53468be3..0c67a07d614 100644 --- a/kotlin-native/backend.native/tests/build.gradle +++ b/kotlin-native/backend.native/tests/build.gradle @@ -947,30 +947,6 @@ createInterop("sockets") { it.defFile 'interop/basics/sockets.def' } -createInterop("embedStaticLibraries") { - it.defFile 'interop/embedStaticLibraries/embedStaticLibraries.def' - it.headers "$projectDir/interop/embedStaticLibraries/embedStaticLibraries.h" - - // Note: also hardcoded in def file. - final File libDir = project.layout.buildDirectory.dir("embedStaticLibraries").get().asFile - - it.getByTarget(target.name).configure { - doFirst { - 1.upto(4) { - UtilsKt.buildStaticLibrary( - project, - [file("$projectDir/interop/embedStaticLibraries/${it}.c")], - file("$libDir/${it}.a"), - file("$libDir/${it}.objs"), - ) - } - } - } - - it.extraOpts '-staticLibrary', "1.a" - it.extraOpts '-staticLibrary', "2.a" -} - createInterop("kt43502") { it.defFile 'interop/kt43502/kt43502.def' it.headers "$projectDir/interop/kt43502/kt43502.h" @@ -1150,11 +1126,6 @@ standaloneTest("interop_objc_allocException") { UtilsKt.dependsOnPlatformLibs(it) } -interopTest("interop_embedStaticLibraries") { - source = "interop/embedStaticLibraries/main.kt" - interop = 'embedStaticLibraries' -} - dynamicTest("interop_kt43502") { interop = "kt43502" source = "interop/kt43502/main.kt" diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.def b/kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.def deleted file mode 100644 index 15f734d660a..00000000000 --- a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.def +++ /dev/null @@ -1,2 +0,0 @@ -libraryPaths = build/embedStaticLibraries -staticLibraries = 3.a 4.a diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/1.c b/native/native.tests/testData/interop/embedStaticLibraries/1.c similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/1.c rename to native/native.tests/testData/interop/embedStaticLibraries/1.c diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/2.c b/native/native.tests/testData/interop/embedStaticLibraries/2.c similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/2.c rename to native/native.tests/testData/interop/embedStaticLibraries/2.c diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/3.c b/native/native.tests/testData/interop/embedStaticLibraries/3.c similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/3.c rename to native/native.tests/testData/interop/embedStaticLibraries/3.c diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/4.c b/native/native.tests/testData/interop/embedStaticLibraries/4.c similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/4.c rename to native/native.tests/testData/interop/embedStaticLibraries/4.c diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.h b/native/native.tests/testData/interop/embedStaticLibraries/embedStaticLibraries.h similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/embedStaticLibraries.h rename to native/native.tests/testData/interop/embedStaticLibraries/embedStaticLibraries.h diff --git a/kotlin-native/backend.native/tests/interop/embedStaticLibraries/main.kt b/native/native.tests/testData/interop/embedStaticLibraries/embedStaticLibraries.kt similarity index 100% rename from kotlin-native/backend.native/tests/interop/embedStaticLibraries/main.kt rename to native/native.tests/testData/interop/embedStaticLibraries/embedStaticLibraries.kt diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt index 18e94b97b59..86b8d28032b 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/ComplexCInteropTest.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.konan.test.blackbox import com.intellij.testFramework.TestDataPath +import org.jetbrains.kotlin.konan.target.ClangArgs import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.isSimulator import org.jetbrains.kotlin.konan.test.blackbox.support.* @@ -21,12 +22,14 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.* import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts import org.jetbrains.kotlin.konan.test.blackbox.support.util.ClangDistribution import org.jetbrains.kotlin.konan.test.blackbox.support.util.compileWithClang +import org.jetbrains.kotlin.native.executors.runProcess import org.jetbrains.kotlin.test.TestMetadata import org.junit.jupiter.api.Assumptions import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File import kotlin.test.assertTrue +import kotlin.time.Duration @TestDataPath("\$PROJECT_ROOT") class ClassicComplexCInteropTest : ComplexCInteropTestBase() @@ -40,6 +43,68 @@ abstract class ComplexCInteropTestBase : AbstractNativeSimpleTest() { private val interopDir = File("native/native.tests/testData/interop") private val interopObjCDir = interopDir.resolve("objc") + @Test + @TestMetadata("embedStaticLibraries.kt") + fun testEmbedStaticLibraries() { + val llvmAr = ClangArgs.Native(testRunSettings.configurables).llvmAr().first() + val embedStaticLibrariesDir = interopDir.resolve("embedStaticLibraries") + (1..4).forEach { + val source = embedStaticLibrariesDir.resolve("$it.c") + val obj = buildDir.resolve("$it.o") + compileWithClang( + clangDistribution = ClangDistribution.Llvm, + sourceFiles = listOf(source), + includeDirectories = emptyList(), + outputFile = obj, + libraryDirectories = emptyList(), + libraries = emptyList(), + additionalClangFlags = listOf("-c"), + fmodules = false, // with `-fmodules`, ld cannot find symbol `_assert` + ).assertSuccess() + val libFile = buildDir.resolve("$it.a") + runProcess(llvmAr, "-rc", libFile.absolutePath, obj.absolutePath) { + timeout = Duration.parse("1m") + } + assertTrue(libFile.exists()) + } + val defFile = buildDir.resolve("embedStaticLibraries.def").also { + it.printWriter().use { + it.println( + """ + libraryPaths = ${buildDir.absolutePath.replace("\\", "/")} + staticLibraries = 3.a 4.a + """.trimIndent() + ) + } + } + val cinteropKlib = cinteropToLibrary( + targets = targets, + defFile = defFile, + outputDir = buildDir, + freeCompilerArgs = TestCompilerArgs( + emptyList(), cinteropArgs = listOf( + "-header", embedStaticLibrariesDir.resolve("embedStaticLibraries.h").absolutePath, + "-staticLibrary", "1.a", + "-staticLibrary", "2.a", + ) + ) + ).assertSuccess().resultingArtifact + + val testCase = generateTestCaseWithSingleFile( + sourceFile = embedStaticLibrariesDir.resolve("embedStaticLibraries.kt"), + testKind = TestKind.STANDALONE_NO_TR, + extras = TestCase.NoTestRunnerExtras("main"), + freeCompilerArgs = TestCompilerArgs("-opt-in=kotlinx.cinterop.ExperimentalForeignApi"), + ) + val compilationResult = compileToExecutable(testCase, cinteropKlib.asLibraryDependency()).assertSuccess() + val testExecutable = TestExecutable( + compilationResult.resultingArtifact, + compilationResult.loggedData, + listOf(TestName("embedStaticLibraries")) + ) + runExecutableAndVerify(testCase, testExecutable) + } + @Test @TestMetadata("smoke.kt") fun testInteropObjCSmokeGC() {