[WIP] Native: Deprecate -Xpurge-user-libs CLI argument
diff --git a/compiler/arguments/resources/kotlin-compiler-arguments.json b/compiler/arguments/resources/kotlin-compiler-arguments.json index b1ddfda..cc385a1 100644 --- a/compiler/arguments/resources/kotlin-compiler-arguments.json +++ b/compiler/arguments/resources/kotlin-compiler-arguments.json
@@ -16106,7 +16106,7 @@ "shortName": null, "deprecatedName": "-purge_user_libs", "description": { - "current": "Don't link unused libraries even if explicitly specified.", + "current": "Don't link unused libraries even if explicitly specified.\nThis option is deprecated and will be removed in one of the future releases.", "valueInVersions": [] }, "delimiter": null, @@ -16129,7 +16129,7 @@ "releaseVersionsMetadata": { "introducedVersion": "1.5.20", "stabilizedVersion": null, - "deprecatedVersion": null, + "deprecatedVersion": "2.4.20", "removedVersion": null }, "argumentType": {
diff --git a/compiler/arguments/src/org/jetbrains/kotlin/arguments/description/NativeCompilerArguments.kt b/compiler/arguments/src/org/jetbrains/kotlin/arguments/description/NativeCompilerArguments.kt index d234c4a..2d51caf 100644 --- a/compiler/arguments/src/org/jetbrains/kotlin/arguments/description/NativeCompilerArguments.kt +++ b/compiler/arguments/src/org/jetbrains/kotlin/arguments/description/NativeCompilerArguments.kt
@@ -665,11 +665,16 @@ compilerArgument { name = "Xpurge-user-libs" deprecatedName = "-purge_user_libs" - description = "Don't link unused libraries even if explicitly specified.".asReleaseDependent() + description = "Don't link unused libraries even if explicitly specified.\nThis option is deprecated and will be removed in one of the future releases.".asReleaseDependent() valueType = BooleanType.defaultFalse + additionalAnnotations( + Deprecated("This flag is deprecated") + ) + lifecycle( introducedVersion = KotlinReleaseVersion.v1_5_20, + deprecatedVersion = KotlinReleaseVersion.v2_4_20, ) }
diff --git a/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt b/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt index 58ba28d..adc7f200 100644 --- a/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt +++ b/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArguments.kt
@@ -509,10 +509,12 @@ field = value } + @Deprecated("This flag is deprecated") @Argument( value = "-Xpurge-user-libs", deprecatedName = "--purge_user_libs", - description = "Don't link unused libraries even if explicitly specified.", + description = """Don't link unused libraries even if explicitly specified. +This option is deprecated and will be removed in one of the future releases.""", ) var purgeUserLibs: Boolean = false set(value) {
diff --git a/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArgumentsCopyGenerated.kt b/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArgumentsCopyGenerated.kt index 56e6227..6936e71 100644 --- a/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArgumentsCopyGenerated.kt +++ b/compiler/cli/cli-base/gen/org/jetbrains/kotlin/cli/common/arguments/K2NativeCompilerArgumentsCopyGenerated.kt
@@ -81,6 +81,7 @@ to.printIr = from.printIr to.produce = from.produce to.propertyLazyInitialization = from.propertyLazyInitialization + @Suppress("DEPRECATION") to.purgeUserLibs = from.purgeUserLibs to.refinesPaths = from.refinesPaths.copyOf() to.runtimeFile = from.runtimeFile
diff --git a/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/FirNativeSerializer.kt b/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/FirNativeSerializer.kt index 5d90048..c505f30 100644 --- a/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/FirNativeSerializer.kt +++ b/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/FirNativeSerializer.kt
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.pipeline.AllModulesFrontendOutput import org.jetbrains.kotlin.fir.pipeline.Fir2KlibMetadataSerializer import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext -import org.jetbrains.kotlin.konan.config.konanPurgeUserLibs import org.jetbrains.kotlin.konan.library.isExplicitlySpecifiedByUserInCLIArgument internal fun NativeFirstStagePhaseContext.firSerializerBase( @@ -27,7 +26,7 @@ ): SerializerOutput { val usedLibraries = fir2IrOutput?.let { config.loadedKlibs.all.filter { library -> - if (library.isExplicitlySpecifiedByUserInCLIArgument && !configuration.konanPurgeUserLibs) { + if (library.isExplicitlySpecifiedByUserInCLIArgument) { // This is the dependency explicitly specified by the user in one of the compiler's CLI arguments: -library, -Xinclude. // // We assume such a library as "used" even if we cannot immediately prove there are declarations belonging to it
diff --git a/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/pipeline/NativeConfigurationPhase.kt b/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/pipeline/NativeConfigurationPhase.kt index 228875eb..24920c7 100644 --- a/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/pipeline/NativeConfigurationPhase.kt +++ b/compiler/cli/cli-native-klib/src/main/kotlin/org/jetbrains/kotlin/native/pipeline/NativeConfigurationPhase.kt
@@ -98,7 +98,6 @@ configuration.konanNoStdlib = arguments.nostdlib configuration.konanNoDefaultLibs = arguments.nodefaultlibs - configuration.konanPurgeUserLibs = arguments.purgeUserLibs @Suppress("DEPRECATION") configuration.konanNoEndorsedLibs = arguments.noendorsedlibs
diff --git a/compiler/config/configuration-keys-generator/src/org/jetbrains/kotlin/config/keys/generator/NativeConfigurationKeysContainer.kt b/compiler/config/configuration-keys-generator/src/org/jetbrains/kotlin/config/keys/generator/NativeConfigurationKeysContainer.kt index f5d5bda..9b9a678 100644 --- a/compiler/config/configuration-keys-generator/src/org/jetbrains/kotlin/config/keys/generator/NativeConfigurationKeysContainer.kt +++ b/compiler/config/configuration-keys-generator/src/org/jetbrains/kotlin/config/keys/generator/NativeConfigurationKeysContainer.kt
@@ -58,7 +58,6 @@ val KONAN_PRINT_IR by key<Boolean>() val KONAN_PRINT_FILES by key<Boolean>() val KONAN_PRODUCED_ARTIFACT_KIND by key<CompilerOutputKind>() - val KONAN_PURGE_USER_LIBS by key<Boolean>() val RUNTIME_FILE by key<String>() val KONAN_INCLUDED_LIBRARIES by key<List<String>>("Klibs processed in the same manner as source files.") val KONAN_SHORT_MODULE_NAME by key<String>("Short module name for IDE and export.")
diff --git a/kotlin-native/Interop/StubGenerator/src/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt b/kotlin-native/Interop/StubGenerator/src/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt index 7ed4a60..3bc3c85 100644 --- a/kotlin-native/Interop/StubGenerator/src/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt +++ b/kotlin-native/Interop/StubGenerator/src/org/jetbrains/kotlin/native/interop/gen/jvm/CommandLine.kt
@@ -62,8 +62,12 @@ deprecatedWarning = "Old form of flag. Please, use $NODEFAULTLIBS.").default(false) val noendorsedlibs by argParser.option(ArgType.Boolean, NOENDORSEDLIBS, description = "don't link the endorsed libraries from dist automatically").default(false) - val purgeUserLibs by argParser.option(ArgType.Boolean, PURGE_USER_LIBS, - description = "don't link unused libraries even explicitly specified").default(false) + val purgeUserLibs by argParser.option( + type = ArgType.Boolean, + fullName = PURGE_USER_LIBS, + description = "don't link unused libraries even explicitly specified", + deprecatedWarning = "'-$PURGE_USER_LIBS' option is deprecated and will be removed in one of the future releases", + ).default(false) val nopack by argParser.option(ArgType.Boolean, fullName = NOPACK, description = "Don't pack the produced library into a klib file").default(false) val tempDir by argParser.option(ArgType.String, TEMP_DIR,
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt index b6f5642..6827638 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/DependenciesTracker.kt
@@ -185,7 +185,7 @@ init { val immediateBitcodeDependencies = topSortedLibraries - .filter { (it.isExplicitlySpecifiedByUserInCLIArgument && !context.config.purgeUserLibs) || bitcodeIsUsed(it) } + .filter { it.isExplicitlySpecifiedByUserInCLIArgument || bitcodeIsUsed(it) } for (library in immediateBitcodeDependencies) { if (library == context.config.libraryToCache?.klib) continue val cache = context.config.cachedLibraries.getLibraryCache(library) @@ -317,7 +317,7 @@ topSortedLibraries.mapNotNull { allBitcodeDependencies[it] } } - val nativeDependenciesToLink = topSortedLibraries.filter { (it.isExplicitlySpecifiedByUserInCLIArgument && !context.config.purgeUserLibs) || it in usedNativeDependencies } + val nativeDependenciesToLink = topSortedLibraries.filter { it.isExplicitlySpecifiedByUserInCLIArgument || it in usedNativeDependencies } val allNativeDependencies = (nativeDependenciesToLink + allCachedBitcodeDependencies.map { it.library } // Native dependencies are per library @@ -335,7 +335,7 @@ } // Apply some DCE: - return (library.isExplicitlySpecifiedByUserInCLIArgument && !context.config.purgeUserLibs) || bitcodeIsUsed(library) + return library.isExplicitlySpecifiedByUserInCLIArgument || bitcodeIsUsed(library) } }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeSecondStageCompilationConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeSecondStageCompilationConfig.kt index ca74cd4..4ba6bd9 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeSecondStageCompilationConfig.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeSecondStageCompilationConfig.kt
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.konan.config.konanHome import org.jetbrains.kotlin.konan.config.konanIncludedLibraries import org.jetbrains.kotlin.konan.config.konanManifestAddend -import org.jetbrains.kotlin.konan.config.konanPurgeUserLibs import org.jetbrains.kotlin.konan.config.konanTarget import org.jetbrains.kotlin.konan.config.llvmLtoPasses import org.jetbrains.kotlin.konan.config.llvmModulePasses @@ -436,7 +435,7 @@ // Later upon the subsequent `getFullList()` call, some of the implicit dependencies will be added. But only if they // are mentioned in `depends=` manifest property in root libraries. Which means only a small really required subset // of them will be added. - it.library.isExplicitlySpecifiedByUserInCLIArgument && !purgeUserLibs + it.library.isExplicitlySpecifiedByUserInCLIArgument }.getFullList() } @@ -704,9 +703,6 @@ val languageVersionSettings: LanguageVersionSettings get() = configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS)!! - val purgeUserLibs: Boolean - get() = configuration.konanPurgeUserLibs - val isInteropStubs: Boolean get() = manifestProperties?.getProperty("interop") == "true" }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt index 753cefe0..5f288f2 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/SetupConfiguration.kt
@@ -45,7 +45,6 @@ import org.jetbrains.kotlin.konan.config.konanPrintFiles import org.jetbrains.kotlin.konan.config.konanPrintIr import org.jetbrains.kotlin.konan.config.konanProducedArtifactKind -import org.jetbrains.kotlin.konan.config.konanPurgeUserLibs import org.jetbrains.kotlin.konan.config.konanRefinesModules import org.jetbrains.kotlin.konan.config.konanShortModuleName import org.jetbrains.kotlin.konan.config.konanTarget @@ -144,8 +143,6 @@ konanPrintBitcode = arguments.printBitCode konanPrintFiles = arguments.printFiles - konanPurgeUserLibs = arguments.purgeUserLibs - arguments.writeDependenciesOfProducedKlibTo?.let { konanWriteDependenciesOfProducedKlibTo = it } if (arguments.verifyCompiler != null)
diff --git a/kotlin-native/platformLibs/build.gradle.kts b/kotlin-native/platformLibs/build.gradle.kts index 4c8fc72..6413c98 100644 --- a/kotlin-native/platformLibs/build.gradle.kts +++ b/kotlin-native/platformLibs/build.gradle.kts
@@ -103,7 +103,6 @@ }.toTypedArray() this.extraOpts.addAll( - "-Xpurge-user-libs", "-Xshort-module-name", df.name, "-Xdisable-experimental-annotation", "-no-default-libs",
diff --git a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt index 0c04afe..ad36804 100644 --- a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt +++ b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/GeneratePlatformLibraries.kt
@@ -268,7 +268,7 @@ "-target", target.visibleName, "-def", defFile.absolutePath, "-compiler-option", "-fmodules-cache-path=${tmpDirectory.child("clangModulesCache").absolutePath}", - "-no-default-libs", "-no-endorsed-libs", "-Xpurge-user-libs", "-nopack", + "-no-default-libs", "-no-endorsed-libs", "-nopack", "-Xdisable-experimental-annotation", *cinteropOptions.additionalArguments.toTypedArray(), "-$SHORT_MODULE_NAME", def.shortLibraryName,
diff --git a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt index 493182b..c1ab30f 100644 --- a/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt +++ b/kotlin-native/utilities/cli-runner/src/org/jetbrains/kotlin/cli/utilities/InteropCompiler.kt
@@ -29,7 +29,6 @@ val outputFileName = arguments.output val noDefaultLibs = arguments.nodefaultlibs || arguments.nodefaultlibsDeprecated val noEndorsedLibs = arguments.noendorsedlibs - val purgeUserLibs = arguments.purgeUserLibs val nopack = arguments.nopack val temporaryFilesDir = arguments.tempDir val moduleName = arguments.moduleName @@ -70,7 +69,6 @@ libraries.flatMap { listOf("-library", it) } + (if (noDefaultLibs) arrayOf("-$NODEFAULTLIBS") else emptyArray()) + (if (noEndorsedLibs) arrayOf("-$NOENDORSEDLIBS") else emptyArray()) + - (if (purgeUserLibs) arrayOf("-$PURGE_USER_LIBS") else emptyArray()) + (if (nopack) arrayOf("-$NOPACK") else emptyArray()) + moduleName?.let { arrayOf("-module-name", it) }.orEmpty() + shortModuleName?.let { arrayOf("${K2NativeCompilerArguments::shortModuleName.cliArgument}=$it") }.orEmpty() +
diff --git a/native/native.config/gen/org/jetbrains/kotlin/konan/config/NativeConfigurationKeys.kt b/native/native.config/gen/org/jetbrains/kotlin/konan/config/NativeConfigurationKeys.kt index 65b7ed7..0df8e75 100644 --- a/native/native.config/gen/org/jetbrains/kotlin/konan/config/NativeConfigurationKeys.kt +++ b/native/native.config/gen/org/jetbrains/kotlin/konan/config/NativeConfigurationKeys.kt
@@ -171,9 +171,6 @@ val KONAN_PRODUCED_ARTIFACT_KIND = CompilerConfigurationKey.create<CompilerOutputKind>("KONAN_PRODUCED_ARTIFACT_KIND") @JvmField - val KONAN_PURGE_USER_LIBS = CompilerConfigurationKey.create<Boolean>("KONAN_PURGE_USER_LIBS") - - @JvmField val RUNTIME_FILE = CompilerConfigurationKey.create<String>("RUNTIME_FILE") // Klibs processed in the same manner as source files. @@ -456,10 +453,6 @@ get() = get(NativeConfigurationKeys.KONAN_PRODUCED_ARTIFACT_KIND) set(value) { put(NativeConfigurationKeys.KONAN_PRODUCED_ARTIFACT_KIND, requireNotNull(value) { "nullable values are not allowed" }) } -var CompilerConfiguration.konanPurgeUserLibs: Boolean - get() = getBoolean(NativeConfigurationKeys.KONAN_PURGE_USER_LIBS) - set(value) { put(NativeConfigurationKeys.KONAN_PURGE_USER_LIBS, value) } - var CompilerConfiguration.runtimeFile: String? get() = get(NativeConfigurationKeys.RUNTIME_FILE) set(value) { put(NativeConfigurationKeys.RUNTIME_FILE, requireNotNull(value) { "nullable values are not allowed" }) }
diff --git a/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/UsedLibrariesComputationTest.kt b/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/UsedLibrariesComputationTest.kt index 22afaa8..0a7d280 100644 --- a/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/UsedLibrariesComputationTest.kt +++ b/native/native.tests/klib-ir-inliner/tests/org/jetbrains/kotlin/konan/test/UsedLibrariesComputationTest.kt
@@ -68,6 +68,7 @@ }.compileToKlibsViaCli(extraCliArgs = listOf("-l", additionalUnusedModulePath, "-Xpurge-user-libs")) { _, successKlib -> successKlib.assertDependencyNames( /* implicit unavoidable dependency */ "stdlib", + /* because '-Xpurge-user-libs' has no effect anymore */ "additional", ) } @@ -155,4 +156,4 @@ setProperty(KLIB_PROPERTY_UNIQUE_NAME, libName) } } -} \ No newline at end of file +}