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",
|
||||||
"-I$absoluteTargetSysRoot/usr/include/c++/4.8.3/arm-linux-gnueabihf")
|
"-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 ->
|
KonanTarget.LINUX_MIPS32 ->
|
||||||
listOf("-target", targetArg!!,
|
listOf("-target", targetArg!!,
|
||||||
"--sysroot=$absoluteTargetSysRoot",
|
"--sysroot=$absoluteTargetSysRoot",
|
||||||
@@ -137,6 +143,13 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con
|
|||||||
"-DELFSIZE=32",
|
"-DELFSIZE=32",
|
||||||
"-DKONAN_NO_UNALIGNED_ACCESS=1")
|
"-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 ->
|
KonanTarget.LINUX_MIPS32 ->
|
||||||
listOf("-DUSE_GCC_UNWIND=1",
|
listOf("-DUSE_GCC_UNWIND=1",
|
||||||
"-DKONAN_LINUX=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) {
|
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)
|
LinuxConfigurablesImpl(target, properties, baseDir)
|
||||||
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
||||||
LinuxMIPSConfigurablesImpl(target, properties, baseDir)
|
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_X86 : KonanTarget( "mingw_x86", Family.MINGW, Architecture.X86)
|
||||||
object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64)
|
object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64)
|
||||||
object MACOS_X64 : KonanTarget( "macos_x64", Family.OSX, 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_ARM32_HFP :KonanTarget( "linux_arm32_hfp", Family.LINUX, Architecture.ARM32)
|
||||||
object LINUX_MIPS32 : KonanTarget( "linux_mips32", Family.LINUX, Architecture.MIPS32)
|
object LINUX_MIPS32 : KonanTarget( "linux_mips32", Family.LINUX, Architecture.MIPS32)
|
||||||
object LINUX_MIPSEL32 : KonanTarget( "linux_mipsel32", Family.LINUX, Architecture.MIPSEL32)
|
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(
|
private val predefinedTargets = listOf(
|
||||||
ANDROID_ARM32, ANDROID_ARM64,
|
ANDROID_ARM32, ANDROID_ARM64,
|
||||||
IOS_ARM32, IOS_ARM64, IOS_X64,
|
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,
|
MINGW_X64, MINGW_X86,
|
||||||
MACOS_X64,
|
MACOS_X64,
|
||||||
WASM32)
|
WASM32)
|
||||||
@@ -177,6 +178,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
|||||||
LINUX_X64 to setOf(
|
LINUX_X64 to setOf(
|
||||||
LINUX_X64,
|
LINUX_X64,
|
||||||
LINUX_ARM32_HFP,
|
LINUX_ARM32_HFP,
|
||||||
|
LINUX_ARM64,
|
||||||
LINUX_MIPS32,
|
LINUX_MIPS32,
|
||||||
LINUX_MIPSEL32,
|
LINUX_MIPSEL32,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
@@ -188,6 +190,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
|||||||
MINGW_X86,
|
MINGW_X86,
|
||||||
LINUX_X64,
|
LINUX_X64,
|
||||||
LINUX_ARM32_HFP,
|
LINUX_ARM32_HFP,
|
||||||
|
LINUX_ARM64,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
// TODO: toolchain to be fixed for that to work.
|
// TODO: toolchain to be fixed for that to work.
|
||||||
// ANDROID_ARM64,
|
// ANDROID_ARM64,
|
||||||
@@ -200,6 +203,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
|||||||
IOS_X64,
|
IOS_X64,
|
||||||
LINUX_X64,
|
LINUX_X64,
|
||||||
LINUX_ARM32_HFP,
|
LINUX_ARM32_HFP,
|
||||||
|
LINUX_ARM64,
|
||||||
ANDROID_ARM32,
|
ANDROID_ARM32,
|
||||||
ANDROID_ARM64,
|
ANDROID_ARM64,
|
||||||
WASM32
|
WASM32
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
|||||||
|
|
||||||
private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar"
|
private val ar = if (HostManager.hostIsMac) "$absoluteTargetToolchain/bin/llvm-ar"
|
||||||
else "$absoluteTargetToolchain/bin/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 linker = "$absoluteLlvmHome/bin/ld.lld"
|
||||||
private val specificLibs = abiSpecificLibraries.map { "-L${absoluteTargetSysRoot}/$it" }
|
private val specificLibs = abiSpecificLibraries.map { "-L${absoluteTargetSysRoot}/$it" }
|
||||||
|
|
||||||
@@ -268,6 +268,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
|||||||
|
|
||||||
val isMips = (configurables is LinuxMIPSConfigurables)
|
val isMips = (configurables is LinuxMIPSConfigurables)
|
||||||
val dynamic = kind == LinkerOutputKind.DYNAMIC_LIBRARY
|
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?
|
// TODO: Can we extract more to the konan.configurables?
|
||||||
return listOf(Command(linker).apply {
|
return listOf(Command(linker).apply {
|
||||||
+"--sysroot=${absoluteTargetSysRoot}"
|
+"--sysroot=${absoluteTargetSysRoot}"
|
||||||
@@ -280,8 +281,8 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
|||||||
+dynamicLinker
|
+dynamicLinker
|
||||||
+"-o"
|
+"-o"
|
||||||
+executable
|
+executable
|
||||||
if (!dynamic) +"$absoluteTargetSysRoot/usr/lib64/crt1.o"
|
if (!dynamic) +"$absoluteTargetSysRoot/$crtPrefix/crt1.o"
|
||||||
+"$absoluteTargetSysRoot/usr/lib64/crti.o"
|
+"$absoluteTargetSysRoot/$crtPrefix/crti.o"
|
||||||
+if (dynamic) "$libGcc/crtbeginS.o" else "$libGcc/crtbegin.o"
|
+if (dynamic) "$libGcc/crtbeginS.o" else "$libGcc/crtbegin.o"
|
||||||
+"-L$llvmLib"
|
+"-L$llvmLib"
|
||||||
+"-L$libGcc"
|
+"-L$libGcc"
|
||||||
@@ -296,7 +297,7 @@ open class LinuxBasedLinker(targetProperties: LinuxBasedConfigurables)
|
|||||||
+listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
+listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||||
"-lc", "-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"
|
+if (dynamic) "$libGcc/crtendS.o" else "$libGcc/crtend.o"
|
||||||
+"$absoluteTargetSysRoot/usr/lib64/crtn.o"
|
+"$absoluteTargetSysRoot/$crtPrefix/crtn.o"
|
||||||
+libraries
|
+libraries
|
||||||
+linkerArgs
|
+linkerArgs
|
||||||
})
|
})
|
||||||
@@ -408,7 +409,7 @@ open class ZephyrLinker(targetProperties: ZephyrConfigurables)
|
|||||||
|
|
||||||
fun linker(configurables: Configurables): LinkerFlags =
|
fun linker(configurables: Configurables): LinkerFlags =
|
||||||
when (configurables.target) {
|
when (configurables.target) {
|
||||||
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP ->
|
KonanTarget.LINUX_X64, KonanTarget.LINUX_ARM32_HFP, KonanTarget.LINUX_ARM64 ->
|
||||||
LinuxBasedLinker(configurables as LinuxConfigurables)
|
LinuxBasedLinker(configurables as LinuxConfigurables)
|
||||||
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
KonanTarget.LINUX_MIPS32, KonanTarget.LINUX_MIPSEL32 ->
|
||||||
LinuxBasedLinker(configurables as LinuxMIPSConfigurables)
|
LinuxBasedLinker(configurables as LinuxMIPSConfigurables)
|
||||||
|
|||||||
Reference in New Issue
Block a user