Use clang codegen for android, linux, mingw.

This commit is contained in:
Sergey Bogolepov
2019-05-06 18:51:05 +07:00
committed by Sergey Bogolepov
parent a85b474fd0
commit 970f2a98f9
9 changed files with 78 additions and 88 deletions
@@ -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}!")
})
@@ -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.
@@ -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)
}
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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();