From 7d111c4d3137a3192acccf7a9ee446c20c457091 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 3 Apr 2017 15:16:34 +0300 Subject: [PATCH] Slightly refactored cross compilation infrastructure. --- .../kotlin/native/interop/gen/jvm/main.kt | 44 ++--- .../kotlin/backend/konan/Distribution.kt | 8 +- .../kotlin/backend/konan/KonanProperties.kt | 17 +- .../kotlin/backend/konan/KonanTarget.kt | 36 ++-- .../kotlin/backend/konan/LinkStage.kt | 169 ++++++------------ backend.native/konan.properties | 62 ++++--- 6 files changed, 133 insertions(+), 203 deletions(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt index 72388a719d5..9be8326e3e9 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt @@ -178,12 +178,13 @@ private fun maybeExecuteHelper(dependenciesRoot: String, properties: Properties, private fun Properties.defaultCompilerOpts(target: String, dependencies: String): List { - val hostSysRootDir = this.getOsSpecific("sysRoot", target)!! + val arch = this.getOsSpecific("arch", target)!! + val hostSysRootDir = this.getOsSpecific("sysRoot")!! val hostSysRoot = "$dependencies/$hostSysRootDir" val targetSysRootDir = this.getOsSpecific("targetSysRoot", target) ?: hostSysRootDir val targetSysRoot = "$dependencies/$targetSysRootDir" val sysRoot = targetSysRoot - val llvmHomeDir = this.getOsSpecific("llvmHome", target)!! + val llvmHomeDir = this.getOsSpecific("llvmHome")!! val llvmHome = "$dependencies/$llvmHomeDir" val llvmVersion = this.getProperty("llvmVersion")!! @@ -197,44 +198,25 @@ private fun Properties.defaultCompilerOpts(target: String, dependencies: String) // We workaround the problem with -isystem flag below. val isystem = "$llvmHome/lib/clang/$llvmVersion/include" - when (target) { - "osx" -> + when (detectHost()) { + "osx" -> { + val osVersionMinFlag = this.getOsSpecific("osVersionMinFlagClang", target)!! + val osVersionMinValue = this.getOsSpecific("osVersionMin", target)!! + return listOf( + "-arch", arch, "-isystem", isystem, "-B$hostSysRoot/usr/bin", "--sysroot=$sysRoot", - "-mmacosx-version-min=10.11") - "osx-ios" -> - return listOf( - "-arch", "arm64", - "-isystem", isystem, - "-B$hostSysRoot/usr/bin", - "--sysroot=$sysRoot", - "-miphoneos-version-min=5.0.0") - "osx-ios-sim" -> - return listOf( - "-arch", "x86_64", - "-isystem", isystem, - "-B$hostSysRoot/usr/bin", - "--sysroot=$sysRoot", - "-mios-simulator-version-min=5.0.0") + "$osVersionMinFlag=$osVersionMinValue") + } "linux" -> { val gccToolChainDir = this.getOsSpecific("gccToolChain", target)!! val gccToolChain= "$dependencies/$gccToolChainDir" + val quadruple = this.getOsSpecific("quadruple", target)!! return listOf( - "-isystem", isystem, - "--gcc-toolchain=$gccToolChain", - "-L$llvmHome/lib", - "-B$hostSysRoot/../bin", - "--sysroot=$sysRoot") - } - "linux-raspberrypi" -> { - val gccToolChainDir = this.getOsSpecific("gccToolChain", target)!! - val gccToolChain= "$dependencies/$gccToolChainDir" - - return listOf( - "-target", "armv7-unknown-linux-gnueabihf", + "-target", quadruple, "-isystem", isystem, "--gcc-toolchain=$gccToolChain", "-L$llvmHome/lib", diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Distribution.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Distribution.kt index 5f6a5dd6496..3bf9b4476c7 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Distribution.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Distribution.kt @@ -26,6 +26,8 @@ class Distribution(val config: CompilerConfiguration) { if (!targetManager.crossCompile) "host" else targetManager.current.name.toLowerCase() val suffix = targetManager.currentSuffix() + val hostSuffix = TargetManager.host.suffix + init { if (!targetManager.crossCompile) assert(suffix == hostSuffix) } private fun findKonanHome(): String { val value = System.getProperty("konan.home", "dist") @@ -49,10 +51,10 @@ class Distribution(val config: CompilerConfiguration) { val runtime = config.get(KonanConfigKeys.RUNTIME_FILE) ?: "$lib/runtime.bc" - val llvmHome = "$dependenciesDir/${properties.propertyString("llvmHome.$suffix")}" - val sysRoot = "$dependenciesDir/${properties.propertyString("sysRoot.$suffix")}" - val libGcc = "$dependenciesDir/${properties.propertyString("libGcc.$suffix")}" + val llvmHome = "$dependenciesDir/${properties.propertyString("llvmHome.$hostSuffix")}" + val sysRoot = "$dependenciesDir/${properties.propertyString("sysRoot.$hostSuffix")}" + val libGcc = "$dependenciesDir/${properties.propertyString("libGcc.$suffix")}" val targetSysRoot = if (properties.hasProperty("targetSysRoot.$suffix")) { "$dependenciesDir/${properties.propertyString("targetSysRoot.$suffix")}" } else { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanProperties.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanProperties.kt index 68f1f13a257..e5c7193f2a2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanProperties.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanProperties.kt @@ -23,21 +23,26 @@ public class KonanProperties(val propertyFile: String) { val properties = Properties() + fun String.suffix(suf: String?): String = + if (suf == null) this + else "${this}.${suf}" + init { val file = File(propertyFile) - file.bufferedReader()?.use { reader -> + file.bufferedReader().use { reader -> properties.load(reader) } } - fun propertyString(key: String): String? = properties.getProperty(key) - fun propertyString(key: String, default: String) : String = properties.getProperty(key, default) + fun propertyString(key: String, suffix: String? = null): String? + = properties.getProperty(key.suffix(suffix)) - fun propertyList(key: String): List { - val value = properties.getProperty(key) + fun propertyList(key: String, suffix: String? = null): List { + val value = properties.getProperty(key.suffix(suffix)) return value?.split(' ') ?: listOf() } - fun hasProperty(key: String): Boolean = properties.getProperty(key) != null + fun hasProperty(key: String, suffix: String? = null): Boolean + = properties.getProperty(key.suffix(suffix)) != null } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanTarget.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanTarget.kt index 5be3607b6ac..c3abfe0b9de 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanTarget.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanTarget.kt @@ -19,12 +19,12 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration -enum class KonanTarget(var enabled: Boolean = false) { - IPHONE, - IPHONE_SIM, - LINUX, - MACBOOK, - RASPBERRYPI +enum class KonanTarget(val suffix: String, var enabled: Boolean = false) { + IPHONE("ios"), + IPHONE_SIM("ios-sim"), + LINUX("linux"), + MACBOOK("osx"), + RASPBERRYPI("raspberrypi") } class TargetManager(val config: CompilerConfiguration) { @@ -42,6 +42,8 @@ class TargetManager(val config: CompilerConfiguration) { KonanTarget.IPHONE.enabled = true KonanTarget.IPHONE_SIM.enabled = true } + else -> + error("Unknown host platform: $host") } if (!current.enabled) { @@ -53,7 +55,7 @@ class TargetManager(val config: CompilerConfiguration) { if (targets[name] == null) { error("Unknown target: $name. Use -list_targets to see the list of available targets") } - return name!! + return name } fun list() { @@ -75,24 +77,8 @@ class TargetManager(val config: CompilerConfiguration) { } fun currentSuffix(): String { - if (host == KonanTarget.MACBOOK) { - when (current) { - KonanTarget.MACBOOK -> return("osx") - KonanTarget.IPHONE -> return("osx-ios") - KonanTarget.IPHONE_SIM -> return("osx-ios-sim") - else -> error("Impossible combination of $host and $current") - } - } - if (host == KonanTarget.LINUX) { - when (current) { - KonanTarget.LINUX -> return("linux") - KonanTarget.RASPBERRYPI -> return("linux-raspberrypi") - KonanTarget.IPHONE -> return("linux-ios") - KonanTarget.IPHONE_SIM -> return("linux-ios-sim") - else -> error("Impossible combination of $host and $current") - } - } - error("Unknown host target $host)") + return host.suffix + + if (host != current) "-${current.suffix}" else "" } companion object { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt index 0ba9df09d04..337435f3057 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt @@ -29,39 +29,53 @@ typealias ExecutableFile = String internal abstract class PlatformFlags(val distribution: Distribution) { val properties = distribution.properties - abstract val llvmLtoNooptFlags: List - abstract val llvmLtoOptFlags: List - abstract val llvmLtoFlags: List - abstract val llvmLlcFlags: List + val hostSuffix = TargetManager.host.suffix + val targetSuffix = distribution.suffix + val arch = propertyTargetString("arch") + + open val llvmLtoNooptFlags + = propertyHostList("llvmLtoNooptFlags") + open val llvmLtoOptFlags + = propertyHostList("llvmLtoOptFlags") + open val llvmLtoFlags + = propertyHostList("llvmLtoFlags") + open val entrySelector + = propertyHostList("entrySelector") + open val linkerOptimizationFlags + = propertyHostList("linkerOptimizationFlags") + open val linkerKonanFlags + = propertyHostList("linkerKonanFlags") abstract val linker: String - abstract val linkerKonanFlags: List - abstract val linkerOptimizationFlags: List abstract fun linkCommand(objectFiles: List, executable: ExecutableFile, optimize: Boolean): List + + protected fun propertyHostString(name: String) + = properties.propertyString(name, hostSuffix)!! + protected fun propertyHostList(name: String) + = properties.propertyList(name, hostSuffix) + protected fun propertyTargetString(name: String) + = properties.propertyString(name, targetSuffix)!! + protected fun propertyTargetList(name: String) + = properties.propertyList(name, targetSuffix) + protected fun propertyCommonString(name: String) + = properties.propertyString(name, null)!! + protected fun propertyCommonList(name: String) + = properties.propertyList(name, null) } - -internal open class MacOSPlatform(distribution: Distribution) +internal open class MacOSBasedPlatform(distribution: Distribution) : PlatformFlags(distribution) { - override val llvmLtoNooptFlags = properties.propertyList("llvmLtoNooptFlags.osx") - override val llvmLtoOptFlags = properties.propertyList("llvmLtoOptFlags.osx") - override val llvmLtoFlags = properties.propertyList("llvmLtoFlags.osx") - override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.osx") - - override val linkerOptimizationFlags = - properties.propertyList("linkerOptimizationFlags.osx") - override val linkerKonanFlags = properties.propertyList("linkerKonanFlags.osx") override val linker = "${distribution.sysRoot}/usr/bin/ld" - private val dsymutil = "${distribution.llvmBin}/llvm-dsymutil" - - open val arch = properties.propertyString("arch.osx")!! - open val osVersionMin = properties.propertyList("osVersionMin.osx") + open val osVersionMin = listOf( + propertyTargetString("osVersionMinFlagLd"), + propertyTargetString("osVersionMin")+".0") + open val sysRoot = distribution.sysRoot - open val targetSysRoot = sysRoot + open val targetSysRoot = distribution.targetSysRoot override fun linkCommand(objectFiles: List, executable: String, optimize: Boolean): List { @@ -76,66 +90,39 @@ internal open class MacOSPlatform(distribution: Distribution) linkerKonanFlags + listOf("-lSystem") } - - open fun dsymutilCommand(executable: ExecutableFile): List { - return listOf(dsymutil, executable) - } - - open fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List { - return listOf(dsymutil, "-dump-debug-map" ,executable) - } } -internal class IPhoneOSfromMacOSPlatform(distribution: Distribution) - : MacOSPlatform(distribution) { - - override val arch = properties.propertyString("arch.osx-ios")!! - override val osVersionMin = properties.propertyList("osVersionMin.osx-ios") - override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.osx-ios") - override val targetSysRoot = "${distribution.dependenciesDir}/${properties.propertyString("targetSysRoot.osx-ios")!!}" -} - -internal class IPhoneSimulatorFromMacOSPlatform(distribution: Distribution) - : MacOSPlatform(distribution) { - - override val arch = properties.propertyString("arch.osx-ios-sim")!! - override val osVersionMin = properties.propertyList("osVersionMin.osx-ios-sim") - override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.osx-ios-sim") - override val targetSysRoot = "${distribution.dependenciesDir}/${properties.propertyString("targetSysRoot.osx-ios-sim")!!}" -} - -internal open class LinuxPlatform(distribution: Distribution) +internal open class LinuxBasedPlatform(distribution: Distribution) : PlatformFlags(distribution) { open val sysRoot = distribution.sysRoot + open val targetSysRoot = distribution.targetSysRoot val llvmLib = distribution.llvmLib val libGcc = distribution.libGcc - override val llvmLtoNooptFlags = properties.propertyList("llvmLtoNooptFlags.linux") - override val llvmLtoOptFlags = properties.propertyList("llvmLtoOptFlags.linux") - override val llvmLtoFlags = properties.propertyList("llvmLtoFlags.linux") - override val llvmLlcFlags = properties.propertyList("llvmLlcFlags.linux") - - override val linkerOptimizationFlags = - properties.propertyList("linkerOptimizationFlags.linux") - override val linkerKonanFlags = properties.propertyList("linkerKonanFlags.linux") override val linker = "${distribution.sysRoot}/../bin/ld.gold" - val pluginOptimizationFlags = - properties.propertyList("pluginOptimizationFlags.linux") + open val pluginOptimizationFlags = + propertyHostList("pluginOptimizationFlags") + open val dynamicLinker = + propertyTargetString("dynamicLinker") + + open val specificLibs + = propertyTargetList("abiSpecificLibraries").map{it -> "-L${targetSysRoot}/$it"} override fun linkCommand(objectFiles: List, executable: String, optimize: Boolean): List { // TODO: Can we extract more to the konan.properties? return mutableListOf("$linker", - "--sysroot=${sysRoot}", + "--sysroot=${targetSysRoot}", "-export-dynamic", "-z", "relro", "--hash-style=gnu", - "--build-id", "--eh-frame-hdr", "-m", "elf_x86_64", - "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", + "--build-id", "--eh-frame-hdr", // "-m", "elf_x86_64", + "-dynamic-linker", dynamicLinker, "-o", executable, - "${sysRoot}/usr/lib64/crt1.o", "${sysRoot}/usr/lib64/crti.o", "${libGcc}/crtbegin.o", - "-L${llvmLib}", "-L${libGcc}", "-L${sysRoot}/../lib64", "-L${sysRoot}/lib64", - "-L${sysRoot}/usr/lib64", "-L${sysRoot}/../lib", "-L${sysRoot}/lib", "-L${sysRoot}/usr/lib") + + "${targetSysRoot}/usr/lib64/crt1.o", "${targetSysRoot}/usr/lib64/crti.o", "${libGcc}/crtbegin.o", + "-L${llvmLib}", "-L${libGcc}") + + specificLibs + + listOf("-L${targetSysRoot}/../lib", "-L${targetSysRoot}/lib", "-L${targetSysRoot}/usr/lib") + if (optimize) listOf("-plugin", "$llvmLib/LLVMgold.so") + pluginOptimizationFlags else {listOf()} + objectFiles + if (optimize) linkerOptimizationFlags else {listOf()} + @@ -143,31 +130,7 @@ internal open class LinuxPlatform(distribution: Distribution) listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "${libGcc}/crtend.o", - "${sysRoot}/usr/lib64/crtn.o") - } -} - -internal class RaspberryPiPlatform(distribution: Distribution) - : LinuxPlatform(distribution) { - - override val sysRoot = "${distribution.dependenciesDir}/${properties.propertyString("targetSysRoot.linux-raspberrypi")!!}" - - override fun linkCommand(objectFiles: List, executable: String, optimize: Boolean): List { - // TODO: Can we extract more to the konan.properties? - return mutableListOf("$linker", - "--sysroot=${sysRoot}", - "-export-dynamic", "-z", "relro", "--hash-style=gnu", - "--build-id", "--eh-frame-hdr", - "-dynamic-linker", "/lib/ld-linux-armhf.so.3", - "-o", executable, - "${sysRoot}/usr/lib/crt1.o", "${sysRoot}/usr/lib/crti.o", "${libGcc}/crtbegin.o", - "-L${llvmLib}", "-L${libGcc}", "-L${sysRoot}/../lib/arm-linux-gnueabihf", "-L${sysRoot}/lib/arm-linux-gnueabihf", - "-L${sysRoot}/usr/lib/arm-linux-gnueabihf", "-L${sysRoot}/../lib", "-L${sysRoot}/lib", "-L${sysRoot}/usr/lib") + - if (optimize) listOf("-plugin", "$llvmLib/LLVMgold.so") + pluginOptimizationFlags else {listOf()} + - objectFiles + - if (optimize) linkerOptimizationFlags else {listOf()} + - linkerKonanFlags + - listOf("-lgcc", "-lgcc_s", "-lc", "${libGcc}/crtend.o", "${sysRoot}/usr/lib/crtn.o") + "${targetSysRoot}/usr/lib64/crtn.o") } } @@ -181,21 +144,12 @@ internal class LinkStage(val context: Context) { private val properties = distribution.properties val platform = when (TargetManager.host) { - KonanTarget.LINUX -> when (targetManager.current) { - KonanTarget.LINUX -> LinuxPlatform(distribution) - KonanTarget.RASPBERRYPI -> RaspberryPiPlatform(distribution) - else -> TODO("Target not implemented yet.") - } - KonanTarget.MACBOOK -> when (targetManager.current) { - KonanTarget.IPHONE_SIM - -> IPhoneSimulatorFromMacOSPlatform(distribution) - KonanTarget.IPHONE - -> IPhoneOSfromMacOSPlatform(distribution) - KonanTarget.MACBOOK - -> MacOSPlatform(distribution) - else -> TODO("Target not implemented yet.") - } - else -> TODO("Target not implemented yet") + KonanTarget.LINUX -> + LinuxBasedPlatform(distribution) + KonanTarget.MACBOOK -> + MacOSBasedPlatform(distribution) + else -> + error("Unexpected host platform") } val suffix = targetManager.currentSuffix() @@ -258,7 +212,7 @@ internal class LinkStage(val context: Context) { // And just do the same on Linux. val entryPointSelector: List get() = if (nomain) listOf() - else properties.propertyList("entrySelector.$suffix") + else platform.entrySelector fun link(objectFiles: List): ExecutableFile { val executable = config.get(KonanConfigKeys.EXECUTABLE_FILE)!! @@ -268,11 +222,6 @@ internal class LinkStage(val context: Context) { entryPointSelector runTool(*linkCommand.toTypedArray()) - if (platform is MacOSPlatform && context.shouldContainDebugInfo()) { - if (context.phase?.verbose ?: false) - runTool(*platform.dsymutilDryRunVerboseCommand(executable).toTypedArray()) - runTool(*platform.dsymutilCommand(executable).toTypedArray()) - } return executable } diff --git a/backend.native/konan.properties b/backend.native/konan.properties index 55988d786a4..b08f49b8be8 100644 --- a/backend.native/konan.properties +++ b/backend.native/konan.properties @@ -27,24 +27,23 @@ llvmHome.osx = clang-llvm-3.9.0-darwin-macos llvmLtoFlags.osx = -exported-symbol=_Konan_main llvmLtoOptFlags.osx = -O3 -function-sections llvmLtoNooptFlags.osx = -O1 -llvmLlcFlags.osx = -mtriple=x86_64-apple-macosx10.11.0 --disable-fp-elim linkerKonanFlags.osx = -lc++ linkerOptimizationFlags.osx = -dead_strip -osVersionMin.osx = -macosx_version_min 10.11.0 +osVersionMinFlagLd.osx = -macosx_version_min +osVersionMinFlagClang.osx = -mmacosx-version-min +osVersionMin.osx = 10.11 entrySelector.osx = -alias _Konan_main _main -dependencies.osx = target-sysroot-1-darwin-macos libffi-3.2.1-2-darwin-macos clang-llvm-3.9.0-darwin-macos +dependencies.osx = target-sysroot-1-darwin-macos \ + libffi-3.2.1-2-darwin-macos \ + clang-llvm-3.9.0-darwin-macos # iphone arch.osx-ios = arm64 -sysRoot.osx-ios = target-sysroot-1-darwin-macos targetSysRoot.osx-ios = target-sysroot-2-darwin-ios libffiDir.osx-ios = libffi-3.2.1-2-darwin-ios -llvmHome.osx-ios = clang-llvm-3.9.0-darwin-macos -llvmLlcFlags.osx-ios = -mtriple=arm64-apple-ios8.0.0 --disable-fp-elim -linkerKonanFlags.osx-ios = -lc++ -linkerOptimizationFlags.osx-ios = -dead_strip -osVersionMin.osx-ios = -iphoneos_version_min 8.0.0 -entrySelector.osx-ios = -alias _Konan_main _main +osVersionMinFlagLd.osx-ios = -iphoneos_version_min +osVersionMinFlagClang.osx-ios = -miphoneos-version-min +osVersionMin.osx-ios = 8.0 dependencies.osx-ios = target-sysroot-1-darwin-macos \ libffi-3.2.1-2-darwin-ios \ clang-llvm-3.9.0-darwin-macos \ @@ -52,21 +51,19 @@ dependencies.osx-ios = target-sysroot-1-darwin-macos \ # iphone_sim arch.osx-ios-sim = x86_64 -sysRoot.osx-ios-sim = target-sysroot-1-darwin-macos targetSysRoot.osx-ios-sim = target-sysroot-1-darwin-ios-sim libffiDir.osx-ios-sim = libffi-3.2.1-2-darwin-ios-sim -llvmHome.osx-ios-sim = clang-llvm-3.9.0-darwin-macos -llvmLlcFlags.osx-ios-sim = -mtriple=x86_64-apple-ios5.0.0 --disable-fp-elim -linkerKonanFlags.osx-ios-sim = -lc++ -linkerOptimizationFlags.osx-ios-sim = -dead_strip -osVersionMin.osx-ios-sim = -ios_simulator_version_min 5.0.0 -entrySelector.osx-ios-sim = -alias _Konan_main _main +osVersionMinFlagLd.osx-ios-sim = -ios_simulator_version_min +osVersionMinFlagClang.osx-ios-sim = -mios-simulator-version-min +osVersionMin.osx-ios-sim = 8.0 dependencies.osx-ios-sim = target-sysroot-1-darwin-macos \ libffi-3.2.1-2-darwin-ios-sim \ clang-llvm-3.9.0-darwin-macos \ target-sysroot-1-darwin-ios-sim # linux +arch.linux = x86_64 +quadruple.linux = x86_64-unknown-linux-gnu sysRoot.linux = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot libffiDir.linux = libffi-3.2.1-2-linux-x86-64 llvmHome.linux = clang-llvm-3.9.0-linux-x86-64 @@ -79,22 +76,31 @@ llvmLlcFlags.linux = -march=x86-64 linkerKonanFlags.linux = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread linkerOptimizationFlags.linux = --gc-sections pluginOptimizationFlags.linux = -plugin-opt=mcpu=x86-64 -plugin-opt=O3 +dynamicLinker.linux = /lib64/ld-linux-x86-64.so.2 entrySelector.linux = --defsym main=Konan_main -dependencies.linux = clang-llvm-3.9.0-linux-x86-64 target-gcc-toolchain-3-linux-x86-64 libffi-3.2.1-2-linux-x86-64 +# targetSysRoot relative +abiSpecificLibraries = ../lib64 lib64 usr/lib64 +dependencies.linux = \ + clang-llvm-3.9.0-linux-x86-64 \ + target-gcc-toolchain-3-linux-x86-64 \ + libffi-3.2.1-2-linux-x86-64 # Raspberry Pi arch.linux-raspberrypi = armv7 -sysRoot.linux-raspberrypi = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot +quadruple.linux-raspberrypi = armv7-unknown-linux-gnueabihf targetSysRoot.linux-raspberrypi = target-sysroot-1-raspberrypi libffiDir.linux-raspberrypi = libffi-3.2.1-2-raspberrypi -llvmHome.linux-raspberrypi = clang-llvm-3.9.0-linux-x86-64 libGcc.linux-raspberrypi = target-sysroot-1-raspberrypi/lib/gcc/arm-linux-gnueabihf/4.8.3/ gccToolChain.linux-raspberrypi = target-gcc-toolchain-3-linux-x86-64 -llvmLlcFlags.linux-raspberrypi = -mtriple=armv7-unknown-linux-gnueabihf --disable-fp-elim -float-abi=hard -linkerKonanFlags.linux-raspberrypi = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lc -lpthread -fuse-ld=gold -entrySelector.linux-raspberrypi = --defsym main=Konan_main -dependencies.linux-raspberrypi = clang-llvm-3.9.0-linux-x86-64 \ - target-gcc-toolchain-3-linux-x86-64 \ - target-sysroot-1-raspberrypi \ - libffi-3.2.1-2-linux-x86-64 \ - libffi-3.2.1-2-raspberrypi +dynamicLinker.linux-raspberrypi = /lib/ld-linux-armhf.so.3 +# targetSysRoot relative +abiSpecificLibraries = \ + ../lib/arm-linux-gnueabihf \ + lib/arm-linux-gnueabihf \ + usr/lib/arm-linux-gnueabihf +dependencies.linux-raspberrypi = \ + clang-llvm-3.9.0-linux-x86-64 \ + target-gcc-toolchain-3-linux-x86-64 \ + target-sysroot-1-raspberrypi \ + libffi-3.2.1-2-linux-x86-64 \ + libffi-3.2.1-2-raspberrypi