From ed781690510f19f6b8cb3d97c56c0c1c4953793c Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 31 Aug 2020 10:09:40 +0700 Subject: [PATCH] [Commonizer] README: Describe the case when target is not available --- native/commonizer/README.md | 39 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/native/commonizer/README.md b/native/commonizer/README.md index 5d6aa653521..5fe8d3751d7 100644 --- a/native/commonizer/README.md +++ b/native/commonizer/README.md @@ -24,19 +24,28 @@ Foundation (ios_arm64) Foundation (ios_x64) The resulting KLIBs are automatically added to the dependencies of the corresponding shared native and platform-specific source sets. -There are a few limitations in the current version of Klib Commonizer: -* It supports only interop libraries shipped with Kotlin/Native. It doesn’t support KLIBs that are produced from C-interop or Kotlin code. -* It works only for a native source set that is shared among platform-specific source sets and these source sets themselves. It doesn’t work for native source sets shared at higher levels of the source set hierarchy. For example, if you have `nativeDarwinMain` that includes `iosMain` with `iosArm64Main` and `iosX64Main`, and `watchosDeviceMain` with `watchosArm64Main` and `watchosArm32Main`, the KLIB Commonizer will work for separately `iosMain` and `watchosDeviceMain` and won’t work for `nativeDarwinMain`. +There are few limitations in the current version of KLIB Commonizer: +* It supports only interop libraries shipped with Kotlin/Native. It doesn't support KLIBs that are produced from C-interop or Kotlin code. +* It works only for a native source set that is shared among platform-specific source sets and these source sets themselves. It doesn't work for native source sets shared at higher levels of the source set hierarchy. For example, if you have `nativeDarwinMain` that includes `iosMain` with `iosArm64Main` and `iosX64Main`, and `watchosDeviceMain` with `watchosArm64Main` and `watchosArm32Main`, the KLIB Commonizer will work separately for `iosMain` and `watchosDeviceMain` and won't work for `nativeDarwinMain`. + ``` + commonMain + | + | + nativeDarwinMain <--- Commonizer is NOT applied + / \ + / \ + iosMain watchosDeviceMain <--- Commonizer is applied + / \ / \ + / \ .. .. + iosArm64Main iosX64Main + ``` + +* It does not process targets that are not available at the current host machine. For example, if you have a project with `nativeMain` source set that includes `macosX64Main`, `linuxX64Main` and `mingwX64Main`, and you run the KLIB Commonizer for this project on MacOS machine, then `mingwX64Main` source set will not be processed as far as `mingw_x64` target is absent in Kotlin/Native distribution for MacOS. The KLIB Commonizer will print the appropriate warning message and will work only for `macosX64Main` and `linuxX64Main` source sets. You can find the list of targets supported on various hosts here: https://kotlinlang.org/docs/reference/mpp-supported-platforms.html + ``` + Kotlin KLIB commonizer: Please wait while preparing libraries. + [Step 1 of 1] Preparing commonized Kotlin/Native libraries for targets [macos_x64, linux_x64, mingw_x64] (137 items) + Warning: No platform libraries found for target mingw_x64. This target will be excluded from commonization. + ... + ``` + In the degenerate case when all but one targets are not available at the host machine, the KLIB Commonizer is not launched. -``` - commonMain - | - | - nativeDarwinMain <--- Commonizer is NOT applied - / \ - / \ - iosMain watchosDeviceMain <--- Commonizer is applied - / \ / \ - / \ .. .. -iosArm64Main iosX64Main -``` \ No newline at end of file