[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.
|
||||
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
|
||||
windowsKitParts.mingw_x64 = windows-kit-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 = \
|
||||
remote:internal
|
||||
@@ -886,13 +889,19 @@ windows-kit-x64-v1-alpha2.default = \
|
||||
msvc-x64-v1-alpha2.default = \
|
||||
remote:internal
|
||||
|
||||
targetToolchain.linux_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||
targetToolchain.macos_x64-mingw_x64 = msys2-mingw-w64-x86_64-1
|
||||
targetToolchain.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
|
||||
dependencies.mingw_x64 = \
|
||||
lldb-2-windows \
|
||||
lld-12.0.1-windows-x64 \
|
||||
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
|
||||
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.
|
||||
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 = \
|
||||
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1 \
|
||||
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 = \
|
||||
msys2-mingw-w64-i686-clang-llvm-lld-compiler_rt-8.0.1
|
||||
dependencies.macos_x64-mingw_x86 = \
|
||||
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
|
||||
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 {
|
||||
val lldLocation get() = targetString("lldLocation")!!
|
||||
val absoluteLldLocation get() = absolute(lldLocation)
|
||||
val linker get() = hostTargetString("linker")!!
|
||||
val absoluteLinker get() = absolute(linker)
|
||||
|
||||
val windowsKit: WindowsKit
|
||||
val msvc: Msvc
|
||||
|
||||
@@ -422,8 +422,13 @@ class GccBasedLinker(targetProperties: GccConfigurables)
|
||||
class MingwLinker(targetProperties: MingwConfigurables)
|
||||
: LinkerFlags(targetProperties), MingwConfigurables by targetProperties {
|
||||
|
||||
private val ar = "$absoluteTargetToolchain/bin/ar"
|
||||
private val linker = "$absoluteLlvmHome/bin/clang++"
|
||||
// TODO: Maybe always use llvm-ar?
|
||||
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
|
||||
|
||||
@@ -483,12 +488,7 @@ class MingwLinker(targetProperties: MingwConfigurables)
|
||||
+additionalArguments
|
||||
}
|
||||
|
||||
return listOf(when {
|
||||
HostManager.hostIsMingw -> Command(linker)
|
||||
else -> Command("wine64", "$linker.exe")
|
||||
}.constructLinkerArguments(
|
||||
additionalArguments = listOf("-fuse-ld=$absoluteLldLocation")
|
||||
))
|
||||
return listOf(Command(clang).constructLinkerArguments(additionalArguments = listOf("-fuse-ld=$absoluteLinker")))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ open class HostManager(
|
||||
LINUX_ARM64,
|
||||
LINUX_MIPS32,
|
||||
LINUX_MIPSEL32,
|
||||
MINGW_X86,
|
||||
MINGW_X64,
|
||||
ANDROID_X86,
|
||||
ANDROID_X64,
|
||||
ANDROID_ARM32,
|
||||
@@ -89,6 +91,8 @@ open class HostManager(
|
||||
LINUX_X64,
|
||||
LINUX_ARM32_HFP,
|
||||
LINUX_ARM64,
|
||||
MINGW_X86,
|
||||
MINGW_X64,
|
||||
ANDROID_X86,
|
||||
ANDROID_X64,
|
||||
ANDROID_ARM32,
|
||||
@@ -113,6 +117,8 @@ open class HostManager(
|
||||
LINUX_X64,
|
||||
LINUX_ARM32_HFP,
|
||||
LINUX_ARM64,
|
||||
MINGW_X86,
|
||||
MINGW_X64,
|
||||
ANDROID_X86,
|
||||
ANDROID_X64,
|
||||
ANDROID_ARM32,
|
||||
@@ -122,9 +128,9 @@ open class HostManager(
|
||||
)
|
||||
|
||||
private val enabledExperimentalByHost: Map<KonanTarget, Set<KonanTarget>> = mapOf(
|
||||
LINUX_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
|
||||
MACOS_X64 to setOf(MINGW_X86, MINGW_X64) + zephyrSubtargets,
|
||||
MINGW_X64 to setOf<KonanTarget>() + zephyrSubtargets,
|
||||
LINUX_X64 to zephyrSubtargets.toSet(),
|
||||
MACOS_X64 to zephyrSubtargets.toSet(),
|
||||
MINGW_X64 to zephyrSubtargets.toSet(),
|
||||
MACOS_ARM64 to emptySet()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user