[Commonizer] Introduce commonizer settings

Add settings for a more fine-grained control over commonizer features
that will be added in the future

Add setting and KGP flag for optimistic number commonization

KT-51011
This commit is contained in:
Pavel Kirpichenkov
2022-01-17 12:11:22 +03:00
parent 1aea2d0437
commit 2609175d58
56 changed files with 615 additions and 237 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_GRANULAR_SOURCE_SETS_METADATA
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_HIERARCHICAL_STRUCTURE_BY_DEFAULT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_HIERARCHICAL_STRUCTURE_SUPPORT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_ENABLE_OPTIMISTIC_NUMBER_COMMONIZATION
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_DEPENDENCY_PROPAGATION
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
@@ -213,6 +214,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
val mppStabilityNoWarn: Boolean?
get() = booleanProperty(KotlinMultiplatformPlugin.STABILITY_NOWARN_FLAG)
val mppEnableOptimisticNumberCommonization: Boolean
get() = booleanProperty(KOTLIN_MPP_ENABLE_OPTIMISTIC_NUMBER_COMMONIZATION) ?: false
val wasmStabilityNoWarn: Boolean
get() = booleanProperty("kotlin.wasm.stability.nowarn") ?: false
@@ -468,6 +472,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
const val KOTLIN_MPP_HIERARCHICAL_STRUCTURE_BY_DEFAULT = "kotlin.internal.mpp.hierarchicalStructureByDefault"
const val KOTLIN_MPP_HIERARCHICAL_STRUCTURE_SUPPORT = "kotlin.mpp.hierarchicalStructureSupport"
const val KOTLIN_NATIVE_DEPENDENCY_PROPAGATION = "kotlin.native.enableDependencyPropagation"
const val KOTLIN_MPP_ENABLE_OPTIMISTIC_NUMBER_COMMONIZATION = "kotlin.mpp.enableOptimisticNumberCommonization"
}
companion object {
@@ -6,13 +6,16 @@
package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.OutputDirectory
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.ensureMaxFileNameLength
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
import org.jetbrains.kotlin.commonizer.cli.OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS
import org.jetbrains.kotlin.commonizer.identityString
import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.commonizer.setTo
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
import java.io.File
@@ -84,7 +84,8 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() {
inputLibraries = cinteropsForTarget.map { it.libraryFile.get() }.filter { it.exists() }.toSet(),
dependencyLibraries = getNativeDistributionDependencies(group),
outputDirectory = outputDirectory(group),
logLevel = project.commonizerLogLevel
logLevel = project.commonizerLogLevel,
additionalSettings = project.additionalCommonizerSettings,
)
}
@@ -6,7 +6,10 @@
package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.Project
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
import org.jetbrains.kotlin.commonizer.CommonizerLogLevel
import org.jetbrains.kotlin.commonizer.cli.OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS
import org.jetbrains.kotlin.commonizer.setTo
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
internal val Project.commonizerLogLevel: CommonizerLogLevel
@@ -18,3 +21,8 @@ internal val Project.commonizerLogLevel: CommonizerLogLevel
return if (logger.isInfoEnabled) CommonizerLogLevel.Info else CommonizerLogLevel.Quiet
}
internal val Project.additionalCommonizerSettings: List<AdditionalCommonizerSetting>
get() = listOf(
OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS setTo isOptimisticNumberCommonizationEnabled
)
@@ -20,6 +20,9 @@ internal val Project.isCInteropCommonizationEnabled: Boolean get() = PropertiesP
internal val Project.isIntransitiveMetadataConfigurationEnabled: Boolean
get() = PropertiesProvider(this).enableIntransitiveMetadataConfiguration
internal val Project.isOptimisticNumberCommonizationEnabled: Boolean
get() = PropertiesProvider(this).mppEnableOptimisticNumberCommonization
internal val Project.commonizeTask: TaskProvider<Task>
get() = locateOrRegisterTask(
"commonize",
@@ -22,12 +22,12 @@ internal class NativeDistributionCommonizationCache(
private val commonizer: NativeDistributionCommonizer
) : NativeDistributionCommonizer {
override fun commonizeNativeDistribution(
konanHome: File,
outputDirectory: File,
outputTargets: Set<SharedCommonizerTarget>,
logLevel: CommonizerLogLevel
logLevel: CommonizerLogLevel,
additionalSettings: List<AdditionalCommonizerSetting>,
) {
if (!project.isNativeDistributionCommonizationCacheEnabled) {
logInfo("Cache disabled")
@@ -52,7 +52,7 @@ internal class NativeDistributionCommonizationCache(
.forEach { commonizedDirectory -> if (commonizedDirectory.exists()) commonizedDirectory.deleteRecursively() }
commonizer.commonizeNativeDistribution(
konanHome, outputDirectory, enqueuedOutputTargets, logLevel
konanHome, outputDirectory, enqueuedOutputTargets, logLevel, additionalSettings
)
enqueuedOutputTargets
@@ -54,7 +54,8 @@ internal open class NativeDistributionCommonizerTask : DefaultTask() {
konanHome = konanHome,
outputDirectory = getRootOutputDirectory(),
outputTargets = project.collectAllSharedCommonizerTargetsFromBuild(),
logLevel = project.commonizerLogLevel
logLevel = project.commonizerLogLevel,
additionalSettings = project.additionalCommonizerSettings,
)
}