[Native][tests] Don't compile given KLIB libraries
This commit is contained in:
committed by
Space Team
parent
a8b0f8a145
commit
fbfb564b41
+8
-2
@@ -81,13 +81,15 @@ internal abstract class LoggedData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CompilerCall(
|
abstract class CompilerCall : LoggedData()
|
||||||
|
|
||||||
|
class RealCompilerCall(
|
||||||
private val parameters: CompilerParameters,
|
private val parameters: CompilerParameters,
|
||||||
private val exitCode: ExitCode,
|
private val exitCode: ExitCode,
|
||||||
private val compilerOutput: String,
|
private val compilerOutput: String,
|
||||||
private val compilerOutputHasErrors: Boolean,
|
private val compilerOutputHasErrors: Boolean,
|
||||||
private val duration: Duration
|
private val duration: Duration
|
||||||
) : LoggedData() {
|
) : CompilerCall() {
|
||||||
override fun computeText(): String {
|
override fun computeText(): String {
|
||||||
val problems = listOfNotNull(
|
val problems = listOfNotNull(
|
||||||
"- Non-zero exit code".takeIf { exitCode != ExitCode.OK },
|
"- Non-zero exit code".takeIf { exitCode != ExitCode.OK },
|
||||||
@@ -112,6 +114,10 @@ internal abstract class LoggedData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopCompilerCall(val artifactFile: File) : CompilerCall() {
|
||||||
|
override fun computeText() = "No compiler call performed for external (given) artifact $artifactFile"
|
||||||
|
}
|
||||||
|
|
||||||
class CompilerCallUnexpectedFailure(parameters: CompilerParameters, throwable: Throwable) : UnexpectedFailure(parameters, throwable)
|
class CompilerCallUnexpectedFailure(parameters: CompilerParameters, throwable: Throwable) : UnexpectedFailure(parameters, throwable)
|
||||||
|
|
||||||
class TestRunParameters(
|
class TestRunParameters(
|
||||||
|
|||||||
+5
-1
@@ -89,7 +89,7 @@ internal abstract class BasicCompilation<A : TestCompilationArtifact>(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val loggedCompilerCall =
|
val loggedCompilerCall =
|
||||||
LoggedData.CompilerCall(loggedCompilerParameters, exitCode, compilerOutput, compilerOutputHasErrors, duration)
|
LoggedData.RealCompilerCall(loggedCompilerParameters, exitCode, compilerOutput, compilerOutputHasErrors, duration)
|
||||||
|
|
||||||
val result = if (exitCode != ExitCode.OK || compilerOutputHasErrors)
|
val result = if (exitCode != ExitCode.OK || compilerOutputHasErrors)
|
||||||
TestCompilationResult.CompilerFailure(loggedCompilerCall)
|
TestCompilationResult.CompilerFailure(loggedCompilerCall)
|
||||||
@@ -185,6 +185,10 @@ internal class LibraryCompilation(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class GivenLibraryCompilation(givenArtifact: KLIB) : TestCompilation<KLIB>() {
|
||||||
|
override val result = TestCompilationResult.Success(givenArtifact, LoggedData.NoopCompilerCall(givenArtifact.klibFile))
|
||||||
|
}
|
||||||
|
|
||||||
internal class ExecutableCompilation(
|
internal class ExecutableCompilation(
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
freeCompilerArgs: TestCompilerArgs,
|
freeCompilerArgs: TestCompilerArgs,
|
||||||
|
|||||||
+21
-15
@@ -141,22 +141,27 @@ internal class TestCompilationFactory {
|
|||||||
val dependencies = collectDependencies(sourceModules, freeCompilerArgs, settings)
|
val dependencies = collectDependencies(sourceModules, freeCompilerArgs, settings)
|
||||||
val klibArtifact = KLIB(settings.artifactFileForKlib(sourceModules, freeCompilerArgs))
|
val klibArtifact = KLIB(settings.artifactFileForKlib(sourceModules, freeCompilerArgs))
|
||||||
|
|
||||||
|
val isGivenKlibArtifact = sourceModules.singleOrNull() is TestModule.Given
|
||||||
|
|
||||||
val staticCacheArtifactAndOptions: Pair<KLIBStaticCache, StaticCacheCompilation.Options>? = when (produceStaticCache) {
|
val staticCacheArtifactAndOptions: Pair<KLIBStaticCache, StaticCacheCompilation.Options>? = when (produceStaticCache) {
|
||||||
is ProduceStaticCache.No -> null // No artifact means no static cache should be compiled.
|
is ProduceStaticCache.No -> null // No artifact means no static cache should be compiled.
|
||||||
is ProduceStaticCache.Yes -> KLIBStaticCache(
|
is ProduceStaticCache.Yes -> KLIBStaticCache(
|
||||||
cacheDir = settings.cacheDirForStaticCache(klibArtifact),
|
cacheDir = settings.cacheDirForStaticCache(klibArtifact, isGivenKlibArtifact),
|
||||||
klib = klibArtifact
|
klib = klibArtifact
|
||||||
) to produceStaticCache.options
|
) to produceStaticCache.options
|
||||||
}
|
}
|
||||||
|
|
||||||
return cachedKlibCompilations.computeIfAbsent(cacheKey) {
|
return cachedKlibCompilations.computeIfAbsent(cacheKey) {
|
||||||
val klibCompilation = LibraryCompilation(
|
val klibCompilation = if (isGivenKlibArtifact)
|
||||||
settings = settings,
|
GivenLibraryCompilation(klibArtifact)
|
||||||
freeCompilerArgs = freeCompilerArgs,
|
else
|
||||||
sourceModules = sourceModules,
|
LibraryCompilation(
|
||||||
dependencies = dependencies.forKlib(),
|
settings = settings,
|
||||||
expectedArtifact = klibArtifact
|
freeCompilerArgs = freeCompilerArgs,
|
||||||
)
|
sourceModules = sourceModules,
|
||||||
|
dependencies = dependencies.forKlib(),
|
||||||
|
expectedArtifact = klibArtifact
|
||||||
|
)
|
||||||
|
|
||||||
val staticCacheCompilation: StaticCacheCompilation? =
|
val staticCacheCompilation: StaticCacheCompilation? =
|
||||||
staticCacheArtifactAndOptions?.let { (staticCacheArtifact, staticCacheOptions) ->
|
staticCacheArtifactAndOptions?.let { (staticCacheArtifact, staticCacheOptions) ->
|
||||||
@@ -227,19 +232,20 @@ internal class TestCompilationFactory {
|
|||||||
assertTrue(modules.none { module -> module is TestModule.Shared }) {
|
assertTrue(modules.none { module -> module is TestModule.Shared }) {
|
||||||
"Can't compile shared module together with any other module"
|
"Can't compile shared module together with any other module"
|
||||||
}
|
}
|
||||||
|
assertTrue(modules.none { module -> module is TestModule.Given }) {
|
||||||
|
"Can't compile given module together with any other module"
|
||||||
|
}
|
||||||
multiModuleArtifactFile(modules, "klib")
|
multiModuleArtifactFile(modules, "klib")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Settings.cacheDirForStaticCache(klibArtifact: KLIB): File {
|
private fun Settings.cacheDirForStaticCache(klibArtifact: KLIB, isGivenKlibArtifact: Boolean): File {
|
||||||
val binaries = get<Binaries>()
|
val artifactBaseDir = if (isGivenKlibArtifact) {
|
||||||
|
// Special case for the given (external) KLIB artifacts.
|
||||||
val artifactBaseDir = if (klibArtifact.klibFile.startsWith(binaries.testBinariesDir)) {
|
get<Binaries>().givenBinariesDir
|
||||||
|
} else {
|
||||||
// The KLIB artifact is located inside the build dir. This means it was built just a moment ago.
|
// The KLIB artifact is located inside the build dir. This means it was built just a moment ago.
|
||||||
klibArtifact.klibFile.parentFile
|
klibArtifact.klibFile.parentFile
|
||||||
} else {
|
|
||||||
// Special case for the given (external) KLIB artifacts.
|
|
||||||
binaries.givenBinariesDir
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return artifactBaseDir.resolve(STATIC_CACHE_DIR_NAME).apply { mkdirs() }
|
return artifactBaseDir.resolve(STATIC_CACHE_DIR_NAME).apply { mkdirs() }
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ internal sealed interface TestCompilationResult<A : TestCompilationArtifact> {
|
|||||||
data class Success<A : TestCompilationArtifact>(val resultingArtifact: A, override val loggedData: LoggedData.CompilerCall) :
|
data class Success<A : TestCompilationArtifact>(val resultingArtifact: A, override val loggedData: LoggedData.CompilerCall) :
|
||||||
ImmediateResult<A>
|
ImmediateResult<A>
|
||||||
|
|
||||||
data class CompilerFailure(override val loggedData: LoggedData.CompilerCall) : Failure
|
data class CompilerFailure(override val loggedData: LoggedData.RealCompilerCall) : Failure
|
||||||
data class UnexpectedFailure(override val loggedData: LoggedData.CompilerCallUnexpectedFailure) : Failure
|
data class UnexpectedFailure(override val loggedData: LoggedData.CompilerCallUnexpectedFailure) : Failure
|
||||||
data class DependencyFailures(val causes: Set<Failure>) : TestCompilationResult<Nothing>
|
data class DependencyFailures(val causes: Set<Failure>) : TestCompilationResult<Nothing>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user