Narzędzia projektu LLVM
2022-10-27
Za angielską wikipedią: LLVM jest zestawem narzędzi i kompilatorów, które mogą być wykorzystane do utworzenia części front-endowej dowolnego języka programowania oraz back-endu dowolnej architektury zestawu instrukcji (ang. instruction set architecture). Sercem projektu jest IR reprezentacja pośrednia (ang. intermediate representation), która może służyć jako back-end dla wielu języów programowania. Kod może być napisany w Haskellu, C, C++ czy Fortranie, a część front endowa, która odpowiada za analizę leksykalną, przetłumaczy kod do takiej samej reprezentacji pośredniej IR.
Głównymi aplikacjami pakietu LLVM są kompilatory języka C i C++ odpowiednio clang i clang++.
Od wersji 13 LLVM zawiera w swoim pakiecie m. in. linker zgodny z linkerem pakietu Visual Studio: "lld-link". Linker zachowuje zgodność listy argumentów i w przyszłości może pomóc w usunięciu zależności Windowsowej części projektu od pakietu Visual Studio.
Poza linkerem pakiet zawiera również sporą listę narzędzi (alfabetycznie):
- clang-apply-replacements - narzędzie wspierające refaktoring przy użyciu clang-tidy.
- clang-change-namespace - narzędzie do zmiany namespaceów klas i funkcji.
- clang-check - narzędzie do podstawowej weryfikacji kodu i wylistowania AST.
- clang-cl - sterownik kompilatora (ang. compiler driver). Kompatybilny z Microsoftowym cl.exe.
- clang-cpp - kompilator clang.
- clangd - serwer języka (ang. language server) C/C++.
- clang-doc - narzędzie do generowania dokumentacji z kodu źródłowego i komentarzy.
- clang-extdef-mapping - narzędzie wykorzystywane w analizie Cross Translation Unit (CTU).
- clang-format - narzędzie do formatowania kodu.
- clang-include-fixer - narzędzie do automatycznego dodawania #include dla brakujących symboli w jednostce translacji.
- clang-linker-wrapper - linker działający na danych utworzonych przez Clang Offload Packager.
- clang-move - narzędzie refaktoryzacyjne służące do ekstrakcji definicji klasy do nowego pliku.
- clang-nvlink-wrapper - wrapper na narzędzie nvlink. Dodane do LLVM ponieważ nvlink nie wspiera bezpośrednio liknowania plików archiwów.
- clang-offload-bundler - narzędzie łączy/dzieli pliki zbudowane dla różnych targetów odnoszących się do tego samego pliku źródłowego.
- clang-offload-wrapper - narzędzie zastępujące skrypty linkujące OpenMP.
- clang-query - narzędie do wylistowania clang-query.
- clang-refactor - narzędzie wspomagające refaktoryzację kodu.
- clang-rename - narzędzie wspomagające refaktoryzację kodu służące do zmiany nazw w kodzie źródłowym.
- clang-reorder-fields - narzędzie służące do zmiany kolejności pól struktur lub klas.
- clang-repl - interpreter C++.
- clang-scan-deps - narzędzie do skanowania zależności modułów.
- clang-tidy - linter wspomagający diagnostykę i naprawę typowych błędów w kodzie.
- diagtool - narzędzie do pracy z diagnostyką clang.
- find-all-symbols - narzędzie do tworzenie bazy danych symboli w formacie YAML.
- ld.lld - linker LLVM.
- lld - generyczny driver linkera LLVM.
- lldb - LLVM debugger.
- lldb-argdumper - narzędzie do wylistowania argumentów w formacie JSON.
- lldb-instr - narzędzie do generowania makr dla zrębu instrumentalizacji LLDB (ang. LLDB instrumentation framework).
- lldb-server - serwer LLVM debuggera. Serwer uruchamia i monitoruje debugowany program, a klient dokonuje interakcji za pomocą klienta uruchomionego zdalnie lub lokalnie.
- lldb-vscode - narzędzie które implementuje Visual Studio Code Debug API.
- lld-link - linker dla systemu operacyjnego Microsoft Windows.
- llvm-ar - archiwer. Odpowiednik Unixowej komendy ar. Komenda potrafi odczytywać archiwa w formacie SVR4, GNU, BSD, Big Archive i Darwin oraz zapisywać w formacie GNU, BSD, Big Archive i Darwin.
- llvm-as - asembler LLVM. Komenda tłumaczy kod zapisany w asemblerze LLVM i tłumaczy go do formatu binarnego LLVM.
- llvm-bcanalyzer - narzędzie do analizy plików bitcode. Narzędzie czyta plik bitcode (np. wygenerowany przez llvm-as) i tworzy raport statystyczny zawartości pliku.
- llvm-bitcode-strip - narzędzie do usuwania sekcji z plików bitcode (ang. bitcode files).
- llvm-cat - łączy pliki bitcode (ang. bitcode files).
- llvm-cfi-verify - narzędzie do weryfikacji mechanizmu zabezpieczeń Control Flow Integrity (CFI). Narzędzie zwraca informację, czy pośredni przepływ sterowania operacji jest chroniony przez CFI.
- llvm-config - narzędzie zwraca konfiguracje potrzebne do kompilacji programów, które używają LLVM.
- llvm-cov - narzędzie pokazuje informacje związane z pokryciem kodu (ang. code coverage) programu.
- llvm-cvtres - narzędzie serializuje pliki .res do plików .obj.
- llvm-cxxdump - narzędzie zrzuca dane C++ ABI z plików binarnych .obj.
- llvm-cxxflit - narzędzie do demanglowania symboli C++ (odpowiednik GNU c++filt).
- llvm-cxxmap - narzędzie wykonuje rozmyte dopasowanie (ang. fuzzy matching) zmanglowanych symboli na podstawie pliku opisującego równoważniki.
- llvm-debuginfod-find - narzędzie do pobierania artefaktów debuginfo. Frontend do biblioteki debuginfo.
- llvm-diff - narzędzie do porównywania dwóch modułów LLVM skupiające się na definicjach funkcji.
- llvm-dis - deasembler
- llvm-dlltool - narzędzie do tworzenia dynamicznie ładowanych bibliotek (DLL). Odpowiednik GNU dlltool.
- llvm-dwarfdump - narzedznie parsuje sekcje DWARF plików wynikowych (ang. object files), archiwów lub kolekcji .dSYM i wyświetla w czytelnej formie.
- llvm-dwp - narzędzie do łączenia plików Split DWARF w pliki .dwp (DWARF package file).
- llvm-exegesis - rozbudowane narzędzie do testów porównawczych (ang. benchmarking tool).
- llvm-extract - narzędzie do ekstrakcji fukcji z pliku bitcode. Narzędzie debugowe.
- llvm-gsymutil - narzędzie do odczytu, przeszukiwania i tworzenia plików GSYM.
- llvm-ifs - narzędzie do pracy z Clang Interface Stubs (pliki IFS).
- llvm-install-name-tool - narzędzie do modyfikacji nazwami instalacyjnymi dynamicznie ładowanych bibliotek i rpaths zawartymi w plikach binarnych Mach-O (odpowiednik install_name_tool).
- llvm-jitlink - narzędzie jest wrapperem na biblioteke JITLink. Ładuje realokowalne pliki obiektów (ang. relocatable object files) i później linkuje jest przy użyciu JITLink.
- llvm-jitlink-executor - prosty poza procesowy egzekutor (ang. out-of-process executor) dla llvm-jitlink
- llvm-lib - narzędzie do tworzenia i zarządzania bibliotekami COFF. Kompatybilny z lib.exe (Microsoft Library Manager).
- llvm-libtool-darwin - narzędzie do tworzenia bibliotek (statycznych i dynamicznych) dla systemu Darwin.
- llvm-link - linker zgodny z Microsoftowym link.exe.
- llvm-lipo - narzędzie do pracy z uniwersalnymi plikami binarnymi (ang. universal binaries) i plikami wynikowymi (ang. regular object files).
- llvm-lto - narzędzie odpowiedzialne za LTO (Link Time Optimizations).
- llvm-lto2 - jarzmo testowe (ang. test harness) dla interfejsu LTO.
- llvm-mc - narzędzie do pracy z kodem maszynowym.
- llvm-mca - narzędzie, które statycznie mierzy wydajność kodu maszynowego dla konkretnego CPU.
- llvm-ml - asembler zgodny z MASM.
- llvm-modextract - narzędzie do ekstrakcji modułów z plików bitcode.
- llvm-mt - narzędzie do łączenia plików .manifest. Odpowiednik Microsoftowego mt.exe.
- llvm-nm - narzędzie do wylistowania symboli z plików bitcode, wynikowych i archiwów.
- llvm-objcopy - narzędzie do kopiowania i modyfikacji plików wynikowych.
- llvm-objdump.exe - narzędzie do analizy i deasemblowania pliku binarnego.
- llvm-opt-report - narzędzie do generowania raportów optymalizacji.
- llvm-otool - narzędzie do robienia zrzutów plików Mach-O. Odpowiednik otoola z systemu macOS.
- llvm-pdbutil - narzędzie do pracy z plikami pdb. Ma możliwość generowania, modyfikacji i wyświetlenia atrybutów plików pdb.
- llvm-profdata - narzędzie do pracy z plikami profile data.
- llvm-profgen - narzędzie tworzy pliki profile data na bazie plików skryptu perf do sample-based profile guided optimization (SPGO).
- llvm-ranlib - alias do narzędzie llvm-ar. Odpowiednik GNU ranlib.
- llvm-rc - narzędzie do kompilacji skryptów .rc do .res.
- llvm-readelf - narzędzie do wyświetlania informacji o plikach wynikowych.
- llvm-readobj - narzędzie do wyświetlania informacji o plikach wynikowych. Narzędzie zbliżone do llvm-readelf z interfejsem i formatem wyniku zbliżonym do GNU.
- llvm-reduce - narzędzie do automatycznej w redukcji testów.
- llvm-rtdyld - narzędzie testowe do użycia przez komponenty MC-JIT.
- llvm-sim - narzędzie do wyszukania podobnych sekcji modułów.
- llvm-size - narzedzie do wylistowania informacji o rozmiarach z plików binarnych. Odpowiednik GNU size.
- llvm-split - narzędzie do podziału modułów.
- llvm-stress - narzędzie do generowania losowych plików .ll, które mogą być użyte do testowania różnych części LLVM.
- llvm-strings - narzędzie do wylistowania ciągów znaków z plików binarnych. Odpowiednik GNU strings.
- llvm-symbolizer - narzędzie wczytuje pliki wynikowe i adresy i listuje pozycje w kodzie źródłowym.
- llvm-tapi-diff - narzędzie do porównywania plików TBD.
- llvm-tblgen - narzędzie tłumaczące pliki compiler-related target description do kodu C++ lub innych formatów.
- llvm-tli-checker - narzędzie do sprawdzania poprawności TLI (TargetLibraryInfo).
- llvm-undname - narzędzie do demanglowania nazw. Odpowiednik Microsoftowego undname.
- llvm-windres - narzędzie do modyfikacji plików zasobów. Odpowiednik Microsoftowego windres.
- llvm-xray - zestaw narzędzi do profilowania aplikacji.
- pp-trace - narzędzie do śledzenia aktywności preprocesora oraz narzędzie testowe dla interfejsu PPCallbacks.
- wasm-ld - linker plików WebAssembly.