Use clang codegen for android, linux, mingw.
This commit is contained in:
committed by
Sergey Bogolepov
parent
a85b474fd0
commit
970f2a98f9
+7
-34
@@ -14,16 +14,8 @@ typealias BitcodeFile = String
|
||||
typealias ObjectFile = String
|
||||
typealias ExecutableFile = String
|
||||
|
||||
private fun mangleSymbol(target: KonanTarget,symbol: String) =
|
||||
if (target.family == Family.IOS || target.family == Family.OSX) {
|
||||
"_$symbol"
|
||||
} else {
|
||||
symbol
|
||||
}
|
||||
|
||||
internal class BitcodeCompiler(val context: Context) {
|
||||
|
||||
private val target = context.config.target
|
||||
private val platform = context.config.platform
|
||||
private val optimize = context.shouldOptimize()
|
||||
private val debug = context.config.debug
|
||||
@@ -32,8 +24,6 @@ internal class BitcodeCompiler(val context: Context) {
|
||||
addAll(elements.filter { !it.isEmpty() })
|
||||
}
|
||||
|
||||
private val exportedSymbols = context.coverage.addExportedSymbols()
|
||||
|
||||
private fun runTool(vararg command: String) =
|
||||
Command(*command)
|
||||
.logWith(context::log)
|
||||
@@ -56,25 +46,6 @@ internal class BitcodeCompiler(val context: Context) {
|
||||
runTool(absoluteToolName, *arg)
|
||||
}
|
||||
|
||||
private fun llvmLto(configurables: LlvmLtoFlags, file: BitcodeFile): ObjectFile {
|
||||
val combined = temporary("combined", ".o")
|
||||
val arguments = mutableListOf<String>().apply {
|
||||
addNonEmpty(configurables.llvmLtoFlags)
|
||||
addNonEmpty(llvmProfilingFlags())
|
||||
when {
|
||||
optimize -> addNonEmpty(configurables.llvmLtoOptFlags)
|
||||
debug -> addNonEmpty(platform.llvmDebugOptFlags)
|
||||
else -> addNonEmpty(configurables.llvmLtoNooptFlags)
|
||||
}
|
||||
addNonEmpty(configurables.llvmLtoDynamicFlags)
|
||||
add(file)
|
||||
// Prevent symbols from being deleted by DCE.
|
||||
addNonEmpty(exportedSymbols.map { "-exported-symbol=${mangleSymbol(target, it)}"} )
|
||||
}
|
||||
hostLlvmTool("llvm-lto", "-o", combined, *arguments.toTypedArray())
|
||||
return combined
|
||||
}
|
||||
|
||||
private fun opt(optFlags: OptFlags, bitcodeFile: BitcodeFile): BitcodeFile {
|
||||
val flags = (optFlags.optFlags + when {
|
||||
optimize -> optFlags.optOptFlags
|
||||
@@ -127,7 +98,7 @@ internal class BitcodeCompiler(val context: Context) {
|
||||
return combinedO
|
||||
}
|
||||
|
||||
private fun clang(configurables: AppleConfigurables, file: BitcodeFile): ObjectFile {
|
||||
private fun clang(configurables: ClangFlags, file: BitcodeFile): ObjectFile {
|
||||
val objectFile = temporary("result", ".o")
|
||||
|
||||
val profilingFlags = llvmProfilingFlags().map { listOf("-mllvm", it) }.flatten()
|
||||
@@ -146,7 +117,11 @@ internal class BitcodeCompiler(val context: Context) {
|
||||
}
|
||||
addNonEmpty(profilingFlags)
|
||||
}
|
||||
targetTool("clang++", *flags.toTypedArray(), file, "-o", objectFile)
|
||||
if (configurables is AppleConfigurables) {
|
||||
targetTool("clang++", *flags.toTypedArray(), file, "-o", objectFile)
|
||||
} else {
|
||||
hostLlvmTool("clang++", *flags.toTypedArray(), file, "-o", objectFile)
|
||||
}
|
||||
return objectFile
|
||||
}
|
||||
|
||||
@@ -165,14 +140,12 @@ internal class BitcodeCompiler(val context: Context) {
|
||||
|
||||
fun makeObjectFiles(bitcodeFile: BitcodeFile): List<ObjectFile> =
|
||||
listOf(when (val configurables = platform.configurables) {
|
||||
is AppleConfigurables ->
|
||||
is ClangFlags ->
|
||||
clang(configurables, bitcodeFile)
|
||||
is WasmConfigurables ->
|
||||
bitcodeToWasm(configurables, bitcodeFile)
|
||||
is ZephyrConfigurables ->
|
||||
optAndLlc(configurables, bitcodeFile)
|
||||
is LlvmLtoFlags ->
|
||||
llvmLto(configurables, bitcodeFile)
|
||||
else ->
|
||||
error("Unsupported configurables kind: ${configurables::class.simpleName}!")
|
||||
})
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ private fun linkAllDependecies(context: Context, generatedBitcodeFiles: List<Str
|
||||
}
|
||||
|
||||
private fun shouldOptimizeWithLlvmApi(context: Context) =
|
||||
(context.config.target.family == Family.IOS || context.config.target.family == Family.OSX)
|
||||
(context.config.target.family != Family.ZEPHYR && context.config.target.family != Family.WASM)
|
||||
|
||||
private fun shoudRunClosedWorldCleanUp(context: Context) =
|
||||
// GlobalDCE will kill coverage-related globals.
|
||||
|
||||
+14
-6
@@ -29,8 +29,7 @@ internal fun shouldRunLateBitcodePasses(context: Context): Boolean {
|
||||
|
||||
internal fun runLateBitcodePasses(context: Context, llvmModule: LLVMModuleRef) {
|
||||
val passManager = LLVMCreatePassManager()!!
|
||||
val targetLibraryInfo = LLVMGetTargetLibraryInfo(llvmModule)
|
||||
LLVMAddTargetLibraryInfo(targetLibraryInfo, passManager)
|
||||
LLVMKotlinAddTargetLibraryInfoWrapperPass(passManager, context.llvm.targetTriple)
|
||||
context.coverage.addLateLlvmPasses(passManager)
|
||||
LLVMRunPassManager(passManager, llvmModule)
|
||||
LLVMDisposePassManager(passManager)
|
||||
@@ -46,8 +45,18 @@ private class LlvmPipelineConfiguration(context: Context) {
|
||||
KonanTarget.IOS_ARM32 -> "armv7"
|
||||
KonanTarget.IOS_ARM64 -> "arm64"
|
||||
KonanTarget.IOS_X64 -> "core2"
|
||||
KonanTarget.LINUX_X64 -> "x86-64"
|
||||
KonanTarget.MINGW_X86 -> "pentium4"
|
||||
KonanTarget.MINGW_X64 -> "x86-64"
|
||||
KonanTarget.MACOS_X64 -> "core2"
|
||||
else -> error("There is no support for ${target.name} target yet.")
|
||||
KonanTarget.LINUX_ARM32_HFP -> "arm1136jf-s"
|
||||
KonanTarget.LINUX_ARM64 -> "cortex-a57"
|
||||
KonanTarget.ANDROID_ARM32 -> "armv7"
|
||||
KonanTarget.ANDROID_ARM64 -> "arm64"
|
||||
KonanTarget.LINUX_MIPS32 -> "mips32r2"
|
||||
KonanTarget.LINUX_MIPSEL32 -> "mips32r2"
|
||||
KonanTarget.WASM32,
|
||||
is KonanTarget.ZEPHYR -> error("There is no support for ${target.name} target yet.")
|
||||
}
|
||||
|
||||
val cpuFeatures: String = ""
|
||||
@@ -119,8 +128,7 @@ internal fun runLlvmOptimizationPipeline(context: Context) {
|
||||
config.relocMode,
|
||||
config.codeModel)
|
||||
|
||||
val targetLibraryInfo = LLVMGetTargetLibraryInfo(llvmModule)
|
||||
LLVMAddTargetLibraryInfo(targetLibraryInfo, modulePasses)
|
||||
LLVMKotlinAddTargetLibraryInfoWrapperPass(modulePasses, config.targetTriple)
|
||||
// TargetTransformInfo pass.
|
||||
LLVMAddAnalysisPasses(targetMachine, modulePasses)
|
||||
// Since we are in a "closed world" internalization and global dce
|
||||
@@ -134,10 +142,10 @@ internal fun runLlvmOptimizationPipeline(context: Context) {
|
||||
// Pipeline that is similar to `llvm-lto`.
|
||||
// TODO: Add ObjC optimization passes.
|
||||
LLVMPassManagerBuilderPopulateLTOPassManager(passBuilder, modulePasses, Internalize = 0, RunInliner = 1)
|
||||
LLVMPassManagerBuilderDispose(passBuilder)
|
||||
|
||||
LLVMRunPassManager(modulePasses, llvmModule)
|
||||
|
||||
LLVMPassManagerBuilderDispose(passBuilder)
|
||||
LLVMDisposeTargetMachine(targetMachine)
|
||||
LLVMDisposePassManager(modulePasses)
|
||||
}
|
||||
|
||||
@@ -26,14 +26,14 @@ linkerOpts.osx = -fPIC \
|
||||
-lpthread -lz -lm -lcurses -Wl,-U,_futimens -Wl,-U,_LLVMDumpType \
|
||||
-lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMIRReader -lLLVMAsmParser -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMWebAssemblyDisassembler -lLLVMWebAssemblyCodeGen -lLLVMWebAssemblyDesc -lLLVMWebAssemblyInfo -lLLVMWebAssemblyAsmPrinter -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMGlobalISel -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMMCDisassembler -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMARMUtils -lLLVMCoverage -lLLVMTarget -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle
|
||||
|
||||
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto
|
||||
linkerOpts.linux= -lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMCodeGen -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMCoverage -lLLVMTarget -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle \
|
||||
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto arm aarch64 x86 mips
|
||||
linkerOpts.linux= -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMGlobalISel -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMMCDisassembler -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMARMUtils -lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMCodeGen -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMCoverage -lLLVMTarget -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle \
|
||||
-fPIC \
|
||||
-Wl,-z,noexecstack \
|
||||
-lrt -ldl -lpthread -lz -lm
|
||||
|
||||
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto
|
||||
linkerOpts.mingw = -lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMCodeGen -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMCoverage -lLLVMTarget -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle \
|
||||
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto arm aarch64 x86
|
||||
linkerOpts.mingw = -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMGlobalISel -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMMCDisassembler -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMARMUtils -lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMCodeGen -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMCoverage -lLLVMTarget -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle \
|
||||
-lole32 -luuid -static-libgcc -static-libstdc++ \
|
||||
-Wl,-Bstatic -lz \
|
||||
-Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ kotlinStdlibVersion=1.3.50-dev-368
|
||||
testKotlinCompilerVersion=1.3.50-dev-328
|
||||
# See https://teamcity.jetbrains.com/project.html?projectId=Kotlin_KotlinNativeShared&tab=projectOverview
|
||||
sharedRepo=https://dl.bintray.com/jetbrains/kotlin-native-dependencies
|
||||
sharedVersion=1.0-dev-96
|
||||
sharedVersion=1.0-dev-99
|
||||
konanVersion=1.3.50
|
||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||
org.gradle.workers.max=4
|
||||
|
||||
+39
-37
@@ -32,7 +32,7 @@ downloadingAttempts = 10
|
||||
downloadingAttemptIntervalMs = 3000
|
||||
homeDependencyCache = .konan/cache
|
||||
|
||||
llvmDebugOptFlags = -O1
|
||||
clangDebugFlags = -O0
|
||||
llvmVersion = 6.0.1
|
||||
|
||||
# Mac OS X.
|
||||
@@ -183,17 +183,17 @@ quadruple.linux_x64 = x86_64-unknown-linux-gnu
|
||||
targetSysRoot.linux_x64 = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot
|
||||
# targetSysroot-relative.
|
||||
libGcc.linux_x64 = ../../lib/gcc/x86_64-unknown-linux-gnu/4.8.5
|
||||
llvmLtoFlags.linux_x64 = -mcpu=x86-64
|
||||
llvmLtoOptFlags.linux_x64 = -O3 -function-sections
|
||||
llvmLtoNooptFlags.linux_x64 = -O1
|
||||
llvmLtoDynamicFlags.linux_x64 = -relocation-model=pic
|
||||
llvmLlcFlags.linux_x64 = -march=x86-64
|
||||
clangFlags.linux_x64 = -cc1 -target-cpu x86-64 -emit-obj -disable-llvm-optzns -x ir
|
||||
clangNooptFlags.linux_x64 = -O1
|
||||
clangOptFlags.linux_x64 = -O3 -ffunction-sections
|
||||
clangDebugFlags.linux_x64 = -O0
|
||||
clangDynamicFlags.linux_x64 = -mrelocation-model pic
|
||||
linkerKonanFlags.linux_x64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
||||
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||
linkerOptimizationFlags.linux_x64 = --gc-sections
|
||||
linkerNoDebugFlags.linux_x64 = -S
|
||||
linkerDynamicFlags.linux_x64 = -shared
|
||||
pluginOptimizationFlags.linux_x64 = -plugin-opt=mcpu=x86-64 -plugin-opt=O3
|
||||
pluginOptimizationFlags.linux_x64 = -plugin-opt=target-cpu x86-64 -plugin-opt=O3
|
||||
dynamicLinker.linux_x64 = /lib64/ld-linux-x86-64.so.2
|
||||
entrySelector.linux_x64 = --defsym main=Konan_main
|
||||
# targetSysRoot relative
|
||||
@@ -230,10 +230,11 @@ linkerKonanFlags.linux_arm32_hfp = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthrea
|
||||
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||
# targetSysroot-relative.
|
||||
libGcc.linux_arm32_hfp = lib/gcc/arm-linux-gnueabihf/4.8.3
|
||||
llvmLtoFlags.linux_arm32_hfp = -float-abi=hard -mcpu=arm1136jf-s
|
||||
llvmLtoOptFlags.linux_arm32_hfp = -O3 -function-sections
|
||||
llvmLtoNooptFlags.linux_arm32_hfp = -O1
|
||||
llvmLtoDynamicFlags.linux_arm32_hfp = -relocation-model=pic
|
||||
clangFlags.linux_arm32_hfp = -cc1 -target-cpu arm1136jf-s -mfloat-abi hard -emit-obj -disable-llvm-optzns -x ir
|
||||
clangNooptFlags.linux_arm32_hfp = -O1
|
||||
clangOptFlags.linux_arm32_hfp = -O3 -ffunction-sections
|
||||
clangDebugFlags.linux_arm32_hfp = -O0
|
||||
clangDynamicFlags.linux_arm32_hfp = -mrelocation-model pic
|
||||
dynamicLinker.linux_arm32_hfp = /lib/ld-linux-armhf.so.3
|
||||
# targetSysRoot relative
|
||||
abiSpecificLibraries.linux_arm32_hfp = \
|
||||
@@ -273,10 +274,11 @@ linkerKonanFlags.linux_arm64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
||||
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||
# targetSysroot-relative.
|
||||
libGcc.linux_arm64 = usr/lib
|
||||
llvmLtoFlags.linux_arm64 = -mcpu=cortex-a57
|
||||
llvmLtoOptFlags.linux_arm64 = -O3 -function-sections
|
||||
llvmLtoNooptFlags.linux_arm64 = -O1
|
||||
llvmLtoDynamicFlags.linux_arm64 = -relocation-model=pic
|
||||
clangFlags.linux_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-optzns -x ir
|
||||
clangNooptFlags.linux_arm64 = -O1
|
||||
clangOptFlags.linux_arm64 = -O3 -ffunction-sections
|
||||
clangDebugFlags.linux_arm64 = -O0
|
||||
clangDynamicFlags.linux_arm64 = -mrelocation-model pic
|
||||
dynamicLinker.linux_arm64 = /lib/ld-linux-aarch64.so.1
|
||||
# targetSysRoot relative
|
||||
abiSpecificLibraries.linux_arm64 = \
|
||||
@@ -302,10 +304,11 @@ linkerKonanFlags.linux_mips32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
||||
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
||||
# 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
|
||||
clangFlags.linux_mips32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -target-cpu mips32r2
|
||||
clangNooptFlags.linux_mips32 = -O1
|
||||
clangOptFlags.linux_mips32 = -O3 -ffunction-sections
|
||||
clangDebugFlags.linux_mips32 = -O0
|
||||
clangDynamicFlags.linux_mips32 = -mrelocation-model pic
|
||||
dynamicLinker.linux_mips32 = /lib/ld.so.1
|
||||
# targetSysRoot relative
|
||||
abiSpecificLibraries.linux_mips32 =
|
||||
@@ -328,10 +331,11 @@ linkerKonanFlags.linux_mipsel32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread
|
||||
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
||||
# 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
|
||||
clangFlags.linux_mipsel32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -target-cpu mips32r2
|
||||
clangNooptFlags.linux_mipsel32 = -O1
|
||||
clangOptFlags.linux_mipsel32 = -O3 -ffunction-sections
|
||||
clangDebugFlags.linux_mipsel32 = -O0
|
||||
clangDynamicFlags.linux_mipsel32 = -mrelocation-model pic
|
||||
dynamicLinker.linux_mipsel32 = /lib/ld.so.1
|
||||
# targetSysRoot relative
|
||||
abiSpecificLibraries.linux_mipsel32 =
|
||||
@@ -359,10 +363,10 @@ dependencies.mingw_x64-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
|
||||
clangFlags.android_arm32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -femulated-tls -mrelocation-model pic
|
||||
clangOptFlags.android_arm32 = -O3 -ffunction-sections
|
||||
linkerNoDebugFlags.android_arm32 = -Wl,-S
|
||||
llvmLtoNooptFlags.android_arm32 = -O1
|
||||
clangNooptFlags.android_arm32 = -O1
|
||||
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
||||
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid
|
||||
|
||||
@@ -389,7 +393,7 @@ dependencies.mingw_x64-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
|
||||
clangFlags.android_arm64 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -mrelocation-model pic
|
||||
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
|
||||
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
|
||||
linkerNoDebugFlags.android_arm64 = -Wl,-S
|
||||
@@ -418,9 +422,9 @@ targetSysRoot.mingw_x64 = msys2-mingw-w64-x86_64-gcc-7.3.0-clang-llvm-lld-6.0.1-
|
||||
# For using with Universal Windows Platform (UWP) we need to use this slower option.
|
||||
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
||||
# TODO: remove, once fixed in mingw, check with the bug testcase.
|
||||
llvmLtoFlags.mingw_x64 = -emulated-tls
|
||||
llvmLtoOptFlags.mingw_x64 = -O3 -function-sections
|
||||
llvmLtoNooptFlags.mingw_x64 = -O1
|
||||
clangFlags.mingw_x64 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -target-cpu x86-64
|
||||
clangOptFlags.mingw_x64 = -O3 -ffunction-sections
|
||||
clangNooptFlags.mingw_x64 = -O1
|
||||
linkerNoDebugFlags.mingw_x64 = -Wl,-S
|
||||
linkerDynamicFlags.mingw_x64 = -shared
|
||||
linkerKonanFlags.mingw_x64 =-static-libgcc -static-libstdc++ \
|
||||
@@ -452,13 +456,13 @@ targetSysRoot.mingw_x86 = msys2-mingw-w64-i686-gcc-7.4.0-clang-llvm-6.0.1
|
||||
# For using with Universal Windows Platform (UWP) we need to use slower -emulated-tls option.
|
||||
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
||||
# TODO: remove, once fixed in mingw, check with the bug testcase.
|
||||
# -mcpu=pentium4 makes sure that cogenerator knows which CPU flavour to emit code for.
|
||||
# -target-cpu pentium4 makes sure that cogenerator knows which CPU flavour to emit code for.
|
||||
# Can be seen on optimized build and FP tests, where value is passed in coprocessor registers
|
||||
# by Kotlin and taken from SSE registers by C code.
|
||||
# TODO: once this information is available in function attributes, we can remove this flag.
|
||||
llvmLtoFlags.mingw_x86 = -emulated-tls -mcpu=pentium4
|
||||
llvmLtoOptFlags.mingw_x86 = -O3 -function-sections
|
||||
llvmLtoNooptFlags.mingw_x86 = -O1
|
||||
clangFlags.mingw_x86 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -target-cpu pentium4
|
||||
clangOptFlags.mingw_x86 = -O3 -ffunction-sections
|
||||
clangNooptFlags.mingw_x86 = -O1
|
||||
linkerNoDebugFlags.mingw_x86 = -Wl,-S
|
||||
linkerDynamicFlags.mingw_x86 = -shared
|
||||
linkerKonanFlags.mingw_x86 = -static-libgcc -static-libstdc++ \
|
||||
@@ -491,7 +495,6 @@ dependencies.mingw_x64-wasm32 = \
|
||||
target-toolchain-2-mingw-wasm
|
||||
|
||||
quadruple.wasm32 = wasm32-unknown-unknown
|
||||
llvmLtoFlags.wasm32 =
|
||||
targetSysRoot.wasm32 = target-sysroot-2-wasm
|
||||
optFlags.wasm32 = -internalize -globaldce -mtriple=wasm32-unknown-unknown-wasm
|
||||
optNooptFlags.wasm32 = -O1
|
||||
@@ -502,5 +505,4 @@ llcNooptFlags.wasm32 = -O1
|
||||
llcOptFlags.wasm32 = -O3
|
||||
llcDebugFlags.wasm32 = -O0
|
||||
# TODO: make explicit list of external symbols
|
||||
lld.wasm32 = --allow-undefined --no-entry --global-base=0 --no-threads
|
||||
|
||||
lld.wasm32 = --allow-undefined --no-entry --global-base=0 --no-threads
|
||||
@@ -35,7 +35,7 @@ model {
|
||||
} else if (isWindows()) {
|
||||
cppCompiler.args "-DKONAN_WINDOWS=1"
|
||||
} else if (isLinux()) {
|
||||
cppCompiler.args "-DKONAN_LINUX=1"
|
||||
cppCompiler.args "-DKONAN_LINUX=1", "-D_GLIBCXX_USE_CXX11_ABI=0"
|
||||
} else {
|
||||
throw new Error("Unsupported host OS.")
|
||||
}
|
||||
|
||||
@@ -224,9 +224,9 @@ void LLVMAddInstrProfPass(LLVMPassManagerRef passManagerRef, const char* outputF
|
||||
passManager->add(createInstrProfilingLegacyPass(options));
|
||||
}
|
||||
|
||||
LLVMTargetLibraryInfoRef LLVMGetTargetLibraryInfo(LLVMModuleRef moduleRef) {
|
||||
auto* libraryInfo = new TargetLibraryInfoImpl(Triple(unwrap(moduleRef)->getTargetTriple()));
|
||||
return llvm::wrap(libraryInfo);
|
||||
void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef, const char* targetTriple) {
|
||||
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
|
||||
passManager->add(new TargetLibraryInfoWrapperPass(Triple(targetTriple)));
|
||||
}
|
||||
|
||||
void LLVMKotlinInitializeTargets() {
|
||||
@@ -241,7 +241,14 @@ void LLVMKotlinInitializeTargets() {
|
||||
INIT_LLVM_TARGET(X86)
|
||||
INIT_LLVM_TARGET(WebAssembly)
|
||||
#elif KONAN_LINUX
|
||||
INIT_LLVM_TARGET(AArch64)
|
||||
INIT_LLVM_TARGET(ARM)
|
||||
INIT_LLVM_TARGET(Mips)
|
||||
INIT_LLVM_TARGET(X86)
|
||||
#elif KONAN_WINDOWS
|
||||
INIT_LLVM_TARGET(AArch64)
|
||||
INIT_LLVM_TARGET(ARM)
|
||||
INIT_LLVM_TARGET(X86)
|
||||
#endif
|
||||
|
||||
#undef INIT_LLVM_TARGET
|
||||
|
||||
@@ -72,7 +72,7 @@ LLVMValueRef LLVMCreatePGOFunctionNameVar(LLVMValueRef llvmFunction, const char
|
||||
|
||||
void LLVMAddInstrProfPass(LLVMPassManagerRef passManagerRef, const char* outputFileName);
|
||||
|
||||
LLVMTargetLibraryInfoRef LLVMGetTargetLibraryInfo(LLVMModuleRef moduleRef);
|
||||
void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef, const char* targetTriple);
|
||||
|
||||
void LLVMKotlinInitializeTargets();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user