From 40b358b43c0d50117e1d9e164849f3a1cdc31c47 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 20 Jan 2020 13:20:55 +0700 Subject: [PATCH] [Commonizer] Process endorsed libraries in CLI --- .../cli/nativeDistributionCommonizer.kt | 2 ++ .../konan/NativeDistributionCommonizer.kt | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeDistributionCommonizer.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeDistributionCommonizer.kt index 966e328ac4a..fa7b031c06b 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeDistributionCommonizer.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeDistributionCommonizer.kt @@ -34,6 +34,8 @@ fun main(args: Array) { repository = repository, targets = targets, destination = destination, + copyStdlib = true, + copyEndorsedLibs = true, withStats = withStats, handleError = ::printErrorAndExit, log = ::println diff --git a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt index 4a4f04e63df..6eff9123bb2 100644 --- a/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt +++ b/konan/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/NativeDistributionCommonizer.kt @@ -34,6 +34,8 @@ class NativeDistributionCommonizer( private val repository: File, private val targets: List, private val destination: File, + private val copyStdlib: Boolean, + private val copyEndorsedLibs: Boolean, private val withStats: Boolean, private val handleError: (String) -> Nothing, private val log: (String) -> Unit @@ -181,16 +183,23 @@ class NativeDistributionCommonizer( originalModulesByTargets: Map>, result: CommonizationPerformed ) { - // optimization: stdlib effectively remains the same across all Kotlin/Native targets, - // so it can be just copied to the new destination without running serializer - val stdlibOrigin = originalModulesByTargets.values.asSequence() - .flatten() - .filterIsInstance() - .map { it.location } - .first { it.endsWith(KONAN_STDLIB_NAME) } - - val stdlibDestination = destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR).resolve(KONAN_STDLIB_NAME) - stdlibOrigin.copyRecursively(stdlibDestination) + // optimization: stdlib and endorsed libraries effectively remain the same across all Kotlin/Native targets, + // so they can be just copied to the new destination without running serializer + if (copyStdlib || copyEndorsedLibs) { + repository.resolve(KONAN_DISTRIBUTION_KLIB_DIR) + .resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR) + .listFiles() + ?.filter { it.isDirectory } + ?.let { + if (copyStdlib) { + if (copyEndorsedLibs) it else it.filter { dir -> dir.endsWith(KONAN_STDLIB_NAME) } + } else + it.filter { dir -> !dir.endsWith(KONAN_STDLIB_NAME) } + }?.forEach { libraryOrigin -> + val libraryDestination = destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR).resolve(libraryOrigin.name) + libraryOrigin.copyRecursively(libraryDestination) + } + } val originalModulesManifestData = originalModulesByTargets.mapValues { (_, modules) -> modules.asSequence()