diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt index 6bb6ea59032..42b86e18b25 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeBinaries.kt @@ -48,9 +48,9 @@ interface KotlinNativeBinary: ComponentWithDependencies, BuildableComponent { val kind: CompilerOutputKind /** - * Additinal command line options passed to the compiler when this binary is compiled. + * Additional command line options passed to the compiler when this binary is compiled. */ - val additionalCompilerOptions: MutableCollection + val additionalCompilerOptions: Collection companion object { val KONAN_TARGET_ATTRIBUTE = Attribute.of("org.gradle.native.kotlin.platform", String::class.java) @@ -70,7 +70,7 @@ interface KotlinNativeExecutable : KotlinNativeBinary, * A component representing a klibrary. */ // TODO: Consider implementing ComponentWithLinkFile. -interface KotlinNativeKLibrary : KotlinNativeBinary, +interface KotlinNativeLibrary : KotlinNativeBinary, ComponentWithOutputs, PublishableComponent, ConfigurableComponentWithLinkUsage diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt index d3bc6b8194b..f7c04a1b494 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt @@ -37,6 +37,12 @@ interface KotlinNativeComponent: ComponentWithBinaries, ComponentWithDependencie /** Set native targets for this component. */ fun target(vararg targets: String) + /** Set additional compiler options for this component. */ + val extraOpts: Collection + + fun extraOpts(vararg values: Any) + fun extraOpts(values: List) + // endregion } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt index 76a43b4a9ba..7f4ae14db36 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeBinary.kt @@ -21,6 +21,7 @@ import org.gradle.nativeplatform.OperatingSystemFamily import org.gradle.nativeplatform.toolchain.NativeToolChain import org.jetbrains.kotlin.gradle.plugin.experimental.ComponentWithBaseName import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary +import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeComponent import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSet import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile import org.jetbrains.kotlin.konan.target.CompilerOutputKind @@ -41,7 +42,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget abstract class AbstractKotlinNativeBinary( private val name: String, private val baseName: Provider, - val sourceSet: KotlinNativeSourceSet, + val component: KotlinNativeComponent, val identity: KotlinNativeVariantIdentity, val projectLayout: ProjectLayout, override val kind: CompilerOutputKind, @@ -66,6 +67,9 @@ abstract class AbstractKotlinNativeBinary( override fun getTargetPlatform(): KotlinNativePlatform = identity.targetPlatform + val sourceSet: KotlinNativeSourceSet + get() = component.sources + open val debuggable: Boolean get() = identity.isDebuggable open val optimized: Boolean get() = identity.isOptimized @@ -113,5 +117,6 @@ abstract class AbstractKotlinNativeBinary( private val outputs: ConfigurableFileCollection = fileOperations.files() override fun getOutputs() = outputs - override val additionalCompilerOptions = mutableListOf() + override val additionalCompilerOptions: Collection + get() = component.extraOpts } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt index d5ea4aa5f7d..5ec3c805eee 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt @@ -59,5 +59,12 @@ abstract class AbstractKotlinNativeComponent @Inject constructor( konanTargets.set(targets.map { hostManager.targetByName(it) }) } + override val extraOpts = mutableListOf() + + override fun extraOpts(vararg values: Any) = extraOpts(values.toList()) + override fun extraOpts(values: List) { + extraOpts.addAll(values.map { it.toString() }) + } + // endregion } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeExecutableImpl.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeExecutableImpl.kt index d248473f12a..bea31a15b37 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeExecutableImpl.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeExecutableImpl.kt @@ -24,7 +24,7 @@ open class KotlinNativeExecutableImpl @Inject constructor( name: String, baseName: Provider, componentImplementation: Configuration, - sources: KotlinNativeSourceSet, + component: KotlinNativeMainComponent, identity: KotlinNativeVariantIdentity, objects: ObjectFactory, projectLayout: ProjectLayout, @@ -32,7 +32,7 @@ open class KotlinNativeExecutableImpl @Inject constructor( fileOperations: FileOperations ) : AbstractKotlinNativeBinary(name, baseName, - sources, + component, identity, projectLayout, CompilerOutputKind.PROGRAM, diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeKLibraryImpl.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeLibraries.kt similarity index 65% rename from tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeKLibraryImpl.kt rename to tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeLibraries.kt index fb57d319c85..d7558265cb8 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeKLibraryImpl.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeLibraries.kt @@ -15,32 +15,33 @@ import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.language.cpp.internal.DefaultUsageContext import org.gradle.nativeplatform.Linkage -import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeKLibrary +import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeLibrary import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSet import org.jetbrains.kotlin.konan.target.CompilerOutputKind import javax.inject.Inject -open class KotlinNativeKLibraryImpl @Inject constructor( +abstract class AbstractKotlinNativeLibrary( name: String, baseName: Provider, componentImplementation: Configuration, - sources: KotlinNativeSourceSet, + component: KotlinNativeMainComponent, identity: KotlinNativeVariantIdentity, - objects: ObjectFactory, projectLayout: ProjectLayout, + outputKind: CompilerOutputKind, + objects: ObjectFactory, configurations: ConfigurationContainer, fileOperations: FileOperations ) : AbstractKotlinNativeBinary(name, baseName, - sources, + component, identity, projectLayout, - CompilerOutputKind.LIBRARY, + outputKind, objects, componentImplementation, configurations, fileOperations), - KotlinNativeKLibrary, + KotlinNativeLibrary, SoftwareComponentInternal, // TODO: SoftwareComponentInternal will be replaced with ComponentWithVariants by Gradle PublishableComponent { @@ -68,3 +69,49 @@ open class KotlinNativeKLibraryImpl @Inject constructor( override val outputRootName = "lib" } + +open class KotlinNativeLibraryImpl @Inject constructor( + name: String, + baseName: Provider, + componentImplementation: Configuration, + component: KotlinNativeMainComponent, + identity: KotlinNativeVariantIdentity, + projectLayout: ProjectLayout, + objects: ObjectFactory, + configurations: ConfigurationContainer, + fileOperations: FileOperations +) : AbstractKotlinNativeLibrary( + name, + baseName, + componentImplementation, + component, + identity, + projectLayout, + CompilerOutputKind.LIBRARY, + objects, + configurations, + fileOperations +) + +open class KotlinNativeFrameworkImpl @Inject constructor( + name: String, + baseName: Provider, + componentImplementation: Configuration, + component: KotlinNativeMainComponent, + identity: KotlinNativeVariantIdentity, + projectLayout: ProjectLayout, + objects: ObjectFactory, + configurations: ConfigurationContainer, + fileOperations: FileOperations +) : AbstractKotlinNativeLibrary( + name, + baseName, + componentImplementation, + component, + identity, + projectLayout, + CompilerOutputKind.FRAMEWORK, + objects, + configurations, + fileOperations +) \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeMainComponent.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeMainComponent.kt index 0992b94b084..372dae6b1be 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeMainComponent.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeMainComponent.kt @@ -47,7 +47,7 @@ open class KotlinNativeMainComponent @Inject constructor( "$name${identity.name.capitalize()}", baseName, getImplementationDependencies(), - sources, + this, identity ).apply { binaries.add(this) @@ -57,11 +57,11 @@ open class KotlinNativeMainComponent @Inject constructor( addBinary(T::class.java, identity) fun addExecutable(identity: NativeVariantIdentity) = addBinary(identity) - fun addKLibrary(identity: NativeVariantIdentity) = addBinary(identity) + fun addKLibrary(identity: NativeVariantIdentity) = addBinary(identity) + fun addFramework(identity: NativeVariantIdentity) = addBinary(identity) fun addBinary(kind: OutputKind, identity: NativeVariantIdentity) = addBinary(kind.binaryClass, identity) - // region Kotlin/Native variant // TODO: SoftwareComponentInternal will be replaced with ComponentWithVariants by Gradle inner class KotlinNativeVariant: ComponentWithVariants, SoftwareComponentInternal { @@ -82,5 +82,8 @@ open class KotlinNativeMainComponent @Inject constructor( @JvmStatic val KLIBRARY = OutputKind.KLIBRARY + + @JvmStatic + val FRAMEWORK = OutputKind.FRAMEWORK } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt index 679440f01a3..9b5dc3e6489 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestExecutableImpl.kt @@ -9,6 +9,7 @@ import org.gradle.api.internal.file.FileOperations import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeTestComponent import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeTestExecutable import org.jetbrains.kotlin.gradle.plugin.experimental.sourcesets.KotlinNativeSourceSet import org.jetbrains.kotlin.konan.target.CompilerOutputKind @@ -19,7 +20,7 @@ open class KotlinNativeTestExecutableImpl @Inject constructor( name: String, baseName: Provider, componentImplementation: Configuration, - testSources: KotlinNativeSourceSet, + testComponent: KotlinNativeTestComponent, val mainSources: KotlinNativeSourceSet, identity: KotlinNativeVariantIdentity, objects: ObjectFactory, @@ -28,7 +29,7 @@ open class KotlinNativeTestExecutableImpl @Inject constructor( fileOperations: FileOperations ) : AbstractKotlinNativeBinary(name, baseName, - testSources, + testComponent, identity, projectLayout, CompilerOutputKind.PROGRAM, @@ -38,15 +39,14 @@ open class KotlinNativeTestExecutableImpl @Inject constructor( fileOperations), KotlinNativeTestExecutable { - init { - additionalCompilerOptions.add("-tr") - } - private val runTaskProperty : Property = objects.property(Task::class.java) override fun getRunTask() = runTaskProperty override val sources: FileCollection get() = super.sources + mainSources.getAllSources(konanTarget) - override val outputRootName: String = "exe" + override val outputRootName: String = "test-exe" + + override val additionalCompilerOptions: Collection + get() = listOf("-tr") + super.additionalCompilerOptions } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestSuite.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestSuite.kt index e766aae7551..74a9ab7fd30 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestSuite.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeTestSuite.kt @@ -38,7 +38,7 @@ open class KotlinNativeTestSuite @Inject constructor( "$name${identity.name.capitalize()}", getBaseName(), getImplementationDependencies(), - sources, + this, testedComponent.sources, identity ).apply { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeUsage.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeUsage.kt index 48248b3a5d5..8da8d089bc3 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeUsage.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativeUsage.kt @@ -2,4 +2,5 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal object KotlinNativeUsage { const val KLIB = "kotlin-native-klib" + const val FRAMEWORK = "kotlin-native-framework" } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/OutputKind.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/OutputKind.kt index 01688420c23..ecd8bc67879 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/OutputKind.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/OutputKind.kt @@ -3,28 +3,46 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal import org.gradle.api.attributes.Usage import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary import org.jetbrains.kotlin.konan.target.CompilerOutputKind +import org.jetbrains.kotlin.konan.target.Family +import org.jetbrains.kotlin.konan.target.KonanTarget enum class OutputKind( val compilerOutputKind: CompilerOutputKind, val binaryClass: Class, private val developmentBinaryPriority: Int, val runtimeUsageName: String? = null, - val linkUsageName: String? = null + val linkUsageName: String? = null, + val publishable: Boolean = true ) { - EXECUTABLE(CompilerOutputKind.PROGRAM, - KotlinNativeExecutableImpl::class.java, - 1, - Usage.NATIVE_RUNTIME, - null + EXECUTABLE( + CompilerOutputKind.PROGRAM, + KotlinNativeExecutableImpl::class.java, + 0, + Usage.NATIVE_RUNTIME, + null ), - KLIBRARY(CompilerOutputKind.LIBRARY, - KotlinNativeKLibraryImpl::class.java, - 0, - null, - KotlinNativeUsage.KLIB - ); + KLIBRARY( + CompilerOutputKind.LIBRARY, + KotlinNativeLibraryImpl::class.java, + 1, + null, + KotlinNativeUsage.KLIB + ), + FRAMEWORK( + CompilerOutputKind.FRAMEWORK, + KotlinNativeFrameworkImpl::class.java, + 2, + null, + KotlinNativeUsage.FRAMEWORK, + false + ) { + override fun availableFor(target: KonanTarget) = + target.family == Family.OSX || target.family == Family.IOS + }; + + open fun availableFor(target: KonanTarget) = true companion object { - internal fun Collection.getDevelopmentKind() = maxBy { it.developmentBinaryPriority } + internal fun Collection.getDevelopmentKind() = minBy { it.developmentBinaryPriority } } } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativeBasePlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativeBasePlugin.kt index c34445d4587..aba344ff442 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativeBasePlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativeBasePlugin.kt @@ -14,10 +14,7 @@ import org.gradle.language.plugins.NativeBasePlugin import org.gradle.nativeplatform.test.tasks.RunTestExecutable import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.KonanPlugin -import org.jetbrains.kotlin.gradle.plugin.experimental.internal.AbstractKotlinNativeBinary -import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativeExecutableImpl -import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativeKLibraryImpl -import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativeTestExecutableImpl +import org.jetbrains.kotlin.gradle.plugin.experimental.internal.* import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.plugin.hasProperty import org.jetbrains.kotlin.gradle.plugin.konanCompilerDownloadDir @@ -94,7 +91,7 @@ class KotlinNativeBasePlugin: Plugin { when(binary) { is KotlinNativeExecutableImpl -> binary.runtimeFile.set(compileTask.outputFile) - is KotlinNativeKLibraryImpl -> binary.linkFile.set(compileTask.outputFile) + is AbstractKotlinNativeLibrary -> binary.linkFile.set(compileTask.outputFile) } if (binary is KotlinNativeTestExecutableImpl) { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt index 74f89616cda..697e978d1a9 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt @@ -83,7 +83,7 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt for (kind in outputKinds) { for (buildType in KotlinNativeBuildType.DEFAULT_BUILD_TYPES) { - for (target in targets) { + for (target in targets.filter { kind.availableFor(it) }) { val buildTypeSuffix = buildType.name val outputKindSuffix = createDimensionSuffix(kind.name, outputKinds) @@ -112,12 +112,14 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt val binary = component.addBinary(kind, variantIdentity) - if (hostManager.isEnabled(target)) { - component.mainPublication.variants.add(binary) - } else { - // Known but not buildable. - // It allows us to publish different parts of a multitarget library from differnt hosts. - component.mainPublication.variants.add(variantIdentity) + if (kind.publishable) { + if (hostManager.isEnabled(target)) { + component.mainPublication.variants.add(binary) + } else { + // Known but not buildable. + // It allows us to publish different parts of a multitarget library from differnt hosts. + component.mainPublication.variants.add(variantIdentity) + } } if (kind == developmentKind && diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt index e296ab424c8..a19b652c56d 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt @@ -39,6 +39,8 @@ open class KotlinNativeCompile: DefaultTask() { val target: String @Input get() = binary.konanTarget.name + val additionalCompilerOptions: Collection @Input get() = binary.additionalCompilerOptions + @OutputFile val outputFile: RegularFileProperty = newOutputFile() @@ -60,7 +62,7 @@ open class KotlinNativeCompile: DefaultTask() { add("-Xmulti-platform") - addAll(binary.additionalCompilerOptions) + addAll(additionalCompilerOptions) libraries.files.forEach {library -> library.parent?.let { addArg("-r", it) }