From d7adbfd2216d56d9c97f3184be679001cd2cd311 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Sat, 27 May 2017 10:11:07 +0300 Subject: [PATCH] Reconfigure interop with LLVM Use more strict linking. Also remove unused components. --- .../kotlin/native/interop/gen/jvm/main.kt | 6 +-- backend.native/build.gradle | 52 +------------------ backend.native/llvm.def | 13 ++++- 3 files changed, 15 insertions(+), 56 deletions(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt index befbd1eae00..9e6e4573077 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt @@ -413,9 +413,9 @@ private fun processLib(konanHome: String, val outLib = File(nativeLibsDir, System.mapLibraryName(libName)) - val linkerCmd = arrayOf("$llvmInstallPath/bin/$linker", *linkerOpts, outOFile.absolutePath, "-shared", - "-o", outLib.absolutePath, - "-Wl,-flat_namespace,-undefined,dynamic_lookup") + val linkerCmd = arrayOf("$llvmInstallPath/bin/$linker", + outOFile.absolutePath, "-shared", "-o", outLib.absolutePath, + *linkerOpts) runCmd(linkerCmd, workDir, verbose) diff --git a/backend.native/build.gradle b/backend.native/build.gradle index 9f21fe923b2..f6519fcaab6 100644 --- a/backend.native/build.gradle +++ b/backend.native/build.gradle @@ -91,62 +91,12 @@ task renamePackage(type: Copy) { outputs.files('build/renamed') } -List llvmLinkerOpts() { - // TODO: cannot use llvm-config because it can be inaccessible during project configuration - final List libs = [ - '-lLLVMX86Disassembler', - '-lLLVMX86AsmParser', - '-lLLVMX86CodeGen', - '-lLLVMSelectionDAG', - '-lLLVMAsmPrinter', - '-lLLVMX86Desc', - '-lLLVMMCDisassembler', - '-lLLVMX86Info', - '-lLLVMX86AsmPrinter', - '-lLLVMX86Utils', - '-lLLVMInterpreter', - '-lLLVMCodeGen', - '-lLLVMScalarOpts', - '-lLLVMInstCombine', - '-lLLVMInstrumentation', - '-lLLVMProfileData', - '-lLLVMTransformUtils', - '-lLLVMBitWriter', - '-lLLVMExecutionEngine', - '-lLLVMTarget', - '-lLLVMAnalysis', - '-lLLVMRuntimeDyld', - '-lLLVMObject', - '-lLLVMMCParser', - '-lLLVMBitReader', - '-lLLVMMC', - '-lLLVMCore', - '-lLLVMSupport', - '-lLLVMDebugInfoCodeView', - '-lLLVMLinker', - "-ldebugInfo" - ] - - final List res = ["-L$llvmDir/lib", "-L${project(':llvmDebugInfoC').buildDir}/libs/debugInfo/static"] - - if (isLinux()) { - res.addAll(["-Wl,-Bstatic", "-Wl,--whole-archive"] - + libs - + ["-Wl,--no-whole-archive", "-Wl,-Bdynamic"]) - } else { - res.addAll(libs) - } - - return res -} - - kotlinNativeInterop { llvm { dependsOn ":llvmDebugInfoC:debugInfoStaticLibrary" defFile 'llvm.def' compilerOpts "-fPIC", "-I$llvmDir/include", "-I${project(':llvmDebugInfoC').projectDir}/src/main/include" - linkerOpts llvmLinkerOpts() + linkerOpts "-L$llvmDir/lib", "-L${project(':llvmDebugInfoC').buildDir}/libs/debugInfo/static" } hash { // TODO: copy-pasted from ':common:compileHash' diff --git a/backend.native/llvm.def b/backend.native/llvm.def index 3ce24e439c0..e1d5e56017d 100644 --- a/backend.native/llvm.def +++ b/backend.native/llvm.def @@ -1,4 +1,4 @@ -headers = llvm-c/Core.h llvm-c/ExecutionEngine.h llvm-c/Target.h llvm-c/Analysis.h llvm-c/BitWriter.h \ +headers = llvm-c/Core.h llvm-c/Target.h llvm-c/Analysis.h llvm-c/BitWriter.h \ llvm-c/BitReader.h llvm-c/Linker.h DebugInfoC.h headerFilter = llvm-c/* DebugInfoC.h @@ -15,7 +15,12 @@ linkerOpts = -fPIC -fvisibility-inlines-hidden \ -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers \ -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor \ -std=c++11 \ - -DNDEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + -DNDEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \ + -ldebugInfo -lLLVMTarget -lLLVMMC -lLLVMLinker -lLLVMTransformUtils -lLLVMBitWriter \ + -lLLVMBitReader -lLLVMAnalysis -lLLVMProfileData -lLLVMCore -lLLVMSupport + +# ./llvm-config --libs analysis bitreader bitwriter core linker target + linkerOpts.osx = \ -Wl,-search_paths_first -Wl,-headerpad_max_install_names \ @@ -25,4 +30,8 @@ linkerOpts.linux=\ -Wl,-z,noexecstack \ -lrt -ldl -lpthread -lz -lm +excludedFunctions = LLVMInitializeAllAsmParsers LLVMInitializeAllAsmPrinters LLVMInitializeAllDisassemblers \ + LLVMInitializeAllTargetInfos LLVMInitializeAllTargetMCs LLVMInitializeAllTargets LLVMInitializeNativeTarget \ + LLVMInitializeNativeAsmParser LLVMInitializeNativeAsmPrinter LLVMInitializeNativeDisassembler + strictEnums = LLVMIntPredicate LLVMOpcode LLVMDLLStorageClass LLVMCallConv LLVMThreadLocalMode LLVMAtomicOrdering \ No newline at end of file