[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:
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.commonizer
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.cli.*
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
|
||||
@@ -27,19 +28,23 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
||||
dependencyLibraries: Set<CommonizerDependency>,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
outputDirectory: File,
|
||||
logLevel: CommonizerLogLevel
|
||||
logLevel: CommonizerLogLevel,
|
||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
||||
) {
|
||||
if (inputLibraries.isEmpty()) return
|
||||
val arguments = mutableListOf<String>().apply {
|
||||
add("native-klib-commonize")
|
||||
add("-distribution-path"); add(konanHome.absolutePath)
|
||||
add("-input-libraries"); add(inputLibraries.joinToString(";") { it.absolutePath })
|
||||
add("-output-targets"); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add("-output-path"); add(outputDirectory.absolutePath)
|
||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
||||
add(INPUT_LIBRARIES_OPTION_ALIAS.argumentString); add(inputLibraries.joinToString(";") { it.absolutePath })
|
||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
||||
if (dependencyLibraries.isNotEmpty()) {
|
||||
add("-dependency-libraries"); add(dependencyLibraries.joinToString(";"))
|
||||
add(DEPENDENCY_LIBRARIES_OPTION_ALIAS.argumentString); add(dependencyLibraries.joinToString(";"))
|
||||
}
|
||||
add(LOG_LEVEL_OPTION_ALIAS.argumentString); add(logLevel.name.lowercase())
|
||||
for ((settingArgument, settingValue) in additionalSettings) {
|
||||
add(settingArgument); add(settingValue.toString())
|
||||
}
|
||||
add("-log-level"); add(logLevel.name.lowercase())
|
||||
}
|
||||
executor(arguments)
|
||||
}
|
||||
@@ -48,14 +53,18 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
||||
konanHome: File,
|
||||
outputDirectory: File,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
logLevel: CommonizerLogLevel
|
||||
logLevel: CommonizerLogLevel,
|
||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
||||
) {
|
||||
val arguments = mutableListOf<String>().apply {
|
||||
add("native-dist-commonize")
|
||||
add("-distribution-path"); add(konanHome.absolutePath)
|
||||
add("-output-path"); add(outputDirectory.absolutePath)
|
||||
add("-output-targets"); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add("-log-level"); add(logLevel.name.lowercase())
|
||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add(LOG_LEVEL_OPTION_ALIAS.argumentString); add(logLevel.name.lowercase())
|
||||
for ((settingArgument, settingValue) in additionalSettings) {
|
||||
add(settingArgument); add(settingValue.toString())
|
||||
}
|
||||
}
|
||||
|
||||
executor(arguments)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.commonizer
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.cli.OptionAlias
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
@@ -16,7 +17,8 @@ public interface CInteropCommonizer : Serializable {
|
||||
dependencyLibraries: Set<CommonizerDependency>,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
outputDirectory: File,
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -26,6 +28,15 @@ public interface NativeDistributionCommonizer : Serializable {
|
||||
konanHome: File,
|
||||
outputDirectory: File,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public data class AdditionalCommonizerSetting(
|
||||
public val key: String,
|
||||
public val value: Any,
|
||||
)
|
||||
|
||||
public infix fun OptionAlias.setTo(settingValue: Any): AdditionalCommonizerSetting =
|
||||
AdditionalCommonizerSetting(this.argumentString, settingValue)
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
// General
|
||||
|
||||
private const val DEPENDENCY_LIBRARIES_ALIAS: String = "dependency-libraries"
|
||||
private const val INPUT_LIBRARIES_ALIAS: String = "input-libraries"
|
||||
private const val LOG_LEVEL_ALIAS: String = "log-level"
|
||||
private const val NATIVE_DISTRIBUTION_PATH_ALIAS: String = "distribution-path"
|
||||
private const val OUTPUT_COMMONIZER_TARGETS_ALIAS: String = "output-targets"
|
||||
private const val OUTPUT_PATH_ALIAS: String = "output-path"
|
||||
private const val STATS_TYPE_ALIAS: String = "log-stats"
|
||||
private const val NATIVE_TARGETS_ALIAS: String = "targets"
|
||||
private const val COPY_STDLIB_ALIAS: String = "copy-stdlib"
|
||||
private const val COPY_ENDORSED_LIBS_ALIAS: String = "copy-endorsed-libs"
|
||||
|
||||
public val DEPENDENCY_LIBRARIES_OPTION_ALIAS: OptionAlias = OptionAlias(DEPENDENCY_LIBRARIES_ALIAS)
|
||||
public val INPUT_LIBRARIES_OPTION_ALIAS: OptionAlias = OptionAlias(INPUT_LIBRARIES_ALIAS)
|
||||
public val LOG_LEVEL_OPTION_ALIAS: OptionAlias = OptionAlias(LOG_LEVEL_ALIAS)
|
||||
public val NATIVE_DISTRIBUTION_OPTION_ALIAS: OptionAlias = OptionAlias(NATIVE_DISTRIBUTION_PATH_ALIAS)
|
||||
public val OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS: OptionAlias = OptionAlias(OUTPUT_COMMONIZER_TARGETS_ALIAS)
|
||||
public val OUTPUT_OPTION_ALIAS: OptionAlias = OptionAlias(OUTPUT_PATH_ALIAS)
|
||||
public val STATS_TYPE_OPTION_ALIAS: OptionAlias = OptionAlias(STATS_TYPE_ALIAS)
|
||||
public val NATIVE_TARGETS_OPTION_ALIAS: OptionAlias = OptionAlias(NATIVE_TARGETS_ALIAS)
|
||||
public val COPY_STDLIB_OPTION_ALIAS: OptionAlias = OptionAlias(COPY_STDLIB_ALIAS)
|
||||
public val COPY_ENDORSED_LIBS_OPTION_ALIAS: OptionAlias = OptionAlias(COPY_ENDORSED_LIBS_ALIAS)
|
||||
|
||||
// Commonizer settings
|
||||
private const val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS: String = "optimistic-numbers"
|
||||
|
||||
public val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS: OptionAlias = OptionAlias(OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS)
|
||||
|
||||
@JvmInline
|
||||
public value class OptionAlias(public val aliasString: String) {
|
||||
public val argumentString: String
|
||||
get() = "-$aliasString"
|
||||
|
||||
override fun toString(): String = aliasString
|
||||
}
|
||||
@@ -24,7 +24,8 @@ class CliCommonizerTest {
|
||||
inputLibraries = emptySet(),
|
||||
dependencyLibraries = emptySet(),
|
||||
outputTargets = setOf(CommonizerTarget(KonanTarget.LINUX_X64, KonanTarget.MACOS_X64)),
|
||||
outputDirectory = temporaryOutputDirectory.root
|
||||
outputDirectory = temporaryOutputDirectory.root,
|
||||
additionalSettings = emptyList(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user