improve llvm to support libraries (#1807)
* improve llvm to support libraries * improve llvm fetchpull/1812/head
parent
4da5480eeb
commit
8fc3e5632a
6 changed files with 566 additions and 42 deletions
@ -0,0 +1,138 @@ |
||||
function get_links(package) |
||||
local links = { |
||||
"LLVMAggressiveInstCombine", |
||||
"LLVMAnalysis", |
||||
"LLVMAsmParser", |
||||
"LLVMAsmPrinter", |
||||
"LLVMBinaryFormat", |
||||
"LLVMBitReader", |
||||
"LLVMBitWriter", |
||||
"LLVMBitstreamReader", |
||||
"LLVMCFGuard", |
||||
"LLVMCFIVerify", |
||||
"LLVMCodeGen", |
||||
"LLVMCore", |
||||
"LLVMCoroutines", |
||||
"LLVMCoverage", |
||||
"LLVMDWARFLinker", |
||||
"LLVMDWP", |
||||
"LLVMDebugInfoCodeView", |
||||
"LLVMDebugInfoDWARF", |
||||
"LLVMDebugInfoGSYM", |
||||
"LLVMDebugInfoMSF", |
||||
"LLVMDebugInfoPDB", |
||||
"LLVMDebuginfod", |
||||
"LLVMDemangle", |
||||
"LLVMDiff", |
||||
"LLVMDlltoolDriver", |
||||
"LLVMExecutionEngine", |
||||
"LLVMExegesis", |
||||
"LLVMExtensions", |
||||
"LLVMFileCheck", |
||||
"LLVMFrontendOpenACC", |
||||
"LLVMFrontendOpenMP", |
||||
"LLVMFuzzMutate", |
||||
"LLVMGlobalISel", |
||||
"LLVMIRReader", |
||||
"LLVMInstCombine", |
||||
"LLVMInstrumentation", |
||||
"LLVMInterfaceStub", |
||||
"LLVMInterpreter", |
||||
"LLVMJITLink", |
||||
"LLVMLTO", |
||||
"LLVMLibDriver", |
||||
"LLVMLineEditor", |
||||
"LLVMLinker", |
||||
"LLVMMC", |
||||
"LLVMMCA", |
||||
"LLVMMCDisassembler", |
||||
"LLVMMCJIT", |
||||
"LLVMMCParser", |
||||
"LLVMMIRParser", |
||||
"LLVMObjCARCOpts", |
||||
"LLVMObject", |
||||
"LLVMObjectYAML", |
||||
"LLVMOption", |
||||
"LLVMOrcJIT", |
||||
"LLVMOrcShared", |
||||
"LLVMOrcTargetProcess", |
||||
"LLVMPasses", |
||||
"LLVMProfileData", |
||||
"LLVMRemarks", |
||||
"LLVMRuntimeDyld", |
||||
"LLVMScalarOpts", |
||||
"LLVMSelectionDAG", |
||||
"LLVMSupport", |
||||
"LLVMSymbolize", |
||||
"LLVMTableGen", |
||||
"LLVMTableGenGlobalISel", |
||||
"LLVMTarget", |
||||
"LLVMTextAPI", |
||||
"LLVMTransformUtils", |
||||
"LLVMVectorize", |
||||
"LLVMWindowsManifest", |
||||
"LLVMXRay", |
||||
"LLVMipo" |
||||
} |
||||
local links_arch |
||||
if package:is_arch("x86_64", "i386", "x64", "x86") then |
||||
links_arch = { |
||||
"LLVMX86AsmParser", |
||||
"LLVMX86CodeGen", |
||||
"LLVMX86Desc", |
||||
"LLVMX86Disassembler", |
||||
"LLVMX86Info", |
||||
"LLVMX86TargetMCA", |
||||
"LLVMExegesisX86"} |
||||
elseif package:is_arch("arm64") then |
||||
links_arch = { |
||||
"LLVMAArch64AsmParser", |
||||
"LLVMAArch64CodeGen", |
||||
"LLVMAArch64Desc", |
||||
"LLVMAArch64Disassembler", |
||||
"LLVMAArch64Info", |
||||
"LLVMAArch64Utils", |
||||
"LLVMExegesisAArch64"} |
||||
elseif package:is_arch("armv7") then |
||||
links_arch = { |
||||
"LLVMARMAsmParser", |
||||
"LLVMARMCodeGen", |
||||
"LLVMARMDesc", |
||||
"LLVMARMDisassembler", |
||||
"LLVMARMInfo", |
||||
"LLVMARMUtils"} |
||||
elseif package:is_arch("mips", "mips64") then |
||||
links_arch = { |
||||
"LLVMMipsAsmParser", |
||||
"LLVMMipsCodeGen", |
||||
"LLVMMipsDesc", |
||||
"LLVMMipsDisassembler", |
||||
"LLVMMipsInfo", |
||||
"LLVMExegesisMips"} |
||||
elseif package:is_arch("wasm32") then |
||||
links_arch = { |
||||
"LLVMWebAssemblyAsmParser", |
||||
"LLVMWebAssemblyCodeGen", |
||||
"LLVMWebAssemblyDesc", |
||||
"LLVMWebAssemblyDisassembler", |
||||
"LLVMWebAssemblyInfo", |
||||
"LLVMWebAssemblyUtils"} |
||||
elseif package:is_arch("riscv32") then |
||||
links_arch = { |
||||
"LLVMRISCVAsmParser", |
||||
"LLVMRISCVCodeGen", |
||||
"LLVMRISCVDesc", |
||||
"LLVMRISCVDisassembler", |
||||
"LLVMRISCVInfo"} |
||||
end |
||||
if links_arch then |
||||
table.join2(links, links_arch) |
||||
end |
||||
return links |
||||
end |
||||
|
||||
function main(package, component) |
||||
component:add("links", get_links(package)) |
||||
end |
||||
|
||||
|
@ -0,0 +1,94 @@ |
||||
function get_links(package) |
||||
local links = { |
||||
"clang-cpp", |
||||
"clang", |
||||
"clangAPINotes", |
||||
"clangARCMigrate", |
||||
"clangAST", |
||||
"clangASTMatchers", |
||||
"clangAnalysis", |
||||
"clangAnalysisFlowSensitive", |
||||
"clangApplyReplacements", |
||||
"clangBasic", |
||||
"clangChangeNamespace", |
||||
"clangCodeGen", |
||||
"clangCrossTU", |
||||
"clangDaemon", |
||||
"clangDaemonTweaks", |
||||
"clangDependencyScanning", |
||||
"clangDirectoryWatcher", |
||||
"clangDoc", |
||||
"clangDriver", |
||||
"clangDynamicASTMatchers", |
||||
"clangEdit", |
||||
"clangFormat", |
||||
"clangFrontend", |
||||
"clangFrontendTool", |
||||
"clangHandleCXX", |
||||
"clangHandleLLVM", |
||||
"clangIncludeFixer", |
||||
"clangIncludeFixerPlugin", |
||||
"clangIndex", |
||||
"clangIndexSerialization", |
||||
"clangInterpreter", |
||||
"clangLex", |
||||
"clangMove", |
||||
"clangParse", |
||||
"clangQuery", |
||||
"clangReorderFields", |
||||
"clangRewrite", |
||||
"clangRewriteFrontend", |
||||
"clangSema", |
||||
"clangSerialization", |
||||
"clangStaticAnalyzerCheckers", |
||||
"clangStaticAnalyzerCore", |
||||
"clangStaticAnalyzerFrontend", |
||||
"clangTesting", |
||||
"clangTidy", |
||||
"clangTidyAbseilModule", |
||||
"clangTidyAlteraModule", |
||||
"clangTidyAndroidModule", |
||||
"clangTidyBoostModule", |
||||
"clangTidyBugproneModule", |
||||
"clangTidyCERTModule", |
||||
"clangTidyConcurrencyModule", |
||||
"clangTidyCppCoreGuidelinesModule", |
||||
"clangTidyDarwinModule", |
||||
"clangTidyFuchsiaModule", |
||||
"clangTidyGoogleModule", |
||||
"clangTidyHICPPModule", |
||||
"clangTidyLLVMLibcModule", |
||||
"clangTidyLLVMModule", |
||||
"clangTidyLinuxKernelModule", |
||||
"clangTidyMPIModule", |
||||
"clangTidyMain", |
||||
"clangTidyMiscModule", |
||||
"clangTidyModernizeModule", |
||||
"clangTidyObjCModule", |
||||
"clangTidyOpenMPModule", |
||||
"clangTidyPerformanceModule", |
||||
"clangTidyPlugin", |
||||
"clangTidyPortabilityModule", |
||||
"clangTidyReadabilityModule", |
||||
"clangTidyUtils", |
||||
"clangTidyZirconModule", |
||||
"clangTooling", |
||||
"clangToolingASTDiff", |
||||
"clangToolingCore", |
||||
"clangToolingInclusions", |
||||
"clangToolingRefactoring", |
||||
"clangToolingSyntax", |
||||
"clangTransformer", |
||||
"clangdRemoteIndex", |
||||
"clangdSupport", |
||||
"clangdXpcJsonConversions", |
||||
"clangdXpcTransport" |
||||
} |
||||
return links |
||||
end |
||||
|
||||
function main(package, component) |
||||
component:add("links", get_links(package)) |
||||
end |
||||
|
||||
|
@ -0,0 +1,12 @@ |
||||
function get_links(package) |
||||
local links = { |
||||
"unwind" |
||||
} |
||||
return links |
||||
end |
||||
|
||||
function main(package, component) |
||||
component:add("links", get_links(package)) |
||||
end |
||||
|
||||
|
@ -0,0 +1,223 @@ |
||||
function get_links(package) |
||||
local links = { |
||||
"MLIRAMX", |
||||
"MLIRAMXToLLVMIRTranslation", |
||||
"MLIRAMXTransforms", |
||||
"MLIRAffine", |
||||
"MLIRAffineAnalysis", |
||||
"MLIRAffineBufferizableOpInterfaceImpl", |
||||
"MLIRAffineToStandard", |
||||
"MLIRAffineTransforms", |
||||
"MLIRAffineTransformsTestPasses", |
||||
"MLIRAffineUtils", |
||||
"MLIRAnalysis", |
||||
"MLIRArithmetic", |
||||
"MLIRArithmeticToLLVM", |
||||
"MLIRArithmeticToSPIRV", |
||||
"MLIRArithmeticTransforms", |
||||
"MLIRAsync", |
||||
"MLIRAsyncToLLVM", |
||||
"MLIRAsyncTransforms", |
||||
"MLIRBufferization", |
||||
"MLIRBufferizationToMemRef", |
||||
"MLIRBufferizationTransforms", |
||||
"MLIRCAPIAsync", |
||||
"MLIRCAPIConversion", |
||||
"MLIRCAPIDebug", |
||||
"MLIRCAPIExecutionEngine", |
||||
"MLIRCAPIGPU", |
||||
"MLIRCAPIIR", |
||||
"MLIRCAPIInterfaces", |
||||
"MLIRCAPILLVM", |
||||
"MLIRCAPILinalg", |
||||
"MLIRCAPIPDL", |
||||
"MLIRCAPIQuant", |
||||
"MLIRCAPIRegistration", |
||||
"MLIRCAPISCF", |
||||
"MLIRCAPIShape", |
||||
"MLIRCAPISparseTensor", |
||||
"MLIRCAPIStandard", |
||||
"MLIRCAPITensor", |
||||
"MLIRCAPITransforms", |
||||
"MLIRCallInterfaces", |
||||
"MLIRCastInterfaces", |
||||
"MLIRComplex", |
||||
"MLIRComplexToLLVM", |
||||
"MLIRComplexToStandard", |
||||
"MLIRControlFlowInterfaces", |
||||
"MLIRCopyOpInterface", |
||||
"MLIRDLTI", |
||||
"MLIRDLTITestPasses", |
||||
"MLIRDataLayoutInterfaces", |
||||
"MLIRDerivedAttributeOpInterface", |
||||
"MLIRDialect", |
||||
"MLIRDialectUtils", |
||||
"MLIREmitC", |
||||
"MLIRExecutionEngine", |
||||
"MLIRGPUOps", |
||||
"MLIRGPUTestPasses", |
||||
"MLIRGPUToGPURuntimeTransforms", |
||||
"MLIRGPUToNVVMTransforms", |
||||
"MLIRGPUToROCDLTransforms", |
||||
"MLIRGPUToSPIRV", |
||||
"MLIRGPUToVulkanTransforms", |
||||
"MLIRGPUTransforms", |
||||
"MLIRIR", |
||||
"MLIRInferTypeOpInterface", |
||||
"MLIRJitRunner", |
||||
"MLIRLLVMCommonConversion", |
||||
"MLIRLLVMIR", |
||||
"MLIRLLVMIRTransforms", |
||||
"MLIRLLVMToLLVMIRTranslation", |
||||
"MLIRLinalg", |
||||
"MLIRLinalgAnalysis", |
||||
"MLIRLinalgBufferizableOpInterfaceImpl", |
||||
"MLIRLinalgTestPasses", |
||||
"MLIRLinalgToLLVM", |
||||
"MLIRLinalgToSPIRV", |
||||
"MLIRLinalgToStandard", |
||||
"MLIRLinalgTransforms", |
||||
"MLIRLinalgUtils", |
||||
"MLIRLoopLikeInterface", |
||||
"MLIRLspServerLib", |
||||
"MLIRMath", |
||||
"MLIRMathTestPasses", |
||||
"MLIRMathToLLVM", |
||||
"MLIRMathToLibm", |
||||
"MLIRMathToSPIRV", |
||||
"MLIRMathTransforms", |
||||
"MLIRMemRef", |
||||
"MLIRMemRefTestPasses", |
||||
"MLIRMemRefToLLVM", |
||||
"MLIRMemRefToSPIRV", |
||||
"MLIRMemRefTransforms", |
||||
"MLIRMemRefUtils", |
||||
"MLIRMlirOptMain", |
||||
"MLIRModuleBufferization", |
||||
"MLIRNVVMIR", |
||||
"MLIRNVVMToLLVMIRTranslation", |
||||
"MLIROpenACC", |
||||
"MLIROpenACCToLLVM", |
||||
"MLIROpenACCToLLVMIRTranslation", |
||||
"MLIROpenACCToSCF", |
||||
"MLIROpenMP", |
||||
"MLIROpenMPToLLVM", |
||||
"MLIROpenMPToLLVMIRTranslation", |
||||
"MLIROptLib", |
||||
"MLIRPDL", |
||||
"MLIRPDLInterp", |
||||
"MLIRPDLLAST", |
||||
"MLIRPDLLParser", |
||||
"MLIRPDLToPDLInterp", |
||||
"MLIRParser", |
||||
"MLIRPass", |
||||
"MLIRPresburger", |
||||
"MLIRQuant", |
||||
"MLIRROCDLIR", |
||||
"MLIRROCDLToLLVMIRTranslation", |
||||
"MLIRReconcileUnrealizedCasts", |
||||
"MLIRReduce", |
||||
"MLIRReduceLib", |
||||
"MLIRRewrite", |
||||
"MLIRSCF", |
||||
"MLIRSCFTestPasses", |
||||
"MLIRSCFToGPU", |
||||
"MLIRSCFToOpenMP", |
||||
"MLIRSCFToSPIRV", |
||||
"MLIRSCFToStandard", |
||||
"MLIRSCFTransforms", |
||||
"MLIRSCFUtils", |
||||
"MLIRSPIRV", |
||||
"MLIRSPIRVBinaryUtils", |
||||
"MLIRSPIRVConversion", |
||||
"MLIRSPIRVDeserialization", |
||||
"MLIRSPIRVModuleCombiner", |
||||
"MLIRSPIRVSerialization", |
||||
"MLIRSPIRVTestPasses", |
||||
"MLIRSPIRVToLLVM", |
||||
"MLIRSPIRVTransforms", |
||||
"MLIRSPIRVTranslateRegistration", |
||||
"MLIRSPIRVUtils", |
||||
"MLIRShape", |
||||
"MLIRShapeOpsTransforms", |
||||
"MLIRShapeTestPasses", |
||||
"MLIRShapeToStandard", |
||||
"MLIRSideEffectInterfaces", |
||||
"MLIRSparseTensor", |
||||
"MLIRSparseTensorPipelines", |
||||
"MLIRSparseTensorTransforms", |
||||
"MLIRSparseTensorUtils", |
||||
"MLIRStandard", |
||||
"MLIRStandardOpsTestPasses", |
||||
"MLIRStandardOpsTransforms", |
||||
"MLIRStandardToLLVM", |
||||
"MLIRStandardToSPIRV", |
||||
"MLIRSupport", |
||||
"MLIRSupportIndentedOstream", |
||||
"MLIRTableGen", |
||||
"MLIRTargetCpp", |
||||
"MLIRTargetLLVMIRExport", |
||||
"MLIRTargetLLVMIRImport", |
||||
"MLIRTensor", |
||||
"MLIRTensorInferTypeOpInterfaceImpl", |
||||
"MLIRTensorTilingInterfaceImpl", |
||||
"MLIRTensorTransforms", |
||||
"MLIRTensorUtils", |
||||
"MLIRTestAnalysis", |
||||
"MLIRTestDialect", |
||||
"MLIRTestIR", |
||||
"MLIRTestPass", |
||||
"MLIRTestReducer", |
||||
"MLIRTestRewrite", |
||||
"MLIRTestStandardToLLVM", |
||||
"MLIRTestTransforms", |
||||
"MLIRTilingInterface", |
||||
"MLIRToLLVMIRTranslationRegistration", |
||||
"MLIRTosa", |
||||
"MLIRTosaTestPasses", |
||||
"MLIRTosaToLinalg", |
||||
"MLIRTosaToSCF", |
||||
"MLIRTosaToStandard", |
||||
"MLIRTosaTransforms", |
||||
"MLIRTransformUtils", |
||||
"MLIRTransforms", |
||||
"MLIRTranslation", |
||||
"MLIRVector", |
||||
"MLIRVectorInterfaces", |
||||
"MLIRVectorTestPasses", |
||||
"MLIRVectorToGPU", |
||||
"MLIRVectorToLLVM", |
||||
"MLIRVectorToROCDL", |
||||
"MLIRVectorToSCF", |
||||
"MLIRVectorToSPIRV", |
||||
"MLIRVectorTransforms", |
||||
"MLIRVectorUtils", |
||||
"MLIRViewLikeInterface" |
||||
} |
||||
|
||||
local links_arch |
||||
if package:is_arch("x86_64", "i386", "x64", "x86") then |
||||
links_arch = { |
||||
"MLIRX86Vector", |
||||
"MLIRX86VectorToLLVMIRTranslation", |
||||
"MLIRX86VectorTransforms"} |
||||
elseif package:is_arch("arm64", "armv7") then |
||||
links_arch = { |
||||
"MLIRArmNeon", |
||||
"MLIRArmNeon2dToIntr", |
||||
"MLIRArmNeonToLLVMIRTranslation", |
||||
"MLIRArmSVE", |
||||
"MLIRArmSVEToLLVMIRTranslation", |
||||
"MLIRArmSVETransforms"} |
||||
end |
||||
if links_arch then |
||||
table.join2(links, links_arch) |
||||
end |
||||
return links |
||||
end |
||||
|
||||
function main(package, component) |
||||
component:add("links", get_links(package)) |
||||
end |
||||
|
||||
|
@ -0,0 +1,55 @@ |
||||
import("lib.detect.find_tool") |
||||
import("core.project.target") |
||||
|
||||
function main(package, opt) |
||||
if opt.system then |
||||
local llvm_config = "llvm-config" |
||||
if package:is_plat("macosx") then |
||||
local llvm = try {function () return os.iorunv("brew", {"--prefix", "llvm"}) end} |
||||
if llvm then |
||||
local ret = find_tool("llvm-config", {paths = path.join(llvm:trim(), "bin")}) |
||||
if ret then |
||||
llvm_config = ret.program |
||||
end |
||||
end |
||||
end |
||||
local version = try {function() return os.iorunv(llvm_config, {"--version"}) end} |
||||
if version then |
||||
version = version:trim() |
||||
end |
||||
if package:is_toolchain() then |
||||
if version then |
||||
return {version = version} |
||||
end |
||||
else |
||||
local linkdir = try {function() return os.iorunv(llvm_config, {"--libdir"}) end} |
||||
local includedir = try {function() return os.iorunv(llvm_config, {"--includedir"}) end} |
||||
if linkdir and includedir then |
||||
linkdir = linkdir:trim() |
||||
includedir = includedir:trim() |
||||
local result = {version = version, linkdirs = linkdir, includedirs = includedir} |
||||
local components = {} |
||||
for _, file in ipairs(os.files(path.join(os.scriptdir(), "components", "*.lua"))) do |
||||
local name = path.basename(file) |
||||
local links = {} |
||||
for _, link in ipairs(import("components." .. name).get_links(package)) do |
||||
local filename_static = target.filename(link, "static", {plat = package:plat(), arch = package:arch()}) |
||||
local filename_shared = target.filename(link, "shared", {plat = package:plat(), arch = package:arch()}) |
||||
if os.isfile(path.join(linkdir, filename_static)) or |
||||
os.isfile(path.join(linkdir, filename_shared)) then |
||||
table.insert(links, link) |
||||
end |
||||
end |
||||
if #links > 0 then |
||||
components[name] = components[name] or {} |
||||
components[name].links = links |
||||
end |
||||
end |
||||
components.__base = {linkdirs = linkdir, includedirs = includedir} |
||||
result.components = components |
||||
return result |
||||
end |
||||
end |
||||
end |
||||
end |
||||
|
Loading…
Reference in new issue