From 970f2a98f95e9352564b6bde96be965d98855e9c Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 6 May 2019 18:51:05 +0700 Subject: [PATCH] Use clang codegen for android, linux, mingw. --- .../kotlin/backend/konan/BitcodeCompiler.kt | 41 ++-------- .../kotlin/backend/konan/CompilerOutput.kt | 2 +- .../backend/konan/OptimizationPipeline.kt | 20 +++-- backend.native/llvm.def | 8 +- gradle.properties | 2 +- konan/konan.properties | 76 ++++++++++--------- llvmCoverageMappingC/build.gradle | 2 +- .../src/main/cpp/CoverageMappingC.cpp | 13 +++- .../src/main/include/CoverageMappingC.h | 2 +- 9 files changed, 78 insertions(+), 88 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt index 7eaaf2f34f6..fd6f2e38aa9 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BitcodeCompiler.kt @@ -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().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 = 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}!") }) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt index 5dcad370474..2b4bfc642b7 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt @@ -45,7 +45,7 @@ private fun linkAllDependecies(context: Context, generatedBitcodeFiles: List "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) } diff --git a/backend.native/llvm.def b/backend.native/llvm.def index 911110f2cc9..a51d8451d57 100644 --- a/backend.native/llvm.def +++ b/backend.native/llvm.def @@ -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 \ diff --git a/gradle.properties b/gradle.properties index 828175962cc..83d0444b14e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/konan/konan.properties b/konan/konan.properties index 4efc3f837e0..865ba5b2ed8 100644 --- a/konan/konan.properties +++ b/konan/konan.properties @@ -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 \ No newline at end of file diff --git a/llvmCoverageMappingC/build.gradle b/llvmCoverageMappingC/build.gradle index 9870dbc0714..c5381693635 100644 --- a/llvmCoverageMappingC/build.gradle +++ b/llvmCoverageMappingC/build.gradle @@ -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.") } diff --git a/llvmCoverageMappingC/src/main/cpp/CoverageMappingC.cpp b/llvmCoverageMappingC/src/main/cpp/CoverageMappingC.cpp index 97add2c525e..49c7d9e120a 100644 --- a/llvmCoverageMappingC/src/main/cpp/CoverageMappingC.cpp +++ b/llvmCoverageMappingC/src/main/cpp/CoverageMappingC.cpp @@ -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 diff --git a/llvmCoverageMappingC/src/main/include/CoverageMappingC.h b/llvmCoverageMappingC/src/main/include/CoverageMappingC.h index e2396e19676..a0160c2afcf 100644 --- a/llvmCoverageMappingC/src/main/include/CoverageMappingC.h +++ b/llvmCoverageMappingC/src/main/include/CoverageMappingC.h @@ -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();