Skip to content

Commit

Permalink
[Gradle] Add freeCompilerArgs to swift export's configure dsl block
Browse files Browse the repository at this point in the history
^KT-75171
  • Loading branch information
AYastrebov authored and Space Team committed Feb 13, 2025
1 parent bb953b3 commit b7f373f
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2301,6 +2301,7 @@ public abstract class org/jetbrains/kotlin/gradle/plugin/mpp/apple/XCFrameworkTa
}

public abstract interface class org/jetbrains/kotlin/gradle/plugin/mpp/apple/swiftexport/SwiftExportAdvancedConfiguration {
public abstract fun getFreeCompilerArgs ()Lorg/gradle/api/provider/ListProperty;
public abstract fun getSettings ()Lorg/gradle/api/provider/MapProperty;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,20 @@ import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractNativeLibrary
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.appleTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.configuration
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.*
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.SwiftExportClasspathResolvableConfiguration
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.exportedSwiftExportApiConfiguration
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.swiftExportedModules
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.tasks.*
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.tasks.BuildSPMSwiftExportPackage
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.tasks.GenerateSPMPackageFromSwiftExport
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.tasks.MergeStaticLibrariesTask
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.tasks.SwiftExportTask
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.utils.getOrCreate
import org.jetbrains.kotlin.gradle.utils.konanDistribution
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly

Expand Down Expand Up @@ -71,6 +67,7 @@ internal fun Project.registerSwiftExportTask(
buildType = buildType,
target = target,
mainCompilation = mainCompilation,
freeCompilerArgs = swiftExportExtension.advancedConfiguration.freeCompilerArgs,
swiftExportTask = swiftExportTask
)

Expand Down Expand Up @@ -173,6 +170,7 @@ private fun registerSwiftExportCompilationAndGetBinary(
buildType: NativeBuildType,
target: KotlinNativeTarget,
mainCompilation: KotlinNativeCompilation,
freeCompilerArgs: Provider<List<String>>,
swiftExportTask: TaskProvider<SwiftExportTask>,
): AbstractNativeLibrary {
target.compilations.getOrCreate(
Expand All @@ -193,6 +191,10 @@ private fun registerSwiftExportCompilationAndGetBinary(
staticLib.compilation = swiftExportCompilation
staticLib.binaryOption("swiftExport", "true")
staticLib.binaryOption("cInterfaceMode", "none")

staticLib.linkTaskProvider.configure {
it.toolOptions.freeCompilerArgs.addAll(freeCompilerArgs)
}
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,19 @@ import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ModuleVersionIdentifier
import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.provider.*
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractNativeLibrary
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.exportedSwiftExportApiConfigurationName
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.plugin.mpp.getCoordinatesFromGroupNameAndVersion
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
import org.jetbrains.kotlin.gradle.swiftexport.ExperimentalSwiftExportDsl
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink
import org.jetbrains.kotlin.gradle.utils.domainObjectSet
import org.jetbrains.kotlin.gradle.utils.getValue
import org.jetbrains.kotlin.gradle.utils.namedDomainObjectSet
import javax.inject.Inject

interface SwiftExportedModuleMetadata {
Expand All @@ -48,6 +49,13 @@ interface SwiftExportAdvancedConfiguration {
@get:Input
@get:Optional
val settings: MapProperty<String, String>

/**
* Specifies additional compiler arguments to be passed to the compiler.
*/
@get:Input
@get:Optional
val freeCompilerArgs: ListProperty<String>
}

interface SwiftExportedModuleVersionMetadata : SwiftExportedModuleMetadata {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -484,10 +484,8 @@ class SwiftExportUnitTests {
@Test
fun `test swift export custom compiler options`() {
val project = swiftExportProject(
multiplatform = {
iosSimulatorArm64()

compilerOptions {
swiftExport = {
configure {
freeCompilerArgs.add("-opt-in=some.value")
}
}
Expand Down

0 comments on commit b7f373f

Please sign in to comment.