Skip to content

Instantly share code, notes, and snippets.

@stellaraccident
Last active February 7, 2021 05:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stellaraccident/47b3ed28b8134bb0b6db2afbec7fc789 to your computer and use it in GitHub Desktop.
Save stellaraccident/47b3ed28b8134bb0b6db2afbec7fc789 to your computer and use it in GitHub Desktop.
LLVM Component Refactor TODO
File sizes on Linux x64 Release mode (not bundling into a monolithic libLLVM.so):
`lib/`:
```
28K lib/BugpointPasses.so 28K lib/Bye.so 16K lib/LLVMHello.so 8.0K lib/libEngine.so 116K lib/libLLVMAggressiveInstCombine.so 7.0M lib/libLLVMAnalysis.so 624K lib/libLLVMAsmParser.so 1.5M lib/libLLVMAsmPrinter.so
160K lib/libLLVMBinaryFormat.so
624K lib/libLLVMBitReader.so
472K lib/libLLVMBitWriter.so
52K lib/libLLVMBitstreamReader.so
36K lib/libLLVMCFGuard.so
8.7M lib/libLLVMCodeGen.so
5.2M lib/libLLVMCore.so
472K lib/libLLVMCoroutines.so
320K lib/libLLVMCoverage.so
300K lib/libLLVMDWARFLinker.so
912K lib/libLLVMDebugInfoCodeView.so
760K lib/libLLVMDebugInfoDWARF.so
188K lib/libLLVMDebugInfoGSYM.so
96K lib/libLLVMDebugInfoMSF.so
1.2M lib/libLLVMDebugInfoPDB.so
340K lib/libLLVMDemangle.so
24K lib/libLLVMDlltoolDriver.so
192K lib/libLLVMExecutionEngine.so
8.0K lib/libLLVMExtensions.so
200K lib/libLLVMFileCheck.so
16K lib/libLLVMFrontendOpenACC.so
256K lib/libLLVMFrontendOpenMP.so
172K lib/libLLVMFuzzMutate.so
1.4M lib/libLLVMGlobalISel.so
8.0K lib/libLLVMHelloNew.so
3.6M lib/libLLVMIPO.so
32K lib/libLLVMIRReader.so
1.6M lib/libLLVMInstCombine.so
1.6M lib/libLLVMInstrumentation.so
128K lib/libLLVMInterfaceStub.so
240K lib/libLLVMInterpreter.so
468K lib/libLLVMJITLink.so
556K lib/libLLVMLTO.so
60K lib/libLLVMLibDriver.so
16K lib/libLLVMLineEditor.so
216K lib/libLLVMLinker.so
1.3M lib/libLLVMMC.so
232K lib/libLLVMMCA.so
32K lib/libLLVMMCDisassembler.so
80K lib/libLLVMMCJIT.so
584K lib/libLLVMMCParser.so
336K lib/libLLVMMIRParser.so
260K lib/libLLVMObjCARC.so
1.6M lib/libLLVMObject.so
1.9M lib/libLLVMObjectYAML.so
92K lib/libLLVMOption.so
1.6M lib/libLLVMOrcJIT.so
28K lib/libLLVMOrcShared.so
16K lib/libLLVMOrcTargetProcess.so
2.2M lib/libLLVMPasses.so
520K lib/libLLVMProfileData.so
240K lib/libLLVMRemarks.so
780K lib/libLLVMRuntimeDyld.so
5.2M lib/libLLVMScalar.so
4.0M lib/libLLVMSelectionDAG.so
2.4M lib/libLLVMSupport.so
128K lib/libLLVMSymbolize.so
536K lib/libLLVMTableGen.so
72K lib/libLLVMTarget.so
11M lib/libLLVMTargetX86.so
208K lib/libLLVMTextAPI.so
3.1M lib/libLLVMTransformUtils.so
1.8M lib/libLLVMVectorize.so
16K lib/libLLVMWindowsManifest.so
284K lib/libLLVMXRay.so
```
`bin/`:
```
636K bin/FileCheck
512K bin/bugpoint
8.0K bin/count
324K bin/dsymutil
116K bin/llc
356K bin/lli
504K bin/lli-child-target
20K bin/llvm-PerfectShuffle
0 bin/llvm-addr2line
96K bin/llvm-ar
36K bin/llvm-as
28K bin/llvm-bcanalyzer
0 bin/llvm-bitcode-strip
112K bin/llvm-c-test
40K bin/llvm-cat
144K bin/llvm-cfi-verify
56K bin/llvm-config
388K bin/llvm-cov
40K bin/llvm-cvtres
92K bin/llvm-cxxdump
44K bin/llvm-cxxfilt
48K bin/llvm-cxxmap
100K bin/llvm-diff
52K bin/llvm-dis
0 bin/llvm-dlltool
168K bin/llvm-dwarfdump
108K bin/llvm-dwp
56K bin/llvm-elfabi
33M bin/llvm-exegesis
64K bin/llvm-extract
88K bin/llvm-gsymutil
72K bin/llvm-ifs
0 bin/llvm-install-name-tool
36K bin/llvm-isel-fuzzer
8.0K bin/llvm-itanium-demangle-fuzzer
628K bin/llvm-jitlink
1.5M bin/llvm-jitlink-executor
0 bin/llvm-lib
108K bin/llvm-libtool-darwin
80K bin/llvm-link
104K bin/llvm-lipo
4.0K bin/llvm-lit
16K bin/llvm-locstats
156K bin/llvm-lto
104K bin/llvm-lto2
104K bin/llvm-mc
216K bin/llvm-mca
8.0K bin/llvm-microsoft-demangle-fuzzer
56K bin/llvm-ml
32K bin/llvm-modextract
32K bin/llvm-mt
188K bin/llvm-nm
904K bin/llvm-objcopy
884K bin/llvm-objdump
76K bin/llvm-opt-fuzzer
68K bin/llvm-opt-report
1.2M bin/llvm-pdbutil
272K bin/llvm-profdata
220K bin/llvm-profgen
0 bin/llvm-ranlib
220K bin/llvm-rc
0 bin/llvm-readelf
2.2M bin/llvm-readobj
196K bin/llvm-reduce
136K bin/llvm-rtdyld
108K bin/llvm-size
8.0K bin/llvm-special-case-list-fuzzer
24K bin/llvm-split
68K bin/llvm-stress
40K bin/llvm-strings
0 bin/llvm-strip
64K bin/llvm-symbolizer
4.2M bin/llvm-tblgen
28K bin/llvm-undname
600K bin/llvm-xray
12K bin/llvm-yaml-numeric-parser-fuzzer
12K bin/llvm-yaml-parser-fuzzer
64K bin/mlir-capi-ir-test
12K bin/mlir-capi-pass-test
9.5M bin/mlir-cpu-runner
4.7M bin/mlir-edsc-builder-api-test
768K bin/mlir-linalg-ods-gen
18M bin/mlir-opt
11M bin/mlir-reduce
708K bin/mlir-sdbm-api-test
1.7M bin/mlir-tblgen
5.3M bin/mlir-translate
192K bin/not
7.5M bin/obj2yaml
380K bin/opt
152K bin/sancov
28K bin/sanstats
32K bin/split-file
72K bin/verify-uselistorder
416K bin/yaml-bench
2.4M bin/yaml2obj
```
  • LLVMSupport

    • Verify where LLVM_SYSTEM_LIBS property goes
    • Test z3 dep
  • Rename bare target components to LLVMTarget${t}

    • Verify that collapsing sub-target libraries is ok (works, but not sure how people feel)
    • Fix non-X86 target component names
    • Remove non-X86 internal circular references (flagged by cmake if you get it wrong)
  • LLVM_HAS_JIT handling (switch between jit and interpreter)

    • See fixups in LLVM-Build.cmake LLVMBuildResolveComponentsLink (deleted now)
  • LLVMBuildGenerateCFragment porting (see commented out at bottom of llvm/lib/CMakeLists.txt)

  • tools/llvm-config porting (tests currently failing)

  • Remove exceptions for improperly referenced components (quite a few references so just special casing to avoid ballooning one patch):

    • ScalarOpts -> Scalar
    • ObjCARCOpts -> ObjCARC
  • Scrub through necessary features in llvm_add_library and make sure that llvm_add_component_library is doing the right thing. Non exhaustive list:

    • RPath handling for install
    • SO_NAME/version symlinks
    • Entitlements
    • Externalized debug
  • Implement the existing libLLVM.so library redirection (i.e. to bundle multiple components together).

  • Look more closely at tools that can only be linked statically (llvm-exegesis uses library internals that are hidden in shared libraries, for example).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment