Bazel buduje projekt uruchamiając niezbędne kompilatory i testy. System kompilacji został zaprojektowany od podstaw, aby optymalnie budować projekty Google, w tym bardzo duże projekty i projekty zawierające kod w wielu językach programowania, wymagające szeroko zakrojonych testów i tworzone dla wielu platform. Obsługuje budowanie i testowanie kodu w językach Java, C++, Objective-C, Python, Rust, Go i wielu innych, a także budowanie aplikacji mobilnych na Androida i iOS. Obsługiwane jest użycie pojedynczych plików zestawu dla różnych platform i architektur; na przykład jeden plik zestawu bez zmian może być używany zarówno dla systemu serwerowego, jak i urządzenia mobilnego.
Do wyróżniających cech Bazela należy duża szybkość, niezawodność i powtarzalność procesu montażu. Aby osiągnąć dużą szybkość kompilacji, Bazel aktywnie wykorzystuje techniki buforowania i równoległości w procesie kompilacji. Pliki BUILD muszą w pełni definiować wszystkie zależności, na podstawie których podejmowane są decyzje o przebudowie komponentów po dokonaniu zmian (przebudowywane są tylko zmienione pliki) i zrównoleglać proces montażu. Oprzyrządowanie zapewnia także powtarzalność montażu, tj. wynik zbudowania projektu na maszynie dewelopera będzie całkowicie identyczny z kompilacją na systemach innych firm, takich jak serwery ciągłej integracji.
W przeciwieństwie do Make i Ninja, Bazel stosuje podejście wyższego poziomu do budowania reguł asemblera, w którym zamiast definiować powiązanie poleceń z budowanymi plikami, używane są bardziej abstrakcyjne, gotowe bloki, takie jak „budowanie pliku wykonywalnego w C++”, „budowanie biblioteki w C++” czy „uruchamianie testu dla C++”, a także identyfikacja platform docelowych i kompilacji. W pliku tekstowym BUILD komponenty projektu są opisane jako zbiór bibliotek, plików wykonywalnych i testów, bez opisywania szczegółów na poziomie poszczególnych plików i poleceń wywołania kompilatora. Dodatkowa funkcjonalność realizowana jest poprzez mechanizm łączenia rozszerzeń.
Źródło: opennet.ru