@@ -11,6 +11,7 @@ import org.gradle.api.tasks.TaskProvider
1111import org.gradle.kotlin.dsl.named
1212import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
1313import org.jetbrains.kotlin.konan.target.HostManager
14+ import org.jetbrains.kotlin.konan.target.KonanTarget
1415
1516/* *
1617 * See [CMAKE_BUILD_TYPE](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html)
@@ -79,8 +80,8 @@ private fun Project.registerCmakeConfigureTask(
7980 val cmakeBuildDir = project.cmakeBuildDir(knTarget)
8081 val installDir = project.cmakeInstallDir(knTarget)
8182
82- val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).path
83- val relativeInstallDir = installDir.relativeTo(project.rootDir).path
83+ val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).slashPath
84+ val relativeInstallDir = installDir.relativeTo(project.rootDir).slashPath
8485 val cmakeLists = project.rootProject.projectDir.resolve(" CMakeLists.txt" )
8586
8687 return project.tasks.register(knTarget.cmakeConfigureTaskName) {
@@ -141,7 +142,7 @@ private fun Project.registerCmakeBuildTask(
141142 buildType : CMakeBuildType ,
142143): TaskProvider <Task > {
143144 val cmakeBuildDir = project.cmakeBuildDir(knTarget)
144- val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).path
145+ val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).slashPath
145146
146147 return project.tasks.register(knTarget.cmakeBuildTaskName) {
147148 group = " ffi"
@@ -187,7 +188,7 @@ private fun Project.registerCmakeInstallTask(
187188 buildType : CMakeBuildType ,
188189): TaskProvider <Task > {
189190 val cmakeBuildDir = project.cmakeBuildDir(knTarget)
190- val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).path
191+ val relativeBuildDir = cmakeBuildDir.relativeTo(project.rootDir).slashPath
191192 val installDir = project.cmakeInstallDir(knTarget)
192193
193194 return project.tasks.register(knTarget.cmakeInstallTaskName) {
@@ -208,20 +209,51 @@ private fun Project.registerCmakeInstallTask(
208209 }
209210}
210211
212+ /* *
213+ * Konan targets for which a container will be used execute CMake tasks. Targets that do not appear in this list or are
214+ * disabled by `aws.sdk.kotlin.crt.disableCrossCompile` will be compiled without using a container (i.e., in the same
215+ * shell executing Gradle).
216+ */
217+ private val containerCompileTargets = setOf (
218+ KonanTarget .LINUX_X64 ,
219+ KonanTarget .LINUX_ARM64 ,
220+ KonanTarget .MINGW_X64 ,
221+ )
222+
223+ /* *
224+ * Konan targets which require explicitly running CMake inside of Bash
225+ */
226+ private val requiresExplicitBash = setOf (
227+ KonanTarget .MINGW_X64 ,
228+ )
229+
211230private fun runCmake (project : Project , target : KotlinNativeTarget , cmakeArgs : List <String >) {
231+ val disableContainerTargets = (project.properties[" aws.crt.disableContainerTargets" ] as ? String ? : " " )
232+ .split(' ,' )
233+ .map { it.trim() }
234+ .toSet()
235+
236+ val useContainer = target.konanTarget in containerCompileTargets &&
237+ target.konanTarget.name !in disableContainerTargets
238+
212239 project.exec {
213240 workingDir(project.rootDir)
214241 val exeArgs = cmakeArgs.toMutableList()
215- val exeName = when {
216- target.konanTarget in crossCompileTargets -> {
217- // cross compiling via dockcross - set the docker exe to cmake
218- val containerScriptArgs = listOf (" --args" , " --pull=missing" , " --" , " cmake" )
219- exeArgs.addAll(0 , containerScriptArgs)
220- val script = " dockcross-" + target.konanTarget.name.replace(" _" , " -" )
221- validateCrossCompileScriptsAvailable(project, script)
242+ val exeName = if (useContainer) {
243+ // cross compiling via dockcross - set the docker exe to cmake
244+ val containerScriptArgs = listOf (" --args" , " --pull=missing" , " --" , " cmake" )
245+ exeArgs.addAll(0 , containerScriptArgs)
246+ val script = " dockcross-" + target.konanTarget.name.replace(" _" , " -" )
247+ validateCrossCompileScriptsAvailable(project, script)
248+
249+ if (target.konanTarget in requiresExplicitBash) {
250+ exeArgs.add(0 , " ./$script " )
251+ " bash"
252+ } else {
222253 " ./$script "
223254 }
224- else -> " cmake"
255+ } else {
256+ " cmake"
225257 }
226258
227259 project.logger.info(" $exeName ${exeArgs.joinToString(separator = " " )} " )
@@ -238,8 +270,6 @@ private fun validateCrossCompileScriptsAvailable(project: Project, script: Strin
238270 the cross compile scripts.
239271
240272 e.g. `./docker-images/build-all.sh`
241-
242- Alternatively disable cross compilation by setting the property `-Paws.sdk.kotlin.crt.disableCrossCompile=true`
243273 """ .trimIndent()
244274 error(message)
245275 }
0 commit comments