diff --git a/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt index c94c059d2de..68a1b05e3ad 100644 --- a/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -190,6 +190,7 @@ open class HostManager(subtargetProvider: SubTargetProvider = NoSubTargets()) { ) + zephyrSubtargets, KonanTarget.MINGW_X64 to setOf( KonanTarget.MINGW_X64, + KonanTarget.MINGW_X86, KonanTarget.WASM32, KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 246f8664cdc..3d27f068692 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -1109,25 +1109,35 @@ class NewMultiplatformIT : BaseGradleIT() { """.trimIndent()) } - val host = nativeHostTargetName + val targetsToBuild = if (HostManager.hostIsMingw) { + listOf(nativeHostTargetName, "mingw86") + } else { + listOf(nativeHostTargetName) + } - val libraryCinteropTask = ":projectLibrary:cinteropStdio${host.capitalize()}" - val libraryCompileTask = ":projectLibrary:compileKotlin${host.capitalize()}" + val libraryCinteropTasks = targetsToBuild.map { ":projectLibrary:cinteropStdio${it.capitalize()}" } + val libraryCompileTasks = targetsToBuild.map { ":projectLibrary:compileKotlin${it.capitalize()}" } build(":projectLibrary:build") { assertSuccessful() - assertTasksExecuted(libraryCinteropTask) + assertTasksExecuted(libraryCinteropTasks) assertTrue(output.contains("Project test"), "No test output found") - assertFileExists("projectLibrary/build/classes/kotlin/$host/main/projectLibrary-cinterop-stdio.klib") + targetsToBuild.forEach { + assertFileExists("projectLibrary/build/classes/kotlin/$it/main/projectLibrary-cinterop-stdio.klib") + } } build(":publishedLibrary:build", ":publishedLibrary:publish") { assertSuccessful() - assertTasksExecuted(":publishedLibrary:cinteropStdio${host.capitalize()}") + assertTasksExecuted( + targetsToBuild.map { ":publishedLibrary:cinteropStdio${it.capitalize()}" } + ) assertTrue(output.contains("Published test"), "No test output found") - assertFileExists("publishedLibrary/build/classes/kotlin/$host/main/publishedLibrary-cinterop-stdio.klib") - assertFileExists("publishedLibrary/build/classes/kotlin/$host/test/test-cinterop-stdio.klib") - assertFileExists("repo/org/example/publishedLibrary-$host/1.0/publishedLibrary-$host-1.0-cinterop-stdio.klib") + targetsToBuild.forEach { + assertFileExists("publishedLibrary/build/classes/kotlin/$it/main/publishedLibrary-cinterop-stdio.klib") + assertFileExists("publishedLibrary/build/classes/kotlin/$it/test/test-cinterop-stdio.klib") + assertFileExists("repo/org/example/publishedLibrary-$it/1.0/publishedLibrary-$it-1.0-cinterop-stdio.klib") + } } build(":build") { @@ -1137,14 +1147,18 @@ class NewMultiplatformIT : BaseGradleIT() { } // Check that changing the compiler version in properties causes interop reprocessing and source recompilation. + val hostLibraryTasks = listOf( + ":projectLibrary:cinteropStdio${nativeHostTargetName.capitalize()}", + ":projectLibrary:compileKotlin${nativeHostTargetName.capitalize()}" + ) build(":projectLibrary:build") { assertSuccessful() - assertTasksUpToDate(libraryCinteropTask, libraryCompileTask) + assertTasksUpToDate(hostLibraryTasks) } - build(libraryCinteropTask, libraryCompileTask, "-Porg.jetbrains.kotlin.native.version=1.1.0") { + build(*hostLibraryTasks.toTypedArray(), "-Porg.jetbrains.kotlin.native.version=1.1.0") { assertSuccessful() - assertTasksExecuted(libraryCinteropTask, libraryCompileTask) + assertTasksExecuted(hostLibraryTasks) } } } @@ -1484,7 +1498,7 @@ class NewMultiplatformIT : BaseGradleIT() { } val expectedDefaultSourceSets = listOf( - "jvm6", "nodeJs", "wasm32", "mingw64", "linux64", "macos64" + "jvm6", "nodeJs", "wasm32", "mingw64", "mingw86", "linux64", "macos64" ).flatMapTo(mutableSetOf()) { target -> listOf("main", "test").map { compilation -> Triple(target, compilation, "$target${compilation.capitalize()}") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts index 72a2c8b1cbe..9604b02ac01 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts @@ -19,6 +19,9 @@ kotlin { linuxX64("linux64") mingwX64("mingw64") macosX64("macos64") + + // We use this library in the cinterop test which includes a Windows x86 target. + mingwX86("mingw86") targets.all { mavenPublication(Action { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/kotlin/Main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/kotlin/Main.kt new file mode 100644 index 00000000000..d25550aaefc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/kotlin/Main.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package com.example.lib + +actual fun expectedFun(): Unit { + id(123) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/resources/mingw86MainResource.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/resources/mingw86MainResource.txt new file mode 100644 index 00000000000..d2c4f080510 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/src/mingw86Main/resources/mingw86MainResource.txt @@ -0,0 +1 @@ +resource \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle index a77b4883a01..34281d104d8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle @@ -31,6 +31,9 @@ kotlin { fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.mingwX64, 'mingw64') fromPreset(presets.macosX64, 'macos64') + + // We use this library in the cinterop test which includes a Windows x86 target. + fromPreset(presets.mingwX86, 'mingw86') // Check the DSL constructs in the Groovy DSL: fromPreset(presets.jvm, 'jvm6') { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/kotlin/Main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/kotlin/Main.kt new file mode 100644 index 00000000000..d25550aaefc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/kotlin/Main.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package com.example.lib + +actual fun expectedFun(): Unit { + id(123) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/resources/mingw86MainResource.txt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/resources/mingw86MainResource.txt new file mode 100644 index 00000000000..d2c4f080510 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/src/mingw86Main/resources/mingw86MainResource.txt @@ -0,0 +1 @@ +resource \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/build.gradle index cf1a668654f..813ebd7c6c2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/build.gradle @@ -31,18 +31,22 @@ kotlin { macos64Main { dependsOn sourceSets.allNative } linux64Main { dependsOn sourceSets.allNative } mingw64Main { dependsOn sourceSets.allNative } + mingw86Main { dependsOn sourceSets.allNative } macos64Test { dependsOn sourceSets.nativeTest } linux64Test { dependsOn sourceSets.nativeTest } mingw64Test { dependsOn sourceSets.nativeTest } + mingw86Test { dependsOn sourceSets.nativeTest } } targets { fromPreset(presets.macosX64, 'macos64') fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.mingwX64, 'mingw64') + // Test building a 32-bit Windows binary. + fromPreset(presets.mingwX86, 'mingw86') - configure([macos64, linux64, mingw64]) { + configure([macos64, linux64, mingw64, mingw86]) { compilations.main.outputKinds ['EXECUTABLE'] } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/projectLibrary/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/projectLibrary/build.gradle index 555d607073c..d0727ff5b2c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/projectLibrary/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/projectLibrary/build.gradle @@ -14,18 +14,22 @@ kotlin { macos64Main { dependsOn sourceSets.allNative } linux64Main { dependsOn sourceSets.allNative } mingw64Main { dependsOn sourceSets.allNative } + mingw86Main { dependsOn sourceSets.allNative } macos64Test { dependsOn sourceSets.nativeTest } linux64Test { dependsOn sourceSets.nativeTest } mingw64Test { dependsOn sourceSets.nativeTest } + mingw86Test { dependsOn sourceSets.nativeTest } } targets { fromPreset(presets.macosX64, 'macos64') fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.mingwX64, 'mingw64') + // Test building a 32-bit Windows binary. + fromPreset(presets.mingwX86, 'mingw86') - configure([macos64, linux64, mingw64]) { + configure([macos64, linux64, mingw64, mingw86]) { compilations.main.cinterops { stdio { packageName 'example.cinterop.project.stdio' diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle index eb1a64c0630..af236cd012a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle @@ -22,18 +22,22 @@ kotlin { macos64Main { dependsOn sourceSets.allNative } linux64Main { dependsOn sourceSets.allNative } mingw64Main { dependsOn sourceSets.allNative } + mingw86Main { dependsOn sourceSets.allNative } macos64Test { dependsOn sourceSets.nativeTest } linux64Test { dependsOn sourceSets.nativeTest } mingw64Test { dependsOn sourceSets.nativeTest } + mingw86Test { dependsOn sourceSets.nativeTest } } targets { fromPreset(presets.macosX64, 'macos64') fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.mingwX64, 'mingw64') + // Test building a 32-bit Windows binary. + fromPreset(presets.mingwX86, 'mingw86') - configure([macos64, linux64, mingw64]) { + configure([macos64, linux64, mingw64, mingw86]) { compilations.all { // Add interop in the test compilation too as a regression test for KT-30290. cinterops {