function get_links(package)
    local links = {
        "LLVMIRReader",
        "LLVMAsmParser",
        "LLVMExecutionEngine",
        "LLVMRuntimeDyld",
        "LLVMAsmPrinter",
        "LLVMDebugInfoDWARF",
        "LLVMGlobalISel",
        "LLVMSelectionDAG",
        "LLVMMCDisassembler",
        "LLVMPasses",
        "LLVMCodeGen",
        "LLVMipo",
        "LLVMBitWriter",
        "LLVMInstrumentation",
        "LLVMScalarOpts",
        "LLVMAggressiveInstCombine",
        "LLVMInstCombine",
        "LLVMVectorize",
        "LLVMTransformUtils",
        "LLVMTarget",
        "LLVMAnalysis",
        "LLVMProfileData",
        "LLVMObject",
        "LLVMBitReader",
        "LLVMCore",
        "LLVMRemarks",
        "LLVMBitstreamReader",
        "LLVMMCParser",
        "LLVMMC",
        "LLVMBinaryFormat",
        "LLVMDebugInfoCodeView",
        "LLVMSupport",
        "LLVMDemangle",
        "LLVMMIRParser",
        "LLVMCFGuard",
        "LLVMCFIVerify",
        "LLVMCoroutines",
        "LLVMCoverage",
        "LLVMDWARFLinker",
        "LLVMDWP",
        "LLVMDebugInfoGSYM",
        "LLVMDebugInfoMSF",
        "LLVMDebugInfoPDB",
        "LLVMDebuginfod",
        "LLVMDiff",
        "LLVMDlltoolDriver",
        "LLVMExegesis",
        "LLVMExtensions",
        "LLVMFileCheck",
        "LLVMFrontendOpenACC",
        "LLVMFrontendOpenMP",
        "LLVMFuzzMutate",
        "LLVMInterfaceStub",
        "LLVMInterpreter",
        "LLVMJITLink",
        "LLVMLTO",
        "LLVMLibDriver",
        "LLVMLineEditor",
        "LLVMLinker",
        "LLVMMCA",
        "LLVMMCJIT",
        "LLVMObjCARCOpts",
        "LLVMObjectYAML",
        "LLVMOption",
        "LLVMOrcJIT",
        "LLVMOrcShared",
        "LLVMOrcTargetProcess",
        "LLVMSymbolize",
        "LLVMTableGen",
        "LLVMTableGenGlobalISel",
        "LLVMTextAPI",
        "LLVMWindowsManifest",
        "LLVMXRay"
    }
    local links_arch
    if package:is_arch("x86_64", "i386", "x64", "x86") then
        links_arch = {
            "LLVMX86CodeGen",
            "LLVMX86Desc",
            "LLVMX86Info",
            "LLVMX86AsmParser",
            "LLVMX86Disassembler",
            "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
        links = table.join(links_arch, links)
    end
    return links
end

function main(package, component)
    component:add("links", get_links(package))
end