A configurable zephyr board support.

This commit is contained in:
Alexander Gorshenev
2018-01-16 17:43:55 +03:00
committed by alexander-gorshenev
parent d968fafec0
commit 9789420ed3
63 changed files with 665 additions and 473 deletions
+3 -4
View File
@@ -168,11 +168,11 @@ task start(dependsOn: "${hostName}Start")
// These files are built before the 'dist' is complete,
// so we provide custom values for
// -runtime, -properties, -library and -Djava.library.path
// konan.home, --runtime, -Djava.library.path etc
targetList.each { target ->
def konanJvmArgs = ["-ea",
"-Dkonan.home=$distDir",
"-Dkonan.home=${rootProject.projectDir}",
"-Djava.library.path=${project.buildDir}/nativelibs/$hostName",
"-Dfile.encoding=UTF-8"]
@@ -180,8 +180,7 @@ targetList.each { target ->
if (target != "wasm32") defaultArgs += '-g'
def konanArgs = [*defaultArgs,
'-target', target,
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
'-properties', rootProject.konanPropertiesFile.canonicalPath,
'--runtime', project(':runtime').file("build/${target}/runtime.bc"),
*project.globalBuildArgs]
task("${target}Stdlib", type: JavaExec) {
@@ -124,7 +124,6 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
arguments.mainPackage ?.let{ put(ENTRY, it) }
arguments.manifestFile ?.let{ put(MANIFEST_FILE, it) }
arguments.runtimeFile ?.let{ put(RUNTIME_FILE, it) }
arguments.propertyFile ?.let{ put(PROPERTY_FILE, it) }
put(LIST_TARGETS, arguments.listTargets)
put(OPTIMIZATION, arguments.optimization)
@@ -78,15 +78,9 @@ class K2NativeCompilerArguments : CommonCompilerArguments() {
@Argument(value = "-produce", shortName = "-p", valueDescription = "{program|dynamic|framework|library|bitcode}", description = "Specify output file kind")
var produce: String? = null
@Argument(value = "-properties", valueDescription = "<path>", description = "Override standard 'konan.properties' location")
var propertyFile: String? = null
@Argument(value = "-repo", shortName = "-r", valueDescription = "<path>", description = "Library search path")
var repositories: Array<String>? = null
@Argument(value = "-runtime", valueDescription = "<path>", description = "Override standard 'runtime.bc' location")
var runtimeFile: String? = null
@Argument(value = "-target", valueDescription = "<target>", description = "Set hardware target")
var target: String? = null
@@ -124,6 +118,9 @@ class K2NativeCompilerArguments : CommonCompilerArguments() {
@Argument(value = "--purge_user_libs", description = "Don't link unused libraries even explicitly specified")
var purgeUserLibs: Boolean = false
@Argument(value = "--runtime", valueDescription = "<path>", description = "Override standard 'runtime.bc' location")
var runtimeFile: String? = null
@Argument(value = "--time", description = "Report execution time for compiler phases")
var timePhases: Boolean = false
@@ -829,7 +829,7 @@ internal class CAdapterGenerator(
output("RUNTIME_USED ${prefix}_ExportedSymbols* $exportedSymbol(void) { return &__konan_symbols;}")
outputStreamWriter.close()
if (context.config.targetManager.target.family == Family.WINDOWS) {
if (context.config.target.family == Family.WINDOWS) {
outputStreamWriter = context.config.tempFiles
.cAdapterDef
.printWriter()
@@ -73,7 +73,7 @@ internal fun produceOutput(context: Context) {
val neededLibraries
= context.llvm.librariesForLibraryManifest
val abiVersion = context.config.currentAbiVersion
val target = context.config.targetManager.target
val target = context.config.target
val nopack = config.getBoolean(KonanConfigKeys.NOPACK)
val manifest = config.get(KonanConfigKeys.MANIFEST_FILE)
@@ -1,49 +0,0 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.konan.file.*
import org.jetbrains.kotlin.konan.properties.*
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.visibleName
import org.jetbrains.kotlin.konan.util.DependencyProcessor
class Distribution(val target: KonanTarget,
propertyFileOverride: String? = null,
runtimeFileOverride: String? = null) {
val localKonanDir = "${File.userHome}/.konan"
private fun findKonanHome(): String {
val value = System.getProperty("konan.home", "dist")
val path = File(value).absolutePath
return path
}
val konanHome = findKonanHome()
val propertyFileName = propertyFileOverride ?: "$konanHome/konan/konan.properties"
val properties = File(propertyFileName).loadProperties()
val klib = "$konanHome/klib"
val stdlib = "$klib/common/stdlib"
val targetName = target.visibleName
val defaultNatives = "$konanHome/konan/targets/${targetName}/native"
val runtime = runtimeFileOverride ?: "$stdlib/targets/${targetName}/native/runtime.bc"
val dependenciesDir = DependencyProcessor.defaultDependenciesRoot.absolutePath
}
@@ -39,30 +39,29 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
val currentAbiVersion: Int = configuration.get(KonanConfigKeys.ABI_VERSION)!!
internal val targetManager = TargetManager(
configuration.get(KonanConfigKeys.TARGET))
internal val distribution = Distribution(
false,
null,
configuration.get(KonanConfigKeys.RUNTIME_FILE))
private val target = targetManager.target
internal val platformManager = PlatformManager(distribution)
internal val targetManager = platformManager.targetManager(configuration.get(KonanConfigKeys.TARGET))
internal val target = targetManager.target
init {
if (!target.enabled) {
error("Target $target is not available on the ${TargetManager.host} host")
if (!platformManager.isEnabled(target)) {
error("Target $target is not available on the ${HostManager.host} host")
}
}
val indirectBranchesAreAllowed = target != KonanTarget.WASM32
internal val distribution = Distribution(target,
configuration.get(KonanConfigKeys.PROPERTY_FILE),
configuration.get(KonanConfigKeys.RUNTIME_FILE))
internal val platform = PlatformManager(distribution.properties, distribution.dependenciesDir).platform(target).apply {
val platform = platformManager.platform(target).apply {
if (configuration.getBoolean(KonanConfigKeys.CHECK_DEPENDENCIES)) {
downloadDependencies()
}
}
internal val clang = platform.clang
val indirectBranchesAreAllowed = target != KonanTarget.WASM32
internal val produce get() = configuration.get(KonanConfigKeys.PRODUCE)!!
private val prefix = produce.prefix(target)
@@ -84,7 +83,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
get() = configuration.getList(KonanConfigKeys.LIBRARY_FILES)
private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES)
private val resolver = defaultResolver(repositories, distribution)
private val resolver = defaultResolver(repositories, target, distribution)
internal val immediateLibraries: List<LibraryReaderImpl> by lazy {
val result = resolver.resolveImmediateLibraries(
@@ -109,7 +108,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
internal val defaultNativeLibraries =
if (produce == CompilerOutputKind.PROGRAM)
File(distribution.defaultNatives).listFiles.map { it.absolutePath }
File(distribution.defaultNatives(target)).listFiles.map { it.absolutePath }
else emptyList()
internal val nativeLibraries: List<String> =
@@ -83,8 +83,6 @@ class KonanConfigKeys {
= CompilerConfigurationKey.create("print locations")
val PRODUCE: CompilerConfigurationKey<CompilerOutputKind>
= CompilerConfigurationKey.create("compiler output kind")
val PROPERTY_FILE: CompilerConfigurationKey<String?>
= CompilerConfigurationKey.create("override default property file path")
val PURGE_USER_LIBS: CompilerConfigurationKey<Boolean>
= CompilerConfigurationKey.create("purge user-specified libs too")
val REPOSITORIES: CompilerConfigurationKey<List<String>>
@@ -18,7 +18,8 @@ package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.konan.KonanExternalToolFailure
import org.jetbrains.kotlin.konan.exec.Command
import org.jetbrains.kotlin.konan.file.*
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.file.createTempFile
import org.jetbrains.kotlin.konan.target.*
typealias BitcodeFile = String
@@ -28,7 +29,7 @@ typealias ExecutableFile = String
internal class LinkStage(val context: Context) {
private val config = context.config.configuration
private val target = context.config.targetManager.target
private val target = context.config.target
private val platform = context.config.platform
private val linker = platform.linker
@@ -117,6 +118,19 @@ internal class LinkStage(val context: Context) {
return combinedWasm
}
private fun llvmLinkAndLlc(bitcodeFiles: List<BitcodeFile>): String {
val combinedBc = temporary("combined", ".bc")
hostLlvmTool("llvm-link", "-o", combinedBc, *bitcodeFiles.toTypedArray())
val optimizedBc = temporary("optimized", ".bc")
hostLlvmTool("opt", combinedBc, "-o=$optimizedBc", "-O3")
val combinedO = temporary("combined", ".o")
hostLlvmTool("llc", combinedBc, "-filetype=obj", "-o", combinedO, "-function-sections", "-data-sections")
return combinedO
}
private fun asLinkerArgs(args: List<String>): List<String> {
if (linker.useCompilerDriverAsLinker) {
return args
@@ -201,15 +215,19 @@ internal class LinkStage(val context: Context) {
val libraryProvidedLinkerFlags =
libraries.map{it -> it.linkerOpts}.flatten()
var objectFiles: List<String> = listOf()
val objectFiles: MutableList<String> = mutableListOf()
val phaser = PhaseManager(context)
phaser.phase(KonanPhase.OBJECT_FILES) {
objectFiles = listOf(
if (target == KonanTarget.WASM32)
bitcodeToWasm(bitcodeFiles)
else
llvmLto(bitcodeFiles)
objectFiles.add(
when (platform.configurables) {
is WasmConfigurables
-> bitcodeToWasm(bitcodeFiles)
is ZephyrConfigurables
-> llvmLinkAndLlc(bitcodeFiles)
else
-> llvmLto(bitcodeFiles)
}
)
}
phaser.phase(KonanPhase.LINKER) {
@@ -16,14 +16,12 @@
package org.jetbrains.kotlin.backend.konan.library
import org.jetbrains.kotlin.backend.konan.Distribution
import org.jetbrains.kotlin.backend.konan.library.impl.LibraryReaderImpl
import org.jetbrains.kotlin.backend.konan.util.removeSuffixIfPresent
import org.jetbrains.kotlin.backend.konan.util.suffixIfNot
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.TargetManager
import org.jetbrains.kotlin.konan.util.visibleName
interface SearchPathResolver {
val searchRoots: List<File>
@@ -32,12 +30,12 @@ interface SearchPathResolver {
}
fun defaultResolver(repositories: List<String>, target: KonanTarget): SearchPathResolver =
defaultResolver(repositories, Distribution(target))
defaultResolver(repositories, target, Distribution())
fun defaultResolver(repositories: List<String>, distribution: Distribution): SearchPathResolver =
fun defaultResolver(repositories: List<String>, target: KonanTarget, distribution: Distribution): SearchPathResolver =
KonanLibrarySearchPathResolver(
repositories,
distribution.target,
target,
distribution.klib,
distribution.localKonanDir
)
@@ -362,7 +362,9 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) {
val staticData = StaticData(context)
val runtimeFile = context.config.distribution.runtime
private val target = context.config.target
val runtimeFile = context.config.distribution.runtime(target)
val runtime = Runtime(runtimeFile) // TODO: dispose
init {
@@ -416,7 +418,17 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) {
null
}
private val personalityFunctionName = when (context.config.targetManager.target) {
val tlsMode by lazy {
when (target) {
KonanTarget.WASM32,
is KonanTarget.ZEPHYR
-> LLVMThreadLocalMode.LLVMNotThreadLocal
else
-> LLVMThreadLocalMode.LLVMGeneralDynamicTLSModel
}
}
private val personalityFunctionName = when (target) {
KonanTarget.MINGW -> "__gxx_personality_seh0"
else -> "__gxx_personality_v0"
}
@@ -2228,7 +2228,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
// On x86_64 it is the case if the return value takes more than 16 bytes or is the structure with
// unaligned fields (there are some complicated exceptions currently ignored). The latter condition
// is "encoded" by stub generator by emitting either `getMessenger` or `getMessengerLU` intrinsic call.
val isStret = when (context.config.targetManager.target) {
val isStret = when (context.config.target) {
KonanTarget.MACBOOK, KonanTarget.IPHONE_SIM -> isLU // x86_64
KonanTarget.IPHONE -> false // aarch64
else -> TODO()
@@ -205,7 +205,7 @@ internal fun ContextUtils.addGlobal(name: String, type: LLVMTypeRef, isExported:
assert(LLVMGetNamedGlobal(context.llvmModule, name) == null)
val result = LLVMAddGlobal(context.llvmModule, type, name)!!
if (threadLocal)
LLVMSetThreadLocalMode(result, runtime.tlsMode)
LLVMSetThreadLocalMode(result, context.llvm.tlsMode)
return result
}
@@ -219,12 +219,12 @@ internal fun ContextUtils.importGlobal(name: String, type: LLVMTypeRef, origin:
assert (getGlobalType(found) == type)
assert (LLVMGetInitializer(found) == null)
if (threadLocal)
assert(LLVMGetThreadLocalMode(found) == runtime.tlsMode)
assert(LLVMGetThreadLocalMode(found) == context.llvm.tlsMode)
return found
} else {
val result = LLVMAddGlobal(context.llvmModule, type, name)!!
if (threadLocal)
LLVMSetThreadLocalMode(result, runtime.tlsMode)
LLVMSetThreadLocalMode(result, context.llvm.tlsMode)
return result
}
}
@@ -46,11 +46,6 @@ class Runtime(bitcodeFile: String) {
val target = LLVMGetTarget(llvmModule)!!.toKString()
// TODO: deduce TLS model from explicit config parameter.
val tlsMode by lazy {
if (target.indexOf("wasm") != -1) LLVMThreadLocalMode.LLVMNotThreadLocal
else LLVMThreadLocalMode.LLVMGeneralDynamicTLSModel
}
val dataLayout = LLVMGetDataLayout(llvmModule)!!.toKString()
val targetData = LLVMCreateTargetData(dataLayout)!!
@@ -1007,4 +1007,4 @@ private val ReturnableTypeBridge.objCEncoding: String get() = when (this) {
HashCodeBridge -> "L" // NSUInteger = unsigned long; // TODO: `unsigned int` on watchOS
}
internal fun Context.is64Bit(): Boolean = this.config.targetManager.target.architecture.bitness == 64
internal fun Context.is64Bit(): Boolean = this.config.target.architecture.bitness == 64
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.name.isSubpackageOf
internal class ObjCExport(val context: Context) {
private val target get() = context.config.targetManager.target
private val target get() = context.config.target
internal fun produceObjCFramework() {
if (context.config.produce != CompilerOutputKind.FRAMEWORK) return
@@ -1,14 +1,14 @@
package org.jetbrains.kotlin.compiletest
import org.jetbrains.kotlin.konan.target.Family
import org.jetbrains.kotlin.konan.target.TargetManager
import org.jetbrains.kotlin.konan.target.HostManager
import java.nio.file.Path
import java.nio.file.Paths
object DistProperties {
private val dist: Path = Paths.get(requireProp("konan.home"))
private val konancDriver = if (TargetManager.host.family == Family.WINDOWS) "konanc.bat" else "konanc"
private val konancDriver = if (HostManager.host.family == Family.WINDOWS) "konanc.bat" else "konanc"
val konanc: Path = dist.resolve("bin/$konancDriver")
val lldb: Path = Paths.get("lldb")
val lldbPrettyPrinters: Path = dist.resolve("tools/konan_lldb.py")
-346
View File
@@ -1,346 +0,0 @@
#
# Copyright 2010-2017 JetBrains s.r.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# TODO: Do we need a $variable substitution mechanism here?
dependenciesUrl = https://download.jetbrains.com/kotlin/native
# In order of preference:
dependencyProfiles = default alt
# Don't check dependencies on a server.
# If true, dependency downloader will throw an exception if a dependency isn't found in konan.home.
airplaneMode = false
downloadingAttempts = 10
downloadingAttemptIntervalMs = 3000
homeDependencyCache = .konan/cache
llvmDebugOptFlags = -O0
llvmVersion = 5.0.0
# Mac OS X.
llvmHome.osx = clang-llvm-5.0.0-darwin-macos
targetToolchain.osx = target-toolchain-1-osx
arch.osx = x86_64
targetSysRoot.osx = target-sysroot-2-darwin-macos
libffiDir.osx = libffi-3.2.1-2-darwin-macos
llvmLtoFlags.osx =
llvmLtoOptFlags.osx = -O3 -function-sections
llvmLtoNooptFlags.osx = -O1
llvmLtoDynamicFlags.osx = -relocation-model=pic
linkerKonanFlags.osx = -lc++ -lobjc -framework Foundation
linkerOptimizationFlags.osx = -dead_strip
linkerNoDebugFlags.osx = -S
linkerDynamicFlags.osx = -dylib
osVersionMinFlagLd.osx = -macosx_version_min
osVersionMinFlagClang.osx = -mmacosx-version-min
osVersionMin.osx = 10.11
entrySelector.osx = -alias _Konan_main _main
dependencies.osx = \
libffi-3.2.1-2-darwin-macos \
clang-llvm-5.0.0-darwin-macos
target-sysroot-2-darwin-macos.default = \
remote:internal
target-toolchain-1-osx.default = \
remote:internal
# Apple iOS.
targetToolchain.osx-ios = target-toolchain-1-osx
dependencies.osx-ios = \
libffi-3.2.1-2-darwin-ios \
clang-llvm-5.0.0-darwin-macos
target-sysroot-3-darwin-ios.default = \
remote:internal
arch.ios = arm64
entrySelector.ios = -alias _Konan_main _main
targetSysRoot.ios = target-sysroot-3-darwin-ios
libffiDir.ios = libffi-3.2.1-2-darwin-ios
llvmLtoFlags.ios =
llvmLtoOptFlags.ios = -O3 -function-sections
linkerNoDebugFlags.ios = -S
linkerDynamicFlags.ios = -dylib
llvmLtoNooptFlags.ios = -O1
llvmLtoDynamicFlags.ios = -relocation-model=pic
linkerKonanFlags.ios = -lc++ -lobjc -framework Foundation -sdk_version 11.2
linkerOptimizationFlags.ios = -dead_strip
osVersionMinFlagLd.ios = -iphoneos_version_min
osVersionMinFlagClang.ios = -miphoneos-version-min
osVersionMin.ios = 8.0
# Apple iOS simulator.
targetToolchain.osx-ios_sim = target-toolchain-1-osx
dependencies.osx-ios_sim = \
libffi-3.2.1-1-darwin-ios_sim \
clang-llvm-5.0.0-darwin-macos
target-sysroot-2-darwin-ios_sim.default = \
remote:internal
arch.ios_sim = x86_64
entrySelector.ios_sim = -alias _Konan_main _main
targetSysRoot.ios_sim = target-sysroot-2-darwin-ios_sim
libffiDir.ios_sim = libffi-3.2.1-1-darwin-ios_sim
llvmLtoFlags.ios_sim =
llvmLtoOptFlags.ios_sim = -O3 -function-sections
llvmLtoNooptFlags.ios_sim = -O1
llvmLtoDynamicFlags.ios_sim = -relocation-model=pic
linkerKonanFlags.ios_sim = -lc++ -lobjc -framework Foundation -sdk_version 11.2
linkerOptimizationFlags.ios_sim = -dead_strip
linkerNoDebugFlags.ios_sim = -S
linkerDynamicFlags.ios_sim = -dylib
osVersionMinFlagLd.ios_sim = -ios_simulator_version_min
osVersionMinFlagClang.ios_sim = -mios-simulator-version-min
osVersionMin.ios_sim = 8.0
# Linux x86-64.
llvmHome.linux = clang-llvm-5.0.0-linux-x86-64
gccToolchain.linux = target-gcc-toolchain-3-linux-x86-64
targetToolchain.linux = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu
quadruple.linux = x86_64-unknown-linux-gnu
targetSysRoot.linux = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot
libffiDir.linux = libffi-3.2.1-2-linux-x86-64
# targetSysroot-relative.
libGcc.linux = ../../lib/gcc/x86_64-unknown-linux-gnu/4.8.5
llvmLtoFlags.linux =
llvmLtoOptFlags.linux = -O3 -function-sections
llvmLtoNooptFlags.linux = -O1
llvmLtoDynamicFlags.linux = -relocation-model=pic
llvmLlcFlags.linux = -march=x86-64
linkerKonanFlags.linux = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
--defsym __cxa_demangle=Konan_cxa_demangle
linkerOptimizationFlags.linux = --gc-sections
linkerNoDebugFlags.linux = -S
linkerDynamicFlags.linux = -shared
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
# targetSysRoot relative
abiSpecificLibraries.linux = ../lib64 lib64 usr/lib64
dependencies.linux = \
clang-llvm-5.0.0-linux-x86-64 \
target-gcc-toolchain-3-linux-x86-64 \
libffi-3.2.1-2-linux-x86-64
# Raspberry Pi
targetToolchain.linux-raspberrypi = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu
dependencies.linux-raspberrypi = \
clang-llvm-5.0.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
quadruple.raspberrypi = armv6-unknown-linux-gnueabihf
entrySelector.raspberrypi = --defsym main=Konan_main
linkerNoDebugFlags.raspberrypi = -S
linkerDynamicFlags.raspberrypi = -shared
linkerOptimizationFlags.raspberrypi = --gc-sections
targetSysRoot.raspberrypi = target-sysroot-1-raspberrypi
# We could reuse host toolchain here.
libffiDir.raspberrypi = libffi-3.2.1-2-raspberrypi
linkerKonanFlags.raspberrypi = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
--defsym __cxa_demangle=Konan_cxa_demangle
# targetSysroot-relative.
libGcc.raspberrypi = lib/gcc/arm-linux-gnueabihf/4.8.3
llvmLtoFlags.raspberrypi = -float-abi=hard -mcpu=arm1136jf-s
llvmLtoOptFlags.raspberrypi = -O3 -function-sections
llvmLtoNooptFlags.raspberrypi = -O1
llvmLtoDynamicFlags.raspberrypi = -relocation-model=pic
dynamicLinker.raspberrypi = /lib/ld-linux-armhf.so.3
# targetSysRoot relative
abiSpecificLibraries.raspberrypi = \
../lib/arm-linux-gnueabihf \
lib/arm-linux-gnueabihf \
usr/lib/arm-linux-gnueabihf
# MIPS
targetToolchain.linux-linux_mips32 = target-gcc-toolchain-2-linux-mips/x86_64-unknown-linux-gnu
dependencies.linux-linux_mips32 = \
clang-llvm-5.0.0-linux-x86-64 \
target-gcc-toolchain-2-linux-mips \
target-gcc-toolchain-3-linux-x86-64 \
target-sysroot-2-mips \
libffi-3.2.1-2-linux-x86-64 \
libffi-3.2.1-2-linux-mips
quadruple.linux_mips32 = mips-unknown-linux-gnu
entrySelector.linux_mips32 = --defsym main=Konan_main
linkerOptimizationFlags.linux_mips32 = --gc-sections
linkerDynamicFlags.linux_mips32 = -shared
targetSysRoot.linux_mips32 = target-sysroot-2-mips
# We could reuse host toolchain here.
libffiDir.linux_mips32 = libffi-3.2.1-2-linux-mips
linkerKonanFlags.linux_mips32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
--defsym __cxa_demangle=Konan_cxa_demangle
# targetSysroot-relative.
libGcc.linux_mips32 = lib/gcc/mips-unknown-linux-gnu/4.9.4
llvmLtoFlags.linux_mips32 =
llvmLtoOptFlags.linux_mips32 = -O3 -function-sections
llvmLtoNooptFlags.linux_mips32 = -O1
llvmLtoDynamicFlags.linux_mips32 = -relocation-model=pic
dynamicLinker.linux_mips32 = /lib/ld.so.1
# targetSysRoot relative
abiSpecificLibraries.linux_mips32 =
# MIPSel
targetToolchain.linux-linux_mipsel32 = target-gcc-toolchain-2-linux-mips/x86_64-unknown-linux-gnu
dependencies.linux-linux_mipsel32 = \
clang-llvm-5.0.0-linux-x86-64 \
target-gcc-toolchain-2-linux-mips \
target-gcc-toolchain-3-linux-x86-64 \
target-sysroot-2-mipsel \
libffi-3.2.1-2-linux-x86-64 \
libffi-3.2.1-2-linux-mipsel
quadruple.linux_mipsel32 = mipsel-unknown-linux-gnu
entrySelector.linux_mipsel32 = --defsym main=Konan_main
linkerOptimizationFlags.linux_mipsel32 = --gc-sections
linkerDynamicFlags.linux_mipsel32 = -shared
targetSysRoot.linux_mipsel32 = target-sysroot-2-mipsel
# We could reuse host toolchain here.
libffiDir.linux_mipsel32 = libffi-3.2.1-2-linux-mipsel
linkerKonanFlags.linux_mipsel32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
--defsym __cxa_demangle=Konan_cxa_demangle
# targetSysroot-relative.
libGcc.linux_mipsel32 = lib/gcc/mipsel-unknown-linux-gnu/4.9.4
llvmLtoFlags.linux_mipsel32 =
llvmLtoOptFlags.linux_mipsel32 = -O3 -function-sections
llvmLtoNooptFlags.linux_mipsel32 = -O1
llvmLtoDynamicFlags.linux_mipsel32 = -relocation-model=pic
dynamicLinker.linux_mipsel32 = /lib/ld.so.1
# targetSysRoot relative
abiSpecificLibraries.linux_mipsel32 =
# Android ARM32, based on NDK for android-21.
targetToolchain.osx-android_arm32 = target-toolchain-21-osx-android_arm32
# TODO: split dependencies to host-dependent and host-independent parts.
dependencies.osx-android_arm32 = \
clang-llvm-5.0.0-darwin-macos \
target-sysroot-21-android_arm32 \
target-toolchain-21-osx-android_arm32 \
libffi-3.2.1-2-android_arm32
targetToolchain.linux-android_arm32 = target-toolchain-21-linux-android_arm32
dependencies.linux-android_arm32 = \
clang-llvm-5.0.0-linux-x86-64 \
target-sysroot-21-android_arm32 \
target-toolchain-21-linux-android_arm32 \
libffi-3.2.1-2-android_arm32
quadruple.android_arm32 = arm-linux-androideabi
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
llvmLtoFlags.android_arm32 = -emulated-tls -relocation-model=pic
llvmLtoOptFlags.android_arm32 = -O3 -function-sections
linkerNoDebugFlags.android_arm32 = -Wl,-S
llvmLtoNooptFlags.android_arm32 = -O1
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
libffiDir.android_arm32 = libffi-3.2.1-2-android_arm32
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid
# Android ARM64, based on NDK for android-21.
targetToolchain.osx-android_arm64 = target-toolchain-21-osx-android_arm64
# TODO: split dependencies to host-dependent and host-independent parts.
dependencies.osx-android_arm64 = \
clang-llvm-5.0.0-darwin-macos \
target-sysroot-21-android_arm64 \
target-toolchain-21-osx-android_arm64 \
libffi-3.2.1-2-android_arm64
targetToolchain.linux-android_arm64 = target-toolchain-21-linux-android_arm64
dependencies.linux-android_arm64 = \
clang-llvm-5.0.0-linux-x86-64 \
target-sysroot-21-android_arm64 \
target-toolchain-21-linux-android_arm64 \
libffi-3.2.1-2-android_arm64
quadruple.android_arm64 = aarch64-linux-android
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
llvmLtoFlags.android_arm64 = -emulated-tls -relocation-model=pic
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
libffiDir.android_arm64 = libffi-3.2.1-2-android_arm64
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
linkerNoDebugFlags.android_arm64 = -Wl,-S
# Windows x86-64, based on mingw-w64.
llvmHome.mingw = msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64
targetToolchain.mingw = msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64
quadruple.mingw = x86_64-w64-mingw32
targetSysRoot.mingw = msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64
libffiDir.mingw = libffi-3.2.1-mingw-w64-x86-64
llvmLtoFlags.mingw =
llvmLtoOptFlags.mingw = -O3 -function-sections
llvmLtoNooptFlags.mingw = -O1
linkerNoDebugFlags.mingw = -Wl,-S
linkerDynamicFlags.mingw = -shared
linkerKonanFlags.mingw =-static-libgcc -static-libstdc++ \
-Xclang -flto-visibility-public-std \
-Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \
-Wl,--defsym,__cxa_demangle=Konan_cxa_demangle
linkerOptimizationFlags.mingw = -Wl,--gc-sections
entrySelector.mingw = -Wl,--defsym,main=Konan_main
dependencies.mingw = \
msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64 \
libffi-3.2.1-mingw-w64-x86-64
# WebAssembly 32-bit.
targetToolchain.osx-wasm32 = target-toolchain-2-osx-wasm
dependencies.osx-wasm32 = \
clang-llvm-5.0.0-darwin-macos \
target-sysroot-2-wasm \
target-toolchain-2-osx-wasm
targetToolchain.linux-wasm32 = target-toolchain-1-linux-wasm
dependencies.linux-wasm32 = \
clang-llvm-5.0.0-linux-x86-64 \
target-sysroot-2-wasm \
target-toolchain-1-linux-wasm
targetToolchain.mingw-wasm32 = target-toolchain-1-mingw-wasm
dependencies.mingw-wasm32 = \
msys2-mingw-w64-x86_64-gcc-7.2.0-clang-llvm-5.0.0-windows-x86-64 \
target-sysroot-2-wasm \
target-toolchain-1-mingw-wasm
quadruple.wasm32 = wasm32
llvmLtoFlags.wasm32 =
targetSysRoot.wasm32 = target-sysroot-2-wasm
optFlags.wasm32 = -internalize -globaldce
optNooptFlags.wasm32 = -O1
optOptFlags.wasm32 = -O3
optDebugFlags.wasm32 = -O0
llcFlags.wasm32 =
llcNooptFlags.wasm32 = -O1
llcOptFlags.wasm32 = -O3
llcDebugFlags.wasm32 = -O0
# The stack size is in bytes.
s2wasmFlags.wasm32 = --allocate-stack 1048576 --import-memory
# Zephyr RTOS.
targetToolchain.linux-zephyr = target-gcc-toolchain-6-2017q2-linux-armemb/arm-none-eabi
dependencies.linux-zephyr = \
clang-llvm-5.0.0-linux-x86-64 \
target-gcc-toolchain-6-2017q2-linux-armemb \
target-sysroot-2-wasm \
zephyr-host-tools-1-linux \
zephyr-zephyr-v1.10.0
quadruple.zephyr = armv7m-none-eabi
targetSysRoot.zephyr = target-sysroot-2-wasm
entrySelector.zephyr = --defsym main=Konan_main