[Native][Tests] Generalise SwiftCompilation

We will produce dynamic libraries in case of Swift export tests,
and we don't need some flags there as well.
This commit is contained in:
Sergey Bogolepov
2024-02-09 14:13:32 +02:00
parent cb0d78d443
commit 95429b52f9
2 changed files with 14 additions and 12 deletions
@@ -471,7 +471,11 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() {
""".trimMargin() """.trimMargin()
) )
} }
val frameworkOpts = listOf(
"-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks",
"-Xlinker", "-rpath", "-Xlinker", buildDir.absolutePath,
"-F", buildDir.absolutePath
)
return SwiftCompilation( return SwiftCompilation(
testRunSettings, testRunSettings,
testSources + listOf( testSources + listOf(
@@ -479,7 +483,8 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() {
testSuiteDir.resolve("main.swift") testSuiteDir.resolve("main.swift")
), ),
TestCompilationArtifact.Executable(buildDir.resolve("swiftTestExecutable")), TestCompilationArtifact.Executable(buildDir.resolve("swiftTestExecutable")),
swiftExtraOpts, swiftExtraOpts + frameworkOpts,
outputFile = { executable -> executable.executableFile }
).result.assertSuccess() ).result.assertSuccess()
} }
} }
@@ -438,28 +438,25 @@ internal class CInteropCompilation(
} }
} }
internal class SwiftCompilation( internal class SwiftCompilation<T: TestCompilationArtifact>(
testRunSettings: Settings, testRunSettings: Settings,
sources: List<File>, sources: List<File>,
expectedArtifact: Executable, expectedArtifact: T,
swiftExtraOpts: List<String>, swiftExtraOpts: List<String>,
) : TestCompilation<Executable>() { outputFile: (T) -> File,
override val result: TestCompilationResult<out Executable> by lazy { ) : TestCompilation<T>() {
val buildDir = testRunSettings.get<Binaries>().testBinariesDir override val result: TestCompilationResult<out T> by lazy {
val configs = testRunSettings.configurables as AppleConfigurables val configs = testRunSettings.configurables as AppleConfigurables
val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString() val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString()
val args = swiftExtraOpts + sources.map { it.absolutePath } + listOf( val args = swiftExtraOpts + sources.map { it.absolutePath } + listOf(
"-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget, "-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget,
"-o", expectedArtifact.executableFile.absolutePath, "-o", outputFile(expectedArtifact).absolutePath,
"-g", // TODO https://youtrack.jetbrains.com/issue/KT-65436/K-N-ObjCExport-tests-use-various-optimization-flags-for-swiftc "-g", // TODO https://youtrack.jetbrains.com/issue/KT-65436/K-N-ObjCExport-tests-use-various-optimization-flags-for-swiftc
"-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks",
"-Xlinker", "-rpath", "-Xlinker", buildDir.absolutePath,
"-F", buildDir.absolutePath,
"-Xcc", "-Werror", // To fail compilation on warnings in framework header. "-Xcc", "-Werror", // To fail compilation on warnings in framework header.
) )
val loggedSwiftCParameters = LoggedData.SwiftCParameters(args, sources) val loggedSwiftCParameters = LoggedData.SwiftCParameters(args, sources)
val (loggedCall: LoggedData, immediateResult: TestCompilationResult.ImmediateResult<out Executable>) = try { val (loggedCall: LoggedData, immediateResult: TestCompilationResult.ImmediateResult<out T>) = try {
val (exitCode, swiftcOutput, swiftcOutputHasErrors, duration) = val (exitCode, swiftcOutput, swiftcOutputHasErrors, duration) =
invokeSwiftC(testRunSettings, args) invokeSwiftC(testRunSettings, args)