[PL] Use CLI parameter -Xpartial-linkage with new semantics in Gradle plugin
This commit is contained in:
committed by
Space Team
parent
39b385f475
commit
1aa3e54459
+9
-6
@@ -42,6 +42,7 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.isAllowCommonizer
|
||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty
|
||||
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageMode
|
||||
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||
import org.jetbrains.kotlin.konan.properties.saveToFile
|
||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||
@@ -760,8 +761,10 @@ internal class CacheBuilder(
|
||||
private val rootCacheDirectory: File
|
||||
get() = settings.rootCacheDirectory
|
||||
|
||||
private val partialLinkage: Boolean
|
||||
get() = PARTIAL_LINKAGE in settings.toolOptions.freeCompilerArgs.get()
|
||||
private val partialLinkageMode: String
|
||||
get() = settings.toolOptions.freeCompilerArgs.get().mapNotNull { arg ->
|
||||
arg.substringAfter("$PARTIAL_LINKAGE_PARAMETER=", missingDelimiterValue = "").takeIf(String::isNotEmpty)
|
||||
}.lastOrNull() ?: PartialLinkageMode.DEFAULT.name
|
||||
|
||||
private fun getCacheDirectory(
|
||||
resolvedConfiguration: LazyResolvedConfiguration,
|
||||
@@ -771,7 +774,7 @@ internal class CacheBuilder(
|
||||
dependency = dependency,
|
||||
artifact = null,
|
||||
resolvedConfiguration = resolvedConfiguration,
|
||||
partialLinkage = partialLinkage
|
||||
partialLinkageMode = partialLinkageMode
|
||||
)
|
||||
|
||||
private fun needCache(libraryPath: String) =
|
||||
@@ -800,7 +803,7 @@ internal class CacheBuilder(
|
||||
dependency = dependency,
|
||||
considerArtifact = false,
|
||||
resolvedConfiguration = this,
|
||||
partialLinkage = partialLinkage
|
||||
partialLinkageMode = partialLinkageMode
|
||||
) ?: return
|
||||
|
||||
val cacheDirectory = getCacheDirectory(this, dependency)
|
||||
@@ -846,7 +849,7 @@ internal class CacheBuilder(
|
||||
if (debuggable) args += "-g"
|
||||
args += konanPropertiesService.additionalCacheFlags(konanTarget)
|
||||
args += settings.externalDependenciesArgs
|
||||
if (partialLinkage) args += PARTIAL_LINKAGE
|
||||
args += "$PARTIAL_LINKAGE_PARAMETER=$partialLinkageMode"
|
||||
args += "-Xadd-cache=${library.libraryFile.absolutePath}"
|
||||
args += "-Xcache-directory=${cacheDirectory.absolutePath}"
|
||||
args += "-Xcache-directory=${rootCacheDirectory.absolutePath}"
|
||||
@@ -955,7 +958,7 @@ internal class CacheBuilder(
|
||||
"${baseName}-cache"
|
||||
} ?: error("No output for kind $cacheKind")
|
||||
|
||||
private const val PARTIAL_LINKAGE = "-Xpartial-linkage"
|
||||
private const val PARTIAL_LINKAGE_PARAMETER = "-Xpartial-linkage"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-6
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.utils
|
||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageMode
|
||||
import org.jetbrains.kotlin.library.resolveSingleFileKlib
|
||||
import org.jetbrains.kotlin.library.uniqueName
|
||||
import java.io.File
|
||||
@@ -19,7 +20,7 @@ internal fun getCacheDirectory(
|
||||
dependency: ResolvedDependencyResult,
|
||||
artifact: ResolvedArtifactResult?,
|
||||
resolvedConfiguration: LazyResolvedConfiguration,
|
||||
partialLinkage: Boolean
|
||||
partialLinkageMode: String
|
||||
): File {
|
||||
val moduleCacheDirectory = File(rootCacheDirectory, dependency.selected.moduleVersion?.name ?: "undefined")
|
||||
val versionCacheDirectory = File(moduleCacheDirectory, dependency.selected.moduleVersion?.version ?: "undefined")
|
||||
@@ -41,14 +42,19 @@ internal fun getCacheDirectory(
|
||||
versionCacheDirectory.resolve(hash)
|
||||
} else versionCacheDirectory
|
||||
|
||||
return File(cacheDirectory, computeDependenciesHash(dependency, resolvedConfiguration, partialLinkage))
|
||||
return File(cacheDirectory, computeDependenciesHash(dependency, resolvedConfiguration, partialLinkageMode))
|
||||
}
|
||||
|
||||
internal fun ByteArray.toHexString() = joinToString("") { (0xFF and it.toInt()).toString(16).padStart(2, '0') }
|
||||
|
||||
private fun computeDependenciesHash(dependency: ResolvedDependencyResult, resolvedConfiguration: LazyResolvedConfiguration, partialLinkage: Boolean): String {
|
||||
private fun computeDependenciesHash(
|
||||
dependency: ResolvedDependencyResult,
|
||||
resolvedConfiguration: LazyResolvedConfiguration,
|
||||
partialLinkageMode: String
|
||||
): String {
|
||||
val hashedValue = buildString {
|
||||
if (partialLinkage) append("#__PL__#")
|
||||
if (PartialLinkageMode.resolveMode(partialLinkageMode)?.isEnabled == true)
|
||||
append("#__PL__#")
|
||||
|
||||
(listOf(dependency) + getAllDependencies(dependency))
|
||||
.flatMap { resolvedConfiguration.getArtifacts(it) }
|
||||
@@ -68,7 +74,7 @@ internal fun getDependenciesCacheDirectories(
|
||||
dependency: ResolvedDependencyResult,
|
||||
resolvedConfiguration: LazyResolvedConfiguration,
|
||||
considerArtifact: Boolean,
|
||||
partialLinkage: Boolean
|
||||
partialLinkageMode: String
|
||||
): List<File>? {
|
||||
return getAllDependencies(dependency)
|
||||
.flatMap { childDependency ->
|
||||
@@ -79,7 +85,7 @@ internal fun getDependenciesCacheDirectories(
|
||||
dependency = childDependency,
|
||||
artifact = if (considerArtifact) it else null,
|
||||
resolvedConfiguration = resolvedConfiguration,
|
||||
partialLinkage = partialLinkage
|
||||
partialLinkageMode = partialLinkageMode
|
||||
)
|
||||
if (!cacheDirectory.exists()) return null
|
||||
cacheDirectory
|
||||
|
||||
Reference in New Issue
Block a user