if(ENABLE_LLVM_SHARED) set(llvm_libs "LLVM") else() set(llvm_raw_libs bitwriter bpfcodegen debuginfodwarf irreader linker mcjit objcarcopts option passes lto) if(ENABLE_LLVM_NATIVECODEGEN) set(llvm_raw_libs ${llvm_raw_libs} nativecodegen) endif() list(FIND LLVM_AVAILABLE_LIBS "LLVMCoverage" _llvm_coverage) if (${_llvm_coverage} GREATER -1) list(APPEND llvm_raw_libs coverage) endif() list(FIND LLVM_AVAILABLE_LIBS "LLVMCoroutines" _llvm_coroutines) if (${_llvm_coroutines} GREATER -1) list(APPEND llvm_raw_libs coroutines) endif() list(FIND LLVM_AVAILABLE_LIBS "LLVMFrontendOpenMP" _llvm_frontendOpenMP) if (${_llvm_frontendOpenMP} GREATER -1) list(APPEND llvm_raw_libs frontendopenmp) endif() if (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 6 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 6) list(APPEND llvm_raw_libs bpfasmparser) list(APPEND llvm_raw_libs bpfdisassembler) endif() llvm_map_components_to_libnames(_llvm_libs ${llvm_raw_libs}) llvm_expand_dependencies(llvm_libs ${_llvm_libs}) endif() if(ENABLE_LLVM_SHARED AND NOT libclang-shared STREQUAL "libclang-shared-NOTFOUND") set(clang_libs ${libclang-shared}) else() # order is important set(clang_libs ${libclangFrontend} ${libclangSerialization} ${libclangDriver}) if (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 8 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 8) list(APPEND clang_libs ${libclangASTMatchers}) endif() list(APPEND clang_libs ${libclangParse} ${libclangSema} ${libclangCodeGen} ${libclangAnalysis} ${libclangRewrite} ${libclangEdit} ${libclangAST} ${libclangLex} ${libclangBasic}) endif() # prune unused llvm static library stuff when linking into the new .so set(_exclude_flags) foreach(_lib ${clang_libs}) get_filename_component(_lib ${_lib} NAME) set(_exclude_flags "${_exclude_flags} -Wl,--exclude-libs=${_lib}") endforeach(_lib) set(clang_lib_exclude_flags "${_exclude_flags}") set(_exclude_flags) foreach(_lib ${llvm_libs}) get_filename_component(_lib ${_lib} NAME) set(_exclude_flags "${_exclude_flags} -Wl,--exclude-libs=lib${_lib}.a") endforeach(_lib) set(llvm_lib_exclude_flags "${_exclude_flags}")