[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.targets.native.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty
|
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.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||||
import org.jetbrains.kotlin.konan.properties.saveToFile
|
import org.jetbrains.kotlin.konan.properties.saveToFile
|
||||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||||
@@ -760,8 +761,10 @@ internal class CacheBuilder(
|
|||||||
private val rootCacheDirectory: File
|
private val rootCacheDirectory: File
|
||||||
get() = settings.rootCacheDirectory
|
get() = settings.rootCacheDirectory
|
||||||
|
|
||||||
private val partialLinkage: Boolean
|
private val partialLinkageMode: String
|
||||||
get() = PARTIAL_LINKAGE in settings.toolOptions.freeCompilerArgs.get()
|
get() = settings.toolOptions.freeCompilerArgs.get().mapNotNull { arg ->
|
||||||
|
arg.substringAfter("$PARTIAL_LINKAGE_PARAMETER=", missingDelimiterValue = "").takeIf(String::isNotEmpty)
|
||||||
|
}.lastOrNull() ?: PartialLinkageMode.DEFAULT.name
|
||||||
|
|
||||||
private fun getCacheDirectory(
|
private fun getCacheDirectory(
|
||||||
resolvedConfiguration: LazyResolvedConfiguration,
|
resolvedConfiguration: LazyResolvedConfiguration,
|
||||||
@@ -771,7 +774,7 @@ internal class CacheBuilder(
|
|||||||
dependency = dependency,
|
dependency = dependency,
|
||||||
artifact = null,
|
artifact = null,
|
||||||
resolvedConfiguration = resolvedConfiguration,
|
resolvedConfiguration = resolvedConfiguration,
|
||||||
partialLinkage = partialLinkage
|
partialLinkageMode = partialLinkageMode
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun needCache(libraryPath: String) =
|
private fun needCache(libraryPath: String) =
|
||||||
@@ -800,7 +803,7 @@ internal class CacheBuilder(
|
|||||||
dependency = dependency,
|
dependency = dependency,
|
||||||
considerArtifact = false,
|
considerArtifact = false,
|
||||||
resolvedConfiguration = this,
|
resolvedConfiguration = this,
|
||||||
partialLinkage = partialLinkage
|
partialLinkageMode = partialLinkageMode
|
||||||
) ?: return
|
) ?: return
|
||||||
|
|
||||||
val cacheDirectory = getCacheDirectory(this, dependency)
|
val cacheDirectory = getCacheDirectory(this, dependency)
|
||||||
@@ -846,7 +849,7 @@ internal class CacheBuilder(
|
|||||||
if (debuggable) args += "-g"
|
if (debuggable) args += "-g"
|
||||||
args += konanPropertiesService.additionalCacheFlags(konanTarget)
|
args += konanPropertiesService.additionalCacheFlags(konanTarget)
|
||||||
args += settings.externalDependenciesArgs
|
args += settings.externalDependenciesArgs
|
||||||
if (partialLinkage) args += PARTIAL_LINKAGE
|
args += "$PARTIAL_LINKAGE_PARAMETER=$partialLinkageMode"
|
||||||
args += "-Xadd-cache=${library.libraryFile.absolutePath}"
|
args += "-Xadd-cache=${library.libraryFile.absolutePath}"
|
||||||
args += "-Xcache-directory=${cacheDirectory.absolutePath}"
|
args += "-Xcache-directory=${cacheDirectory.absolutePath}"
|
||||||
args += "-Xcache-directory=${rootCacheDirectory.absolutePath}"
|
args += "-Xcache-directory=${rootCacheDirectory.absolutePath}"
|
||||||
@@ -955,7 +958,7 @@ internal class CacheBuilder(
|
|||||||
"${baseName}-cache"
|
"${baseName}-cache"
|
||||||
} ?: error("No output for kind $cacheKind")
|
} ?: 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.ResolvedArtifactResult
|
||||||
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||||
import org.gradle.api.logging.Logger
|
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.resolveSingleFileKlib
|
||||||
import org.jetbrains.kotlin.library.uniqueName
|
import org.jetbrains.kotlin.library.uniqueName
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -19,7 +20,7 @@ internal fun getCacheDirectory(
|
|||||||
dependency: ResolvedDependencyResult,
|
dependency: ResolvedDependencyResult,
|
||||||
artifact: ResolvedArtifactResult?,
|
artifact: ResolvedArtifactResult?,
|
||||||
resolvedConfiguration: LazyResolvedConfiguration,
|
resolvedConfiguration: LazyResolvedConfiguration,
|
||||||
partialLinkage: Boolean
|
partialLinkageMode: String
|
||||||
): File {
|
): File {
|
||||||
val moduleCacheDirectory = File(rootCacheDirectory, dependency.selected.moduleVersion?.name ?: "undefined")
|
val moduleCacheDirectory = File(rootCacheDirectory, dependency.selected.moduleVersion?.name ?: "undefined")
|
||||||
val versionCacheDirectory = File(moduleCacheDirectory, dependency.selected.moduleVersion?.version ?: "undefined")
|
val versionCacheDirectory = File(moduleCacheDirectory, dependency.selected.moduleVersion?.version ?: "undefined")
|
||||||
@@ -41,14 +42,19 @@ internal fun getCacheDirectory(
|
|||||||
versionCacheDirectory.resolve(hash)
|
versionCacheDirectory.resolve(hash)
|
||||||
} else versionCacheDirectory
|
} 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') }
|
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 {
|
val hashedValue = buildString {
|
||||||
if (partialLinkage) append("#__PL__#")
|
if (PartialLinkageMode.resolveMode(partialLinkageMode)?.isEnabled == true)
|
||||||
|
append("#__PL__#")
|
||||||
|
|
||||||
(listOf(dependency) + getAllDependencies(dependency))
|
(listOf(dependency) + getAllDependencies(dependency))
|
||||||
.flatMap { resolvedConfiguration.getArtifacts(it) }
|
.flatMap { resolvedConfiguration.getArtifacts(it) }
|
||||||
@@ -68,7 +74,7 @@ internal fun getDependenciesCacheDirectories(
|
|||||||
dependency: ResolvedDependencyResult,
|
dependency: ResolvedDependencyResult,
|
||||||
resolvedConfiguration: LazyResolvedConfiguration,
|
resolvedConfiguration: LazyResolvedConfiguration,
|
||||||
considerArtifact: Boolean,
|
considerArtifact: Boolean,
|
||||||
partialLinkage: Boolean
|
partialLinkageMode: String
|
||||||
): List<File>? {
|
): List<File>? {
|
||||||
return getAllDependencies(dependency)
|
return getAllDependencies(dependency)
|
||||||
.flatMap { childDependency ->
|
.flatMap { childDependency ->
|
||||||
@@ -79,7 +85,7 @@ internal fun getDependenciesCacheDirectories(
|
|||||||
dependency = childDependency,
|
dependency = childDependency,
|
||||||
artifact = if (considerArtifact) it else null,
|
artifact = if (considerArtifact) it else null,
|
||||||
resolvedConfiguration = resolvedConfiguration,
|
resolvedConfiguration = resolvedConfiguration,
|
||||||
partialLinkage = partialLinkage
|
partialLinkageMode = partialLinkageMode
|
||||||
)
|
)
|
||||||
if (!cacheDirectory.exists()) return null
|
if (!cacheDirectory.exists()) return null
|
||||||
cacheDirectory
|
cacheDirectory
|
||||||
|
|||||||
Reference in New Issue
Block a user