From e1d2f783fe731bfc92b357031606724193ac21eb Mon Sep 17 00:00:00 2001 From: Mike Sinkovsky Date: Thu, 7 Feb 2019 18:39:29 +0500 Subject: [PATCH] mingw_x86 target --- konan/konan.properties | 24 +++++++++++++++++++ .../kotlin/konan/target/ClangArgs.kt | 4 ++-- .../kotlin/konan/target/ConfigurablesImpl.kt | 2 +- .../kotlin/konan/target/KonanTarget.kt | 5 +++- .../jetbrains/kotlin/konan/target/Linker.kt | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/konan/konan.properties b/konan/konan.properties index aca5d42487c..40594b48389 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -358,6 +358,30 @@ dependencies.mingw_x64 = \ msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1 \ libffi-3.2.1-mingw-w64-x86-64 +# Windows i686, based on mingw-w64. +targetToolchain.mingw_x64-mingw_x86 = msys2-mingw-w64-i686-gcc-7.3.0-clang-llvm-lld-6.0.1 +dependencies.mingw_x64-mingw_x86 = \ + msys2-mingw-w64-i686-gcc-7.3.0-clang-llvm-lld-6.0.1 \ + msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1 \ + libffi-3.2.1-mingw-w64-x86-64 + +quadruple.mingw_x86 = i686-w64-mingw32 +targetSysRoot.mingw_x86 = msys2-mingw-w64-i686-gcc-7.3.0-clang-llvm-lld-6.0.1 +# For using with Universal Windows Platform (UWP) we need to use this slower option. +# See https://youtrack.jetbrains.com/issue/KT-27654. +# TODO: remove, once fixed in mingw, check with the bug testcase. +llvmLtoFlags.mingw_x86 = -emulated-tls +llvmLtoOptFlags.mingw_x86 = -O3 -function-sections +llvmLtoNooptFlags.mingw_x86 = -O1 +linkerNoDebugFlags.mingw_x86 = -Wl,-S +linkerDynamicFlags.mingw_x86 = -shared +linkerKonanFlags.mingw_x86 = -static-libgcc -static-libstdc++ \ + -Xclang -flto-visibility-public-std -Wl,--dynamicbase \ + -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \ + -Wl,--defsym,___cxa_demangle=_Konan_cxa_demangle +linkerOptimizationFlags.mingw_x86 = -Wl,--gc-sections +entrySelector.mingw_x86 = -Wl,--defsym,_main=_Konan_main + # WebAssembly 32-bit. targetToolchain.macos_x64-wasm32 = target-toolchain-3-macos-wasm dependencies.macos_x64-wasm32 = \ diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index 3986fb14452..4da777ccae4 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -51,7 +51,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4", "-I$absoluteTargetSysRoot/usr/include/c++/4.9.4/mipsel-unknown-linux-gnu") - KonanTarget.MINGW_X64 -> + KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> listOf("-target", targetArg!!, "--sysroot=$absoluteTargetSysRoot", "-Xclang", "-flto-visibility-public-std") KonanTarget.MACOS_X64 -> @@ -149,7 +149,7 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con "-DKONAN_NO_64BIT_ATOMIC=1", "-DKONAN_NO_UNALIGNED_ACCESS=1") - KonanTarget.MINGW_X64 -> + KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> listOf("-DUSE_GCC_UNWIND=1", "-DUSE_PE_COFF_SYMBOLS=1", "-DKONAN_WINDOWS=1", diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt index d7582cbdf38..471b5529da2 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ConfigurablesImpl.kt @@ -46,7 +46,7 @@ fun loadConfigurables(target: KonanTarget, properties: Properties, baseDir: Stri AppleConfigurablesImpl(target, properties, baseDir) KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> AndroidConfigurablesImpl(target, properties, baseDir) - KonanTarget.MINGW_X64 -> + KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> MingwConfigurablesImpl(target, properties, baseDir) KonanTarget.WASM32 -> WasmConfigurablesImpl(target, properties, baseDir) diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt index f1da2575fc2..07b84c86d67 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -35,6 +35,7 @@ enum class Family(val exeSuffix:String, val dynamicPrefix: String, val dynamicSu enum class Architecture(val bitness: Int) { X64(64), + X86(32), ARM64(64), ARM32(32), MIPS32(32), @@ -49,6 +50,7 @@ sealed class KonanTarget(override val name: String, val family: Family, val arch object IOS_ARM64 : KonanTarget( "ios_arm64", Family.IOS, Architecture.ARM64) object IOS_X64 : KonanTarget( "ios_x64", Family.IOS, Architecture.X64) object LINUX_X64 : KonanTarget( "linux_x64", Family.LINUX, Architecture.X64) + object MINGW_X86 : KonanTarget( "mingw_x86", Family.MINGW, Architecture.X86) object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64) object MACOS_X64 : KonanTarget( "macos_x64", Family.OSX, Architecture.X64) object LINUX_ARM32_HFP :KonanTarget( "linux_arm32_hfp", Family.LINUX, Architecture.ARM32) @@ -134,7 +136,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() ANDROID_ARM32, ANDROID_ARM64, IOS_ARM32, IOS_ARM64, IOS_X64, LINUX_X64, LINUX_ARM32_HFP, LINUX_MIPS32, LINUX_MIPSEL32, - MINGW_X64, + MINGW_X64, MINGW_X86, MACOS_X64, WASM32) @@ -182,6 +184,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() ) + zephyrSubtargets KonanTarget.MINGW_X64 -> listOf( KonanTarget.MINGW_X64, + KonanTarget.MINGW_X86, KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP, KonanTarget.ANDROID_ARM32, diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt index d85197ca5cd..743712cae3b 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Linker.kt @@ -395,7 +395,7 @@ fun linker(configurables: Configurables): LinkerFlags = MacOSBasedLinker(configurables as AppleConfigurables) KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64 -> AndroidLinker(configurables as AndroidConfigurables) - KonanTarget.MINGW_X64 -> + KonanTarget.MINGW_X64, KonanTarget.MINGW_X86 -> MingwLinker(configurables as MingwConfigurables) KonanTarget.WASM32 -> WasmLinker(configurables as WasmConfigurables)