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 ObjectFile = String
|
||||||
typealias ExecutableFile = 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) {
|
internal class BitcodeCompiler(val context: Context) {
|
||||||
|
|
||||||
private val target = context.config.target
|
|
||||||
private val platform = context.config.platform
|
private val platform = context.config.platform
|
||||||
private val optimize = context.shouldOptimize()
|
private val optimize = context.shouldOptimize()
|
||||||
private val debug = context.config.debug
|
private val debug = context.config.debug
|
||||||
@@ -32,8 +24,6 @@ internal class BitcodeCompiler(val context: Context) {
|
|||||||
addAll(elements.filter { !it.isEmpty() })
|
addAll(elements.filter { !it.isEmpty() })
|
||||||
}
|
}
|
||||||
|
|
||||||
private val exportedSymbols = context.coverage.addExportedSymbols()
|
|
||||||
|
|
||||||
private fun runTool(vararg command: String) =
|
private fun runTool(vararg command: String) =
|
||||||
Command(*command)
|
Command(*command)
|
||||||
.logWith(context::log)
|
.logWith(context::log)
|
||||||
@@ -56,25 +46,6 @@ internal class BitcodeCompiler(val context: Context) {
|
|||||||
runTool(absoluteToolName, *arg)
|
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 {
|
private fun opt(optFlags: OptFlags, bitcodeFile: BitcodeFile): BitcodeFile {
|
||||||
val flags = (optFlags.optFlags + when {
|
val flags = (optFlags.optFlags + when {
|
||||||
optimize -> optFlags.optOptFlags
|
optimize -> optFlags.optOptFlags
|
||||||
@@ -127,7 +98,7 @@ internal class BitcodeCompiler(val context: Context) {
|
|||||||
return combinedO
|
return combinedO
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun clang(configurables: AppleConfigurables, file: BitcodeFile): ObjectFile {
|
private fun clang(configurables: ClangFlags, file: BitcodeFile): ObjectFile {
|
||||||
val objectFile = temporary("result", ".o")
|
val objectFile = temporary("result", ".o")
|
||||||
|
|
||||||
val profilingFlags = llvmProfilingFlags().map { listOf("-mllvm", it) }.flatten()
|
val profilingFlags = llvmProfilingFlags().map { listOf("-mllvm", it) }.flatten()
|
||||||
@@ -146,7 +117,11 @@ internal class BitcodeCompiler(val context: Context) {
|
|||||||
}
|
}
|
||||||
addNonEmpty(profilingFlags)
|
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
|
return objectFile
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,14 +140,12 @@ internal class BitcodeCompiler(val context: Context) {
|
|||||||
|
|
||||||
fun makeObjectFiles(bitcodeFile: BitcodeFile): List<ObjectFile> =
|
fun makeObjectFiles(bitcodeFile: BitcodeFile): List<ObjectFile> =
|
||||||
listOf(when (val configurables = platform.configurables) {
|
listOf(when (val configurables = platform.configurables) {
|
||||||
is AppleConfigurables ->
|
is ClangFlags ->
|
||||||
clang(configurables, bitcodeFile)
|
clang(configurables, bitcodeFile)
|
||||||
is WasmConfigurables ->
|
is WasmConfigurables ->
|
||||||
bitcodeToWasm(configurables, bitcodeFile)
|
bitcodeToWasm(configurables, bitcodeFile)
|
||||||
is ZephyrConfigurables ->
|
is ZephyrConfigurables ->
|
||||||
optAndLlc(configurables, bitcodeFile)
|
optAndLlc(configurables, bitcodeFile)
|
||||||
is LlvmLtoFlags ->
|
|
||||||
llvmLto(configurables, bitcodeFile)
|
|
||||||
else ->
|
else ->
|
||||||
error("Unsupported configurables kind: ${configurables::class.simpleName}!")
|
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) =
|
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) =
|
private fun shoudRunClosedWorldCleanUp(context: Context) =
|
||||||
// GlobalDCE will kill coverage-related globals.
|
// 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) {
|
internal fun runLateBitcodePasses(context: Context, llvmModule: LLVMModuleRef) {
|
||||||
val passManager = LLVMCreatePassManager()!!
|
val passManager = LLVMCreatePassManager()!!
|
||||||
val targetLibraryInfo = LLVMGetTargetLibraryInfo(llvmModule)
|
LLVMKotlinAddTargetLibraryInfoWrapperPass(passManager, context.llvm.targetTriple)
|
||||||
LLVMAddTargetLibraryInfo(targetLibraryInfo, passManager)
|
|
||||||
context.coverage.addLateLlvmPasses(passManager)
|
context.coverage.addLateLlvmPasses(passManager)
|
||||||
LLVMRunPassManager(passManager, llvmModule)
|
LLVMRunPassManager(passManager, llvmModule)
|
||||||
LLVMDisposePassManager(passManager)
|
LLVMDisposePassManager(passManager)
|
||||||
@@ -46,8 +45,18 @@ private class LlvmPipelineConfiguration(context: Context) {
|
|||||||
KonanTarget.IOS_ARM32 -> "armv7"
|
KonanTarget.IOS_ARM32 -> "armv7"
|
||||||
KonanTarget.IOS_ARM64 -> "arm64"
|
KonanTarget.IOS_ARM64 -> "arm64"
|
||||||
KonanTarget.IOS_X64 -> "core2"
|
KonanTarget.IOS_X64 -> "core2"
|
||||||
|
KonanTarget.LINUX_X64 -> "x86-64"
|
||||||
|
KonanTarget.MINGW_X86 -> "pentium4"
|
||||||
|
KonanTarget.MINGW_X64 -> "x86-64"
|
||||||
KonanTarget.MACOS_X64 -> "core2"
|
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 = ""
|
val cpuFeatures: String = ""
|
||||||
@@ -119,8 +128,7 @@ internal fun runLlvmOptimizationPipeline(context: Context) {
|
|||||||
config.relocMode,
|
config.relocMode,
|
||||||
config.codeModel)
|
config.codeModel)
|
||||||
|
|
||||||
val targetLibraryInfo = LLVMGetTargetLibraryInfo(llvmModule)
|
LLVMKotlinAddTargetLibraryInfoWrapperPass(modulePasses, config.targetTriple)
|
||||||
LLVMAddTargetLibraryInfo(targetLibraryInfo, modulePasses)
|
|
||||||
// TargetTransformInfo pass.
|
// TargetTransformInfo pass.
|
||||||
LLVMAddAnalysisPasses(targetMachine, modulePasses)
|
LLVMAddAnalysisPasses(targetMachine, modulePasses)
|
||||||
// Since we are in a "closed world" internalization and global dce
|
// 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`.
|
// Pipeline that is similar to `llvm-lto`.
|
||||||
// TODO: Add ObjC optimization passes.
|
// TODO: Add ObjC optimization passes.
|
||||||
LLVMPassManagerBuilderPopulateLTOPassManager(passBuilder, modulePasses, Internalize = 0, RunInliner = 1)
|
LLVMPassManagerBuilderPopulateLTOPassManager(passBuilder, modulePasses, Internalize = 0, RunInliner = 1)
|
||||||
LLVMPassManagerBuilderDispose(passBuilder)
|
|
||||||
|
|
||||||
LLVMRunPassManager(modulePasses, llvmModule)
|
LLVMRunPassManager(modulePasses, llvmModule)
|
||||||
|
|
||||||
|
LLVMPassManagerBuilderDispose(passBuilder)
|
||||||
LLVMDisposeTargetMachine(targetMachine)
|
LLVMDisposeTargetMachine(targetMachine)
|
||||||
LLVMDisposePassManager(modulePasses)
|
LLVMDisposePassManager(modulePasses)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,14 +26,14 @@ linkerOpts.osx = -fPIC \
|
|||||||
-lpthread -lz -lm -lcurses -Wl,-U,_futimens -Wl,-U,_LLVMDumpType \
|
-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
|
-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
|
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto arm aarch64 x86 mips
|
||||||
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 \
|
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 \
|
-fPIC \
|
||||||
-Wl,-z,noexecstack \
|
-Wl,-z,noexecstack \
|
||||||
-lrt -ldl -lpthread -lz -lm
|
-lrt -ldl -lpthread -lz -lm
|
||||||
|
|
||||||
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto
|
# ./llvm-config --libs analysis bitreader bitwriter core linker target coverage analysis ipo instrumentation lto arm aarch64 x86
|
||||||
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 \
|
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++ \
|
-lole32 -luuid -static-libgcc -static-libstdc++ \
|
||||||
-Wl,-Bstatic -lz \
|
-Wl,-Bstatic -lz \
|
||||||
-Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic \
|
-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
|
testKotlinCompilerVersion=1.3.50-dev-328
|
||||||
# See https://teamcity.jetbrains.com/project.html?projectId=Kotlin_KotlinNativeShared&tab=projectOverview
|
# See https://teamcity.jetbrains.com/project.html?projectId=Kotlin_KotlinNativeShared&tab=projectOverview
|
||||||
sharedRepo=https://dl.bintray.com/jetbrains/kotlin-native-dependencies
|
sharedRepo=https://dl.bintray.com/jetbrains/kotlin-native-dependencies
|
||||||
sharedVersion=1.0-dev-96
|
sharedVersion=1.0-dev-99
|
||||||
konanVersion=1.3.50
|
konanVersion=1.3.50
|
||||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||||
org.gradle.workers.max=4
|
org.gradle.workers.max=4
|
||||||
|
|||||||
+38
-36
@@ -32,7 +32,7 @@ downloadingAttempts = 10
|
|||||||
downloadingAttemptIntervalMs = 3000
|
downloadingAttemptIntervalMs = 3000
|
||||||
homeDependencyCache = .konan/cache
|
homeDependencyCache = .konan/cache
|
||||||
|
|
||||||
llvmDebugOptFlags = -O1
|
clangDebugFlags = -O0
|
||||||
llvmVersion = 6.0.1
|
llvmVersion = 6.0.1
|
||||||
|
|
||||||
# Mac OS X.
|
# 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.linux_x64 = target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot
|
||||||
# targetSysroot-relative.
|
# targetSysroot-relative.
|
||||||
libGcc.linux_x64 = ../../lib/gcc/x86_64-unknown-linux-gnu/4.8.5
|
libGcc.linux_x64 = ../../lib/gcc/x86_64-unknown-linux-gnu/4.8.5
|
||||||
llvmLtoFlags.linux_x64 = -mcpu=x86-64
|
clangFlags.linux_x64 = -cc1 -target-cpu x86-64 -emit-obj -disable-llvm-optzns -x ir
|
||||||
llvmLtoOptFlags.linux_x64 = -O3 -function-sections
|
clangNooptFlags.linux_x64 = -O1
|
||||||
llvmLtoNooptFlags.linux_x64 = -O1
|
clangOptFlags.linux_x64 = -O3 -ffunction-sections
|
||||||
llvmLtoDynamicFlags.linux_x64 = -relocation-model=pic
|
clangDebugFlags.linux_x64 = -O0
|
||||||
llvmLlcFlags.linux_x64 = -march=x86-64
|
clangDynamicFlags.linux_x64 = -mrelocation-model pic
|
||||||
linkerKonanFlags.linux_x64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
linkerKonanFlags.linux_x64 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
||||||
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||||
linkerOptimizationFlags.linux_x64 = --gc-sections
|
linkerOptimizationFlags.linux_x64 = --gc-sections
|
||||||
linkerNoDebugFlags.linux_x64 = -S
|
linkerNoDebugFlags.linux_x64 = -S
|
||||||
linkerDynamicFlags.linux_x64 = -shared
|
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
|
dynamicLinker.linux_x64 = /lib64/ld-linux-x86-64.so.2
|
||||||
entrySelector.linux_x64 = --defsym main=Konan_main
|
entrySelector.linux_x64 = --defsym main=Konan_main
|
||||||
# targetSysRoot relative
|
# targetSysRoot relative
|
||||||
@@ -230,10 +230,11 @@ linkerKonanFlags.linux_arm32_hfp = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthrea
|
|||||||
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||||
# targetSysroot-relative.
|
# targetSysroot-relative.
|
||||||
libGcc.linux_arm32_hfp = lib/gcc/arm-linux-gnueabihf/4.8.3
|
libGcc.linux_arm32_hfp = lib/gcc/arm-linux-gnueabihf/4.8.3
|
||||||
llvmLtoFlags.linux_arm32_hfp = -float-abi=hard -mcpu=arm1136jf-s
|
clangFlags.linux_arm32_hfp = -cc1 -target-cpu arm1136jf-s -mfloat-abi hard -emit-obj -disable-llvm-optzns -x ir
|
||||||
llvmLtoOptFlags.linux_arm32_hfp = -O3 -function-sections
|
clangNooptFlags.linux_arm32_hfp = -O1
|
||||||
llvmLtoNooptFlags.linux_arm32_hfp = -O1
|
clangOptFlags.linux_arm32_hfp = -O3 -ffunction-sections
|
||||||
llvmLtoDynamicFlags.linux_arm32_hfp = -relocation-model=pic
|
clangDebugFlags.linux_arm32_hfp = -O0
|
||||||
|
clangDynamicFlags.linux_arm32_hfp = -mrelocation-model pic
|
||||||
dynamicLinker.linux_arm32_hfp = /lib/ld-linux-armhf.so.3
|
dynamicLinker.linux_arm32_hfp = /lib/ld-linux-armhf.so.3
|
||||||
# targetSysRoot relative
|
# targetSysRoot relative
|
||||||
abiSpecificLibraries.linux_arm32_hfp = \
|
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
|
--defsym __cxa_demangle=Konan_cxa_demangle --no-threads
|
||||||
# targetSysroot-relative.
|
# targetSysroot-relative.
|
||||||
libGcc.linux_arm64 = usr/lib
|
libGcc.linux_arm64 = usr/lib
|
||||||
llvmLtoFlags.linux_arm64 = -mcpu=cortex-a57
|
clangFlags.linux_arm64 = -cc1 -target-cpu cortex-a57 -emit-obj -disable-llvm-optzns -x ir
|
||||||
llvmLtoOptFlags.linux_arm64 = -O3 -function-sections
|
clangNooptFlags.linux_arm64 = -O1
|
||||||
llvmLtoNooptFlags.linux_arm64 = -O1
|
clangOptFlags.linux_arm64 = -O3 -ffunction-sections
|
||||||
llvmLtoDynamicFlags.linux_arm64 = -relocation-model=pic
|
clangDebugFlags.linux_arm64 = -O0
|
||||||
|
clangDynamicFlags.linux_arm64 = -mrelocation-model pic
|
||||||
dynamicLinker.linux_arm64 = /lib/ld-linux-aarch64.so.1
|
dynamicLinker.linux_arm64 = /lib/ld-linux-aarch64.so.1
|
||||||
# targetSysRoot relative
|
# targetSysRoot relative
|
||||||
abiSpecificLibraries.linux_arm64 = \
|
abiSpecificLibraries.linux_arm64 = \
|
||||||
@@ -302,10 +304,11 @@ linkerKonanFlags.linux_mips32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread \
|
|||||||
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
||||||
# targetSysroot-relative.
|
# targetSysroot-relative.
|
||||||
libGcc.linux_mips32 = lib/gcc/mips-unknown-linux-gnu/4.9.4
|
libGcc.linux_mips32 = lib/gcc/mips-unknown-linux-gnu/4.9.4
|
||||||
llvmLtoFlags.linux_mips32 =
|
clangFlags.linux_mips32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -target-cpu mips32r2
|
||||||
llvmLtoOptFlags.linux_mips32 = -O3 -function-sections
|
clangNooptFlags.linux_mips32 = -O1
|
||||||
llvmLtoNooptFlags.linux_mips32 = -O1
|
clangOptFlags.linux_mips32 = -O3 -ffunction-sections
|
||||||
llvmLtoDynamicFlags.linux_mips32 = -relocation-model=pic
|
clangDebugFlags.linux_mips32 = -O0
|
||||||
|
clangDynamicFlags.linux_mips32 = -mrelocation-model pic
|
||||||
dynamicLinker.linux_mips32 = /lib/ld.so.1
|
dynamicLinker.linux_mips32 = /lib/ld.so.1
|
||||||
# targetSysRoot relative
|
# targetSysRoot relative
|
||||||
abiSpecificLibraries.linux_mips32 =
|
abiSpecificLibraries.linux_mips32 =
|
||||||
@@ -328,10 +331,11 @@ linkerKonanFlags.linux_mipsel32 = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread
|
|||||||
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
--defsym __cxa_demangle=Konan_cxa_demangle -z notext
|
||||||
# targetSysroot-relative.
|
# targetSysroot-relative.
|
||||||
libGcc.linux_mipsel32 = lib/gcc/mipsel-unknown-linux-gnu/4.9.4
|
libGcc.linux_mipsel32 = lib/gcc/mipsel-unknown-linux-gnu/4.9.4
|
||||||
llvmLtoFlags.linux_mipsel32 =
|
clangFlags.linux_mipsel32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -target-cpu mips32r2
|
||||||
llvmLtoOptFlags.linux_mipsel32 = -O3 -function-sections
|
clangNooptFlags.linux_mipsel32 = -O1
|
||||||
llvmLtoNooptFlags.linux_mipsel32 = -O1
|
clangOptFlags.linux_mipsel32 = -O3 -ffunction-sections
|
||||||
llvmLtoDynamicFlags.linux_mipsel32 = -relocation-model=pic
|
clangDebugFlags.linux_mipsel32 = -O0
|
||||||
|
clangDynamicFlags.linux_mipsel32 = -mrelocation-model pic
|
||||||
dynamicLinker.linux_mipsel32 = /lib/ld.so.1
|
dynamicLinker.linux_mipsel32 = /lib/ld.so.1
|
||||||
# targetSysRoot relative
|
# targetSysRoot relative
|
||||||
abiSpecificLibraries.linux_mipsel32 =
|
abiSpecificLibraries.linux_mipsel32 =
|
||||||
@@ -359,10 +363,10 @@ dependencies.mingw_x64-android_arm32 = \
|
|||||||
|
|
||||||
quadruple.android_arm32 = arm-linux-androideabi
|
quadruple.android_arm32 = arm-linux-androideabi
|
||||||
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
|
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
|
||||||
llvmLtoFlags.android_arm32 = -emulated-tls -relocation-model=pic
|
clangFlags.android_arm32 = -cc1 -emit-obj -disable-llvm-optzns -x ir -femulated-tls -mrelocation-model pic
|
||||||
llvmLtoOptFlags.android_arm32 = -O3 -function-sections
|
clangOptFlags.android_arm32 = -O3 -ffunction-sections
|
||||||
linkerNoDebugFlags.android_arm32 = -Wl,-S
|
linkerNoDebugFlags.android_arm32 = -Wl,-S
|
||||||
llvmLtoNooptFlags.android_arm32 = -O1
|
clangNooptFlags.android_arm32 = -O1
|
||||||
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
||||||
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid
|
linkerKonanFlags.android_arm32 = -lm -latomic -lstdc++ -landroid
|
||||||
|
|
||||||
@@ -389,7 +393,7 @@ dependencies.mingw_x64-android_arm64 = \
|
|||||||
|
|
||||||
quadruple.android_arm64 = aarch64-linux-android
|
quadruple.android_arm64 = aarch64-linux-android
|
||||||
entrySelector.android_arm64 = -Wl,--defsym -Wl,main=Konan_main
|
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
|
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
|
||||||
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
|
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
|
||||||
linkerNoDebugFlags.android_arm64 = -Wl,-S
|
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.
|
# For using with Universal Windows Platform (UWP) we need to use this slower option.
|
||||||
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
||||||
# TODO: remove, once fixed in mingw, check with the bug testcase.
|
# TODO: remove, once fixed in mingw, check with the bug testcase.
|
||||||
llvmLtoFlags.mingw_x64 = -emulated-tls
|
clangFlags.mingw_x64 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -target-cpu x86-64
|
||||||
llvmLtoOptFlags.mingw_x64 = -O3 -function-sections
|
clangOptFlags.mingw_x64 = -O3 -ffunction-sections
|
||||||
llvmLtoNooptFlags.mingw_x64 = -O1
|
clangNooptFlags.mingw_x64 = -O1
|
||||||
linkerNoDebugFlags.mingw_x64 = -Wl,-S
|
linkerNoDebugFlags.mingw_x64 = -Wl,-S
|
||||||
linkerDynamicFlags.mingw_x64 = -shared
|
linkerDynamicFlags.mingw_x64 = -shared
|
||||||
linkerKonanFlags.mingw_x64 =-static-libgcc -static-libstdc++ \
|
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.
|
# For using with Universal Windows Platform (UWP) we need to use slower -emulated-tls option.
|
||||||
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
# See https://youtrack.jetbrains.com/issue/KT-27654.
|
||||||
# TODO: remove, once fixed in mingw, check with the bug testcase.
|
# 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
|
# 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.
|
# by Kotlin and taken from SSE registers by C code.
|
||||||
# TODO: once this information is available in function attributes, we can remove this flag.
|
# TODO: once this information is available in function attributes, we can remove this flag.
|
||||||
llvmLtoFlags.mingw_x86 = -emulated-tls -mcpu=pentium4
|
clangFlags.mingw_x86 = -cc1 -emit-obj -disable-llvm-passes -x ir -femulated-tls -target-cpu pentium4
|
||||||
llvmLtoOptFlags.mingw_x86 = -O3 -function-sections
|
clangOptFlags.mingw_x86 = -O3 -ffunction-sections
|
||||||
llvmLtoNooptFlags.mingw_x86 = -O1
|
clangNooptFlags.mingw_x86 = -O1
|
||||||
linkerNoDebugFlags.mingw_x86 = -Wl,-S
|
linkerNoDebugFlags.mingw_x86 = -Wl,-S
|
||||||
linkerDynamicFlags.mingw_x86 = -shared
|
linkerDynamicFlags.mingw_x86 = -shared
|
||||||
linkerKonanFlags.mingw_x86 = -static-libgcc -static-libstdc++ \
|
linkerKonanFlags.mingw_x86 = -static-libgcc -static-libstdc++ \
|
||||||
@@ -491,7 +495,6 @@ dependencies.mingw_x64-wasm32 = \
|
|||||||
target-toolchain-2-mingw-wasm
|
target-toolchain-2-mingw-wasm
|
||||||
|
|
||||||
quadruple.wasm32 = wasm32-unknown-unknown
|
quadruple.wasm32 = wasm32-unknown-unknown
|
||||||
llvmLtoFlags.wasm32 =
|
|
||||||
targetSysRoot.wasm32 = target-sysroot-2-wasm
|
targetSysRoot.wasm32 = target-sysroot-2-wasm
|
||||||
optFlags.wasm32 = -internalize -globaldce -mtriple=wasm32-unknown-unknown-wasm
|
optFlags.wasm32 = -internalize -globaldce -mtriple=wasm32-unknown-unknown-wasm
|
||||||
optNooptFlags.wasm32 = -O1
|
optNooptFlags.wasm32 = -O1
|
||||||
@@ -503,4 +506,3 @@ llcOptFlags.wasm32 = -O3
|
|||||||
llcDebugFlags.wasm32 = -O0
|
llcDebugFlags.wasm32 = -O0
|
||||||
# TODO: make explicit list of external symbols
|
# 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()) {
|
} else if (isWindows()) {
|
||||||
cppCompiler.args "-DKONAN_WINDOWS=1"
|
cppCompiler.args "-DKONAN_WINDOWS=1"
|
||||||
} else if (isLinux()) {
|
} else if (isLinux()) {
|
||||||
cppCompiler.args "-DKONAN_LINUX=1"
|
cppCompiler.args "-DKONAN_LINUX=1", "-D_GLIBCXX_USE_CXX11_ABI=0"
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Unsupported host OS.")
|
throw new Error("Unsupported host OS.")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,9 +224,9 @@ void LLVMAddInstrProfPass(LLVMPassManagerRef passManagerRef, const char* outputF
|
|||||||
passManager->add(createInstrProfilingLegacyPass(options));
|
passManager->add(createInstrProfilingLegacyPass(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMTargetLibraryInfoRef LLVMGetTargetLibraryInfo(LLVMModuleRef moduleRef) {
|
void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef, const char* targetTriple) {
|
||||||
auto* libraryInfo = new TargetLibraryInfoImpl(Triple(unwrap(moduleRef)->getTargetTriple()));
|
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
|
||||||
return llvm::wrap(libraryInfo);
|
passManager->add(new TargetLibraryInfoWrapperPass(Triple(targetTriple)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLVMKotlinInitializeTargets() {
|
void LLVMKotlinInitializeTargets() {
|
||||||
@@ -241,7 +241,14 @@ void LLVMKotlinInitializeTargets() {
|
|||||||
INIT_LLVM_TARGET(X86)
|
INIT_LLVM_TARGET(X86)
|
||||||
INIT_LLVM_TARGET(WebAssembly)
|
INIT_LLVM_TARGET(WebAssembly)
|
||||||
#elif KONAN_LINUX
|
#elif KONAN_LINUX
|
||||||
|
INIT_LLVM_TARGET(AArch64)
|
||||||
|
INIT_LLVM_TARGET(ARM)
|
||||||
|
INIT_LLVM_TARGET(Mips)
|
||||||
|
INIT_LLVM_TARGET(X86)
|
||||||
#elif KONAN_WINDOWS
|
#elif KONAN_WINDOWS
|
||||||
|
INIT_LLVM_TARGET(AArch64)
|
||||||
|
INIT_LLVM_TARGET(ARM)
|
||||||
|
INIT_LLVM_TARGET(X86)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef INIT_LLVM_TARGET
|
#undef INIT_LLVM_TARGET
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ LLVMValueRef LLVMCreatePGOFunctionNameVar(LLVMValueRef llvmFunction, const char
|
|||||||
|
|
||||||
void LLVMAddInstrProfPass(LLVMPassManagerRef passManagerRef, const char* outputFileName);
|
void LLVMAddInstrProfPass(LLVMPassManagerRef passManagerRef, const char* outputFileName);
|
||||||
|
|
||||||
LLVMTargetLibraryInfoRef LLVMGetTargetLibraryInfo(LLVMModuleRef moduleRef);
|
void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef, const char* targetTriple);
|
||||||
|
|
||||||
void LLVMKotlinInitializeTargets();
|
void LLVMKotlinInitializeTargets();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user