Support linux/arm64.
This commit is contained in:
committed by
Ilya Matveev
parent
e2f6cba307
commit
c3638e48dc
@@ -39,6 +39,12 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf")
|
||||
|
||||
KonanTarget.LINUX_ARM64 ->
|
||||
listOf("-target", targetArg!!,
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7",
|
||||
"-I$absoluteTargetSysRoot/usr/include/c++/7/aarch64-linux-gnu")
|
||||
|
||||
KonanTarget.LINUX_MIPS32 ->
|
||||
listOf("-target", targetArg!!,
|
||||
"--sysroot=$absoluteTargetSysRoot",
|
||||
@@ -137,6 +143,13 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
|
||||
"-DELFSIZE=32",
|
||||
"-DKONAN_NO_UNALIGNED_ACCESS=1")
|
||||
|
||||
KonanTarget.LINUX_ARM64 ->
|
||||
listOf("-DUSE_GCC_UNWIND=1",
|
||||
"-DKONAN_LINUX=1",
|
||||
"-DKONAN_ARM64=1",
|
||||
"-DUSE_ELF_SYMBOLS=1",
|
||||
"-DELFSIZE=64")
|
||||
|
||||
KonanTarget.LINUX_MIPS32 ->
|
||||
listOf("-DUSE_GCC_UNWIND=1",
|
||||
"-DKONAN_LINUX=1",
|
||||
|
||||
@@ -38,7 +38,7 @@ class ZephyrConfigurablesImpl(target: KonanTarget, properties: Properties, baseD
|
||||
|
||||
|
||||
fun loadConfigurables(target: KonanTarget, properties: Properties, baseDir: String?) = when (target) {
|
||||
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP ->
|
||||
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP, KonanTarget.LINUX_ARM64 ->
|
||||
LinuxConfigurablesImpl(target, properties, baseDir)
|
||||
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
||||
LinuxMIPSConfigurablesImpl(target, properties, baseDir)
|
||||
|
||||
@@ -53,6 +53,7 @@ sealed class KonanTarget(override val name: String, val family: Family, val arch
|
||||
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_ARM64 : KonanTarget( "linux_arm64", Family.LINUX, Architecture.ARM64)
|
||||
object LINUX_ARM32_HFP :KonanTarget( "linux_arm32_hfp", Family.LINUX, Architecture.ARM32)
|
||||
object LINUX_MIPS32 : KonanTarget( "linux_mips32", Family.LINUX, Architecture.MIPS32)
|
||||
object LINUX_MIPSEL32 : KonanTarget( "linux_mipsel32", Family.LINUX, Architecture.MIPSEL32)
|
||||
@@ -135,7 +136,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
||||
private val predefinedTargets = listOf(
|
||||
ANDROID_ARM32, ANDROID_ARM64,
|
||||
IOS_ARM32, IOS_ARM64, IOS_X64,
|
||||
LINUX_X64, LINUX_ARM32_HFP, LINUX_MIPS32, LINUX_MIPSEL32,
|
||||
LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32,
|
||||
MINGW_X64, MINGW_X86,
|
||||
MACOS_X64,
|
||||
WASM32)
|
||||
@@ -177,6 +178,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
||||
LINUX_X64 to setOf(
|
||||
LINUX_X64,
|
||||
LINUX_ARM32_HFP,
|
||||
LINUX_ARM64,
|
||||
LINUX_MIPS32,
|
||||
LINUX_MIPSEL32,
|
||||
ANDROID_ARM32,
|
||||
@@ -188,6 +190,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
||||
MINGW_X86,
|
||||
LINUX_X64,
|
||||
LINUX_ARM32_HFP,
|
||||
LINUX_ARM64,
|
||||
ANDROID_ARM32,
|
||||
// TODO: toolchain to be fixed for that to work.
|
||||
// ANDROID_ARM64,
|
||||
@@ -200,6 +203,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
||||
IOS_X64,
|
||||
LINUX_X64,
|
||||
LINUX_ARM32_HFP,
|
||||
LINUX_ARM64,
|
||||
ANDROID_ARM32,
|
||||
ANDROID_ARM64,
|
||||
WASM32
|
||||
|
||||
@@ -253,7 +253,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
||||
|
||||
private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar"
|
||||
else "$absoluteTargetToolchain/bin/ar"
|
||||
override val libGcc: String = "$absoluteTargetSysRoot/${super.libGcc}"
|
||||
override val libGcc = "$absoluteTargetSysRoot/${super.libGcc}"
|
||||
private val linker = "$absoluteLlvmHome/bin/ld.lld"
|
||||
private val specificLibs = abiSpecificLibraries.map { "-L${absoluteTargetSysRoot}/$it" }
|
||||
|
||||
@@ -268,6 +268,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
||||
|
||||
val isMips = (configurables is LinuxMIPSConfigurables)
|
||||
val dynamic = kind == LinkerOutputKind.DYNAMIC_LIBRARY
|
||||
val crtPrefix = if (configurables.target == KonanTarget.LINUX_ARM64) "usr/lib" else "usr/lib64"
|
||||
// TODO: Can we extract more to the konan.configurables?
|
||||
return listOf(Command(linker).apply {
|
||||
+"--sysroot=${absoluteTargetSysRoot}"
|
||||
@@ -280,8 +281,8 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
||||
+dynamicLinker
|
||||
+"-o"
|
||||
+executable
|
||||
if (!dynamic) +"$absoluteTargetSysRoot/usr/lib64/crt1.o"
|
||||
+"$absoluteTargetSysRoot/usr/lib64/crti.o"
|
||||
if (!dynamic) +"$absoluteTargetSysRoot/$crtPrefix/crt1.o"
|
||||
+"$absoluteTargetSysRoot/$crtPrefix/crti.o"
|
||||
+if (dynamic) "$libGcc/crtbeginS.o" else "$libGcc/crtbegin.o"
|
||||
+"-L$llvmLib"
|
||||
+"-L$libGcc"
|
||||
@@ -296,7 +297,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
||||
+listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||
"-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed")
|
||||
+if (dynamic) "$libGcc/crtendS.o" else "$libGcc/crtend.o"
|
||||
+"$absoluteTargetSysRoot/usr/lib64/crtn.o"
|
||||
+"$absoluteTargetSysRoot/$crtPrefix/crtn.o"
|
||||
+libraries
|
||||
+linkerArgs
|
||||
})
|
||||
@@ -408,7 +409,7 @@ open class ZephyrLinker(targetProperties: ZephyrConfigurables)
|
||||
|
||||
fun linker(configurables: Configurables): LinkerFlags =
|
||||
when (configurables.target) {
|
||||
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP ->
|
||||
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP, KonanTarget.LINUX_ARM64 ->
|
||||
LinuxBasedLinker(configurables as LinuxConfigurables)
|
||||
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
||||
LinuxBasedLinker(configurables as LinuxMIPSConfigurables)
|
||||
|
||||
Reference in New Issue
Block a user