Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

llvmPackages: how to include dynamic libraries only? (in a closure) #230616

Open
inclyc opened this issue May 8, 2023 · 2 comments
Open

llvmPackages: how to include dynamic libraries only? (in a closure) #230616

inclyc opened this issue May 8, 2023 · 2 comments
Labels

Comments

@inclyc
Copy link
Member

inclyc commented May 8, 2023

Describe the bug

Recently I'm working on a project depends on llvmPackages, and want to package it into a standalone container (to release). However, looks like llvmPackages_*.llvm.libs is coupled with dynamic and static libraries, which significantly increases the closure size :( . Is there anyway to declare that the derivation only depends on llvm dynamic libraries only? e.g. libLLVM-15.so.

Steps To Reproduce

Steps to reproduce the behavior:

[user@system:~]$ ls `nix eval --raw nixpkgs#llvmPackages_15.llvm.lib`/lib
LLVMPolly.so                    libLLVMAsmParser.a          libLLVMExegesisMips.a         libLLVMMCA.a                  libLLVMPowerPCInfo.a          libLLVMVEDisassembler.a
LLVMgold.so                     libLLVMAsmPrinter.a         libLLVMExegesisPowerPC.a      libLLVMMCDisassembler.a       libLLVMProfileData.a          libLLVMVEInfo.a
libLLVM-15.0.7.so               libLLVMBPFAsmParser.a       libLLVMExegesisX86.a          libLLVMMCJIT.a                libLLVMRISCVAsmParser.a       libLLVMVectorize.a
libLLVM-15.so                   libLLVMBPFCodeGen.a         libLLVMExtensions.a           libLLVMMCParser.a             libLLVMRISCVCodeGen.a         libLLVMWebAssemblyAsmParser.a
libLLVM.so                      libLLVMBPFDesc.a            libLLVMFileCheck.a            libLLVMMIRParser.a            libLLVMRISCVDesc.a            libLLVMWebAssemblyCodeGen.a
libLLVMAArch64AsmParser.a       libLLVMBPFDisassembler.a    libLLVMFrontendOpenACC.a      libLLVMMSP430AsmParser.a      libLLVMRISCVDisassembler.a    libLLVMWebAssemblyDesc.a
libLLVMAArch64CodeGen.a         libLLVMBPFInfo.a            libLLVMFrontendOpenMP.a       libLLVMMSP430CodeGen.a        libLLVMRISCVInfo.a            libLLVMWebAssemblyDisassembler.a
libLLVMAArch64Desc.a            libLLVMBinaryFormat.a       libLLVMFuzzMutate.a           libLLVMMSP430Desc.a           libLLVMRemarks.a              libLLVMWebAssemblyInfo.a
libLLVMAArch64Disassembler.a    libLLVMBitReader.a          libLLVMFuzzerCLI.a            libLLVMMSP430Disassembler.a   libLLVMRuntimeDyld.a          libLLVMWebAssemblyUtils.a
libLLVMAArch64Info.a            libLLVMBitWriter.a          libLLVMGlobalISel.a           libLLVMMSP430Info.a           libLLVMScalarOpts.a           libLLVMWindowsDriver.a
libLLVMAArch64Utils.a           libLLVMBitstreamReader.a    libLLVMHexagonAsmParser.a     libLLVMMipsAsmParser.a        libLLVMSelectionDAG.a         libLLVMWindowsManifest.a
libLLVMAMDGPUAsmParser.a        libLLVMCFGuard.a            libLLVMHexagonCodeGen.a       libLLVMMipsCodeGen.a          libLLVMSparcAsmParser.a       libLLVMX86AsmParser.a
libLLVMAMDGPUCodeGen.a          libLLVMCFIVerify.a          libLLVMHexagonDesc.a          libLLVMMipsDesc.a             libLLVMSparcCodeGen.a         libLLVMX86CodeGen.a
libLLVMAMDGPUDesc.a             libLLVMCodeGen.a            libLLVMHexagonDisassembler.a  libLLVMMipsDisassembler.a     libLLVMSparcDesc.a            libLLVMX86Desc.a
libLLVMAMDGPUDisassembler.a     libLLVMCore.a               libLLVMHexagonInfo.a          libLLVMMipsInfo.a             libLLVMSparcDisassembler.a    libLLVMX86Disassembler.a
libLLVMAMDGPUInfo.a             libLLVMCoroutines.a         libLLVMIRReader.a             libLLVMNVPTXCodeGen.a         libLLVMSparcInfo.a            libLLVMX86Info.a
libLLVMAMDGPUTargetMCA.a        libLLVMCoverage.a           libLLVMInstCombine.a          libLLVMNVPTXDesc.a            libLLVMSupport.a              libLLVMX86TargetMCA.a
libLLVMAMDGPUUtils.a            libLLVMDWARFLinker.a        libLLVMInstrumentation.a      libLLVMNVPTXInfo.a            libLLVMSymbolize.a            libLLVMXCoreCodeGen.a
libLLVMARMAsmParser.a           libLLVMDWP.a                libLLVMInterfaceStub.a        libLLVMObjCARCOpts.a          libLLVMSystemZAsmParser.a     libLLVMXCoreDesc.a
libLLVMARMCodeGen.a             libLLVMDebugInfoCodeView.a  libLLVMInterpreter.a          libLLVMObjCopy.a              libLLVMSystemZCodeGen.a       libLLVMXCoreDisassembler.a
libLLVMARMDesc.a                libLLVMDebugInfoDWARF.a     libLLVMJITLink.a              libLLVMObject.a               libLLVMSystemZDesc.a          libLLVMXCoreInfo.a
libLLVMARMDisassembler.a        libLLVMDebugInfoGSYM.a      libLLVMLTO.a                  libLLVMObjectYAML.a           libLLVMSystemZDisassembler.a  libLLVMXRay.a
libLLVMARMInfo.a                libLLVMDebugInfoMSF.a       libLLVMLanaiAsmParser.a       libLLVMOption.a               libLLVMSystemZInfo.a          libLLVMipo.a
libLLVMARMUtils.a               libLLVMDebugInfoPDB.a       libLLVMLanaiCodeGen.a         libLLVMOrcJIT.a               libLLVMTableGen.a             libLTO.so
libLLVMAVRAsmParser.a           libLLVMDebuginfod.a         libLLVMLanaiDesc.a            libLLVMOrcShared.a            libLLVMTableGenGlobalISel.a   libLTO.so.15
libLLVMAVRCodeGen.a             libLLVMDemangle.a           libLLVMLanaiDisassembler.a    libLLVMOrcTargetProcess.a     libLLVMTarget.a               libPolly.a
libLLVMAVRDesc.a                libLLVMDiff.a               libLLVMLanaiInfo.a            libLLVMPasses.a               libLLVMTextAPI.a              libPollyISL.a
libLLVMAVRDisassembler.a        libLLVMDlltoolDriver.a      libLLVMLibDriver.a            libLLVMPowerPCAsmParser.a     libLLVMTransformUtils.a       libRemarks.so
libLLVMAVRInfo.a                libLLVMExecutionEngine.a    libLLVMLineEditor.a           libLLVMPowerPCCodeGen.a       libLLVMVEAsmParser.a          libRemarks.so.15
libLLVMAggressiveInstCombine.a  libLLVMExegesis.a           libLLVMLinker.a               libLLVMPowerPCDesc.a          libLLVMVECodeGen.a
libLLVMAnalysis.a               libLLVMExegesisAArch64.a    libLLVMMC.a                   libLLVMPowerPCDisassembler.a  libLLVMVEDesc.a

Expected behavior

Anyway to include dynamic libraries only?

Notify maintainers

@fpletz @Ericson2314 @sternenseemann @rrbutani

Metadata

[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 6.2.13, NixOS, 23.05 (Stoat), 23.05.20230502.1a411f2`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.15.0`
 - channels(root): `"nixos"`
 - channels(lyc): `"nixpkgs"`
 - nixpkgs: `/home/lyc/.nix-defexpr/channels/nixpkgs`
@rrbutani
Copy link
Contributor

rrbutani commented May 8, 2023

Related: #164141, #162607


#162607 addresses this issue but it was reverted in #178007; as @sternenseemann noted, we'd want to have LLVM install the static libraries in a separate location rather than moving them after the fact.

@rrbutani
Copy link
Contributor

rrbutani commented May 8, 2023

I'm not super familiar with CMake but I think modifying this install in add_llvm_library would be a good place to start (i.e. introducing a CMAKE_INSTALL_LIBDIR_STATIC that's defaulted to CMAKE_INSTALL_LIBDIR, using SHARED to select the right install location), though I may be misunderstanding how add_llvm_library interacts with static libs.

Unfortunately I don't have the bandwidth to pursue this at the moment but @inclyc if you're interested in looking into this I'm happy to try to help debug stuff and to answer questions!


Alternatively if you're willing to rebuild stuff adding -DBUILD_SHARED_LIBS to the LLVM package instead of LLVM_LINK_LLVM_DYLIB (i.e. not building the static libraries) may solve your problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants