[K/N] Proper MinGW cross-compilation support
This commit is contained in:
@@ -874,11 +874,14 @@ runtimeDefinitions.android_x64 = __ANDROID__ USE_GCC_UNWIND=1 USE_ELF_SYMBOLS=1
|
|||||||
|
|
||||||
# Windows x86-64, based on mingw-w64.
|
# Windows x86-64, based on mingw-w64.
|
||||||
llvmHome.mingw_x64 = $llvm.mingw_x64.dev
|
llvmHome.mingw_x64 = $llvm.mingw_x64.dev
|
||||||
targetToolchain.mingw_x64 = msys2-mingw-w64-x86_64-1
|
|
||||||
libffiDir.mingw_x64 = libffi-3.3-windows-x64-1
|
libffiDir.mingw_x64 = libffi-3.3-windows-x64-1
|
||||||
windowsKitParts.mingw_x64 = windows-kit-x64-v1-alpha2
|
windowsKitParts.mingw_x64 = windows-kit-x64-v1-alpha2
|
||||||
msvcParts.mingw_x64 = msvc-x64-v1-alpha2
|
msvcParts.mingw_x64 = msvc-x64-v1-alpha2
|
||||||
lldLocation.mingw_x64 = lld-12.0.1-windows-x64/ld.lld.exe
|
|
||||||
|
linker.mingw_x64 = lld-12.0.1-windows-x64/ld.lld.exe
|
||||||
|
linker.linux_x64-mingw_x64 = $targetToolchain.linux_x64-mingw_x64/bin/ld.lld
|
||||||
|
linker.macos_x64-mingw_x64 = $targetToolchain.macos_x64-mingw_x64/bin/ld.lld
|
||||||
|
linker.macos_arm64-mingw_x64 = $targetToolchain.macos_arm64-mingw_x64/bin/ld.lld
|
||||||
|
|
||||||
windows-kit-x64-v1-alpha2.default = \
|
windows-kit-x64-v1-alpha2.default = \
|
||||||
remote:internal
|
remote:internal
|
||||||
@@ -886,13 +889,19 @@ windows-kit-x64-v1-alpha2.default = \
|
|||||||
msvc-x64-v1-alpha2.default = \
|
msvc-x64-v1-alpha2.default = \
|
||||||
remote:internal
|
remote:internal
|
||||||
|
|
||||||
targetToolchain.linux_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
targetToolchain.mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||||
targetToolchain.macos_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
targetToolchain.linux_x64-mingw_x64 = $llvmHome.linux_x64
|
||||||
|
targetToolchain.macos_x64-mingw_x64 = $llvmHome.macos_x64
|
||||||
|
targetToolchain.macos_arm64-mingw_x64 = $llvmHome.macos_arm64
|
||||||
|
|
||||||
# for Windows we are currently using LLDB 9
|
# for Windows we are currently using LLDB 9
|
||||||
dependencies.mingw_x64 = \
|
dependencies.mingw_x64 = \
|
||||||
lldb-2-windows \
|
lldb-2-windows \
|
||||||
lld-12.0.1-windows-x64 \
|
lld-12.0.1-windows-x64 \
|
||||||
msys2-mingw-w64-x86_64-1
|
msys2-mingw-w64-x86_64-1
|
||||||
|
dependencies.linux_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||||
|
dependencies.macos_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||||
|
dependencies.macos_arm64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||||
|
|
||||||
targetTriple.mingw_x64 = x86_64-pc-windows-gnu
|
targetTriple.mingw_x64 = x86_64-pc-windows-gnu
|
||||||
targetSysRoot.mingw_x64 = msys2-mingw-w64-x86_64-1
|
targetSysRoot.mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||||
@@ -916,16 +925,24 @@ runtimeDefinitions.mingw_x64 = USE_GCC_UNWIND=1 USE_PE_COFF_SYMBOLS=1 KONAN_WIND
|
|||||||
|
|
||||||
# Windows i686, based on mingw-w64.
|
# Windows i686, based on mingw-w64.
|
||||||
targetToolchain.mingw_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
targetToolchain.mingw_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||||
lldLocation.mingw_x86 = lld-12.0.1-windows-x64/ld.lld.exe
|
targetToolchain.linux_x64-mingw_x86 = $llvmHome.linux_x64
|
||||||
|
targetToolchain.macos_x64-mingw_x86 = $llvmHome.macos_x64
|
||||||
|
targetToolchain.macos_arm64-mingw_x86 = $llvmHome.macos_arm64
|
||||||
|
|
||||||
|
linker.mingw_x64-mingw_x86 = lld-12.0.1-windows-x64/ld.lld.exe
|
||||||
|
linker.linux_x64-mingw_x86 = $targetToolchain.linux_x64-mingw_x86/bin/ld.lld
|
||||||
|
linker.macos_x64-mingw_x86 = $targetToolchain.macos_x64-mingw_x86/bin/ld.lld
|
||||||
|
linker.macos_arm64-mingw_x86 = $targetToolchain.macos_arm64-mingw_x86/bin/ld.lld
|
||||||
|
|
||||||
dependencies.mingw_x64-mingw_x86 = \
|
dependencies.mingw_x64-mingw_x86 = \
|
||||||
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \
|
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \
|
||||||
lld-12.0.1-windows-x64
|
lld-12.0.1-windows-x64
|
||||||
targetToolchain.linux_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
|
||||||
targetToolchain.macos_x64-mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
|
||||||
dependencies.linux_x64-mingw_x86 = \
|
dependencies.linux_x64-mingw_x86 = \
|
||||||
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||||
dependencies.macos_x64-mingw_x86 = \
|
dependencies.macos_x64-mingw_x86 = \
|
||||||
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||||
|
dependencies.macos_arm64-mingw_x86 = \
|
||||||
|
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||||
|
|
||||||
targetTriple.mingw_x86 = i686-pc-windows-gnu
|
targetTriple.mingw_x86 = i686-pc-windows-gnu
|
||||||
targetSysRoot.mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
targetSysRoot.mingw_x86 = msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||||
|
|||||||
+2
-2
@@ -105,8 +105,8 @@ interface AppleConfigurables : Configurables, ClangFlags {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface MingwConfigurables : Configurables, ClangFlags {
|
interface MingwConfigurables : Configurables, ClangFlags {
|
||||||
val lldLocation get() = targetString("lldLocation")!!
|
val linker get() = hostTargetString("linker")!!
|
||||||
val absoluteLldLocation get() = absolute(lldLocation)
|
val absoluteLinker get() = absolute(linker)
|
||||||
|
|
||||||
val windowsKit: WindowsKit
|
val windowsKit: WindowsKit
|
||||||
val msvc: Msvc
|
val msvc: Msvc
|
||||||
|
|||||||
@@ -422,8 +422,13 @@ class GccBasedLinker(targetProperties: GccConfigurables)
|
|||||||
class MingwLinker(targetProperties: MingwConfigurables)
|
class MingwLinker(targetProperties: MingwConfigurables)
|
||||||
: LinkerFlags(targetProperties), MingwConfigurables by targetProperties {
|
: LinkerFlags(targetProperties), MingwConfigurables by targetProperties {
|
||||||
|
|
||||||
private val ar = "$absoluteTargetToolchain/bin/ar"
|
// TODO: Maybe always use llvm-ar?
|
||||||
private val linker = "$absoluteLlvmHome/bin/clang++"
|
private val ar = if (HostManager.hostIsMingw) {
|
||||||
|
"$absoluteTargetToolchain/bin/ar"
|
||||||
|
} else {
|
||||||
|
"$absoluteLlvmHome/bin/llvm-ar"
|
||||||
|
}
|
||||||
|
private val clang = "$absoluteLlvmHome/bin/clang++"
|
||||||
|
|
||||||
override val useCompilerDriverAsLinker: Boolean get() = true
|
override val useCompilerDriverAsLinker: Boolean get() = true
|
||||||
|
|
||||||
@@ -483,12 +488,7 @@ class MingwLinker(targetProperties: MingwConfigurables)
|
|||||||
+additionalArguments
|
+additionalArguments
|
||||||
}
|
}
|
||||||
|
|
||||||
return listOf(when {
|
return listOf(Command(clang).constructLinkerArguments(additionalArguments = listOf("-fuse-ld=$absoluteLinker")))
|
||||||
HostManager.hostIsMingw -> Command(linker)
|
|
||||||
else -> Command("wine64", "$linker.exe")
|
|
||||||
}.constructLinkerArguments(
|
|
||||||
additionalArguments = listOf("-fuse-ld=$absoluteLldLocation")
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ open class HostManager(
|
|||||||
LINUX_ARM64,
|
LINUX_ARM64,
|
||||||
LINUX_MIPS32,
|
LINUX_MIPS32,
|
||||||
LINUX_MIPSEL32,
|
LINUX_MIPSEL32,
|
||||||
|
MINGW_X86,
|
||||||
|
MINGW_X64,
|
||||||
ANDROID_X86,
|
ANDROID_X86,
|
||||||
ANDROID_X64,
|
ANDROID_X64,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
@@ -89,6 +91,8 @@ open class HostManager(
|
|||||||
LINUX_X64,
|
LINUX_X64,
|
||||||
LINUX_ARM32_HFP,
|
LINUX_ARM32_HFP,
|
||||||
LINUX_ARM64,
|
LINUX_ARM64,
|
||||||
|
MINGW_X86,
|
||||||
|
MINGW_X64,
|
||||||
ANDROID_X86,
|
ANDROID_X86,
|
||||||
ANDROID_X64,
|
ANDROID_X64,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
@@ -113,6 +117,8 @@ open class HostManager(
|
|||||||
LINUX_X64,
|
LINUX_X64,
|
||||||
LINUX_ARM32_HFP,
|
LINUX_ARM32_HFP,
|
||||||
LINUX_ARM64,
|
LINUX_ARM64,
|
||||||
|
MINGW_X86,
|
||||||
|
MINGW_X64,
|
||||||
ANDROID_X86,
|
ANDROID_X86,
|
||||||
ANDROID_X64,
|
ANDROID_X64,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
@@ -122,9 +128,9 @@ open class HostManager(
|
|||||||
)
|
)
|
||||||
|
|
||||||
private val enabledExperimentalByHost: Map<KonanTarget, Set<KonanTarget>> = mapOf(
|
private val enabledExperimentalByHost: Map<KonanTarget, Set<KonanTarget>> = mapOf(
|
||||||
LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
|
LINUX_X64 to zephyrSubtargets.toSet(),
|
||||||
MACOS_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
|
MACOS_X64 to zephyrSubtargets.toSet(),
|
||||||
MINGW_X64 to setOf<KonanTarget>() + zephyrSubtargets,
|
MINGW_X64 to zephyrSubtargets.toSet(),
|
||||||
MACOS_ARM64 to emptySet()
|
MACOS_ARM64 to emptySet()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user