İşlem
Derleme sırasında çalıştırılacak bir komut (ör. yapıları giriş olarak alan ve çıkış olarak başka yapılar üreten bir derleyiciye yapılan çağrı). Komut satırı bağımsız değişkenleri, işlem anahtarı, ortam değişkenleri ve beyan edilen giriş/çıkış yapıtları gibi meta verileri içerir.
Ayrıca: Kurallar dokümanları
İşlem önbelleği
Yürütülen işlemlerin oluşturdukları çıkışlarla eşlemesini depolayan disk üzerinde bir önbellek. Önbellek anahtarı, işlem anahtarı olarak bilinir. Bazel'in artımlılık modeli için temel bir bileşen. Önbellek, çıkış temel dizininde depolandığı için Bazel sunucusu yeniden başlatıldığında silinmez.
İşlem grafiği
İşlemlerin ve bu işlemlerin okuyup oluşturduğu yapıların bellek içi grafiği. Grafik, kaynak dosyalar olarak (örneğin, dosya sisteminde) bulunan yapay nesnelerin yanı sıra BUILD
dosyalarında belirtilmeyen oluşturulmuş ara/son yapay nesneleri de içerebilir. Analiz aşamasında oluşturulur ve uygulama aşamasında kullanılır.
İşlem grafiği sorgusu (aquery)
Derleme işlemleri üzerinde sorgu oluşturabilen bir sorgu aracı. Bu, derleme kurallarının, gerçek derlemelerin yaptığı işe nasıl dönüştüğünü analiz etme olanağı sağlar.
Eylem tuşu
Bir işlemin önbellek anahtarı. İşleme bağlı olarak, işlemde yürütülecek komut, derleyici işaretleri, kitaplık konumları veya sistem üstbilgileri gibi işlem meta verilerine göre hesaplanır. Bazel'in bağımsız işlemleri deterministik olarak önbelleğe almasını veya geçersiz kılmasını sağlar.
Analiz aşaması
Bir derlemenin ikinci aşaması. BUILD
dosyalarında belirtilen hedef grafiği işleyerek yürütme aşamasında çalıştırılacak işlemlerin sırasını belirleyen bellek içi bir işlem grafiği oluşturur. Bu aşamada kural uygulamaları değerlendirilir.
Yapı
Kaynak dosya veya oluşturulan dosya. Ağaç yapıları olarak bilinen bir dosya dizini de olabilir.
Bir yapıt birden fazla işlemin girişi olabilir ancak en fazla bir işlem tarafından oluşturulmalıdır.
Bir dosya hedefi ile eşleşen bir yapıt, etiketle ele alınabilir.
En Boy Oranı
Kuralların bağımlılıklarında ek işlemler oluşturmasına olanak tanıyan bir mekanizma. Örneğin, A hedefi B'ye bağlıysa A'da, B'ye bağımlılık kenarı boyunca yukarı doğru ilerleyen ve ek çıktı dosyaları oluşturup toplamak için B'de ek işlemler yürüten bir yön uygulayabilirsiniz. Bu ek işlemler, aynı yönü gerektiren hedefler arasında önbelleğe alınır ve yeniden kullanılır. aspect()
Starlark Build API işleviyle oluşturulur. Örneğin, IDE'ler için meta veriler oluşturmak ve linting için işlemler oluşturmak amacıyla kullanılabilir.
Ayrıca: Aspects belgeleri
En-boy oranı
Özelliklerin diğer özelliklerin sonuçlarına uygulanabileceği bir kompozisyon mekanizması. Örneğin, IDE'ler tarafından kullanılmak üzere bilgi oluşturan bir yön, proto'dan .java
dosyaları oluşturan bir yönün üzerine uygulanabilir.
A
yönünün B
yönünün üzerinde uygulanabilmesi için B
öğesinin provides
özelliğinde reklamını yaptığı sağlayıcılar, A
öğesinin required_aspect_providers
özelliğinde istediğini belirttiği sağlayıcılarla eşleşmelidir.
Özellik
Hedef başına derleme bilgilerini ifade etmek için kullanılan bir kural parametresi.
Hedefin kaynak dosyalarını, bağımlılıklarını ve özel derleyici seçeneklerini sırasıyla bildiren srcs
, deps
ve copts
bu türlere örnek verilebilir. Belirli bir hedef için kullanılabilen özellikler, kural türüne bağlıdır.
.bazelrc
Başlangıç
işaretleri ve komut işaretleri için varsayılan değerleri değiştirmek ve Bazel komut satırında --config
işareti kullanılarak birlikte ayarlanabilen ortak seçenek gruplarını tanımlamak için kullanılan Bazel'in yapılandırma dosyası. Bazel, birden fazla bazelrc dosyasındaki (sistem genelinde, çalışma alanı başına, kullanıcı başına veya özel bir konumdan) ayarları birleştirebilir ve bir bazelrc
dosyası, diğer bazelrc
dosyalarındaki ayarları da içe aktarabilir.
Blaze
Bazel'in Google'a özel sürümü. Google'ın tek depolu sistemi için ana derleme sistemi.
BUILD dosyası
BUILD
dosyası, Bazel'e hangi yazılım çıkışlarının oluşturulacağını, bunların bağımlılıklarını ve nasıl oluşturulacağını bildiren ana yapılandırma dosyasıdır. Bazel, giriş olarak bir BUILD
dosyası alır ve bu dosyayı kullanarak bağımlılık grafiği oluşturur. Ayrıca, ara ve nihai yazılım çıktılarını oluşturmak için tamamlanması gereken işlemleri türetir. BUILD
dosyası, bir dizini ve BUILD
dosyası içermeyen tüm alt dizinleri paket olarak işaretler ve kurallar tarafından oluşturulan hedefler içerebilir. Dosya, BUILD.bazel
olarak da adlandırılabilir.
BUILD.bazel dosyası
BUILD
Dosyası başlıklı makaleyi inceleyin. Aynı dizindeki bir BUILD
dosyasına göre önceliklidir.
.bzl dosyası
Starlark ile yazılmış kuralları, makroları ve sabitleri tanımlayan bir dosya. Bu dosyalar daha sonra load()
işlevi kullanılarak BUILD
dosyalarına aktarılabilir.
Grafik oluşturma
Bazel'in derleme gerçekleştirmek için oluşturduğu ve geçtiği bağımlılık grafiği. Hedefler, yapılandırılmış hedefler, işlemler ve yapılar gibi düğümleri içerir. Bir derleme, istenen bir hedef grubunun bağlı olduğu tüm yapılar güncel olarak doğrulandığında tamamlanmış kabul edilir.
Derleme ayarı
Starlark tarafından tanımlanan bir yapılandırma parçası. Geçişler, bir alt grafiğin yapılandırmasını değiştirmek için oluşturma ayarlarını belirleyebilir. Kullanıcıya komut satırı işareti olarak sunuluyorsa (derleme işareti olarak da bilinir).
Temiz derleme
Önceki derlemelerin sonuçlarını kullanmayan bir derleme. Bu işlem genellikle artımlı derlemeye göre daha yavaştır ancak genellikle daha doğru olduğu düşünülür. Bazel, hem temiz hem de artımlı derlemelerin her zaman doğru olmasını sağlar.
İstemci-sunucu modeli
bazel
komut satırı istemcisi, Bazel komutlarını yürütmek için yerel makinede otomatik olarak bir arka plan sunucusu başlatır. Sunucu, komutlar arasında kalıcıdır ancak bir süre işlem yapılmadığında otomatik olarak durur (veya bazel shutdown ile açıkça durdurulur). Bazel'i sunucu ve istemci olarak ayırmak, JVM başlatma süresini amorti etmeye yardımcı olur ve artımlı derlemelerin daha hızlı olmasını sağlar. Bunun nedeni, işlem grafiğinin komutlar arasında bellekte kalmasıdır.
Komut
bazel
build
, bazel test
, bazel run
ve bazel query
gibi farklı Bazel işlevlerini çağırmak için komut satırında kullanılır.
Komut işaretleri
Bir komuta özgü bir dizi işaret. Komut işaretleri, komuttan sonra (bazel build <command flags>
) belirtilir. İşaretler bir veya daha fazla komut için geçerli olabilir. Örneğin, --configure
yalnızca bazel sync
komutu için kullanılan bir işarettir ancak --keep_going
, sync
, build
, test
ve diğerleri için geçerlidir. İşaretler genellikle yapılandırma amacıyla kullanılır. Bu nedenle, işaret değerlerindeki değişiklikler Bazel'in bellek içi grafikleri geçersiz kılmasına ve analiz aşamasını yeniden başlatmasına neden olabilir.
Yapılandırma
Kuralların işlem oluşturma şeklini etkileyen, kural tanımlarının dışındaki bilgiler. Her derlemede, hedef platformu, işlem ortamı değişkenlerini ve komut satırı derleme işaretlerini belirten en az bir yapılandırma bulunur. Geçişler, ana makine araçları veya çapraz derleme gibi ek yapılandırmalar oluşturabilir.
Ayrıca: Yapılandırmalar
Yapılandırmayı kırpma
Yalnızca bir hedefin gerçekten ihtiyaç duyduğu yapılandırma parçalarını dahil etme işlemi. Örneğin, C++ bağımlılığı //:c
olan bir Java ikilisi //:j
oluşturursanız --javacopt
değerini //:c
yapılandırmasına dahil etmek gereksizdir. Çünkü --javacopt
değerinin değiştirilmesi, C++ derleme önbelleğinin kullanılabilirliğini gereksiz yere bozar.
Yapılandırılmış sorgu (cquery)
Yapılandırılmış hedefler üzerinde sorgu oluşturan bir sorgu aracı (analiz aşaması tamamlandıktan sonra). Bu, select()
ve derleme işaretlerinin (ör. --platforms
) sonuçlara doğru şekilde yansıtıldığı anlamına gelir.
Ayrıca: cquery belgeleri
Yapılandırılmış hedef
Hedefin bir yapılandırmayla değerlendirilmesinin sonucu. Analiz aşamasında, derlemenin seçenekleri oluşturulması gereken hedeflerle birleştirilerek bu sonuç elde edilir.
Örneğin, //:foo
aynı derlemede iki farklı mimari için derleme yapıyorsa iki yapılandırılmış hedefi vardır: <//:foo, x86>
ve <//:foo, arm>
.
Doğruluk
Bir derlemenin çıktısı, geçişli girişlerinin durumunu doğru şekilde yansıtıyorsa derleme doğrudur. Bazel, doğru derlemeler elde etmek için hermetik, tekrarlanabilir ve derleme analizi ile işlem yürütmeyi deterministik hale getirmeye çalışır.
Bağımlı seçim
İki hedef arasındaki yönlü kenar. //:foo
hedefinin özellik değerleri //:bar
hedefine referans içeriyorsa //:foo
hedefi, //:bar
hedefi üzerinde hedef bağımlılığına sahiptir. //:foo
içindeki bir işlem, //:bar
içindeki bir işlem tarafından oluşturulan bir giriş yapıtına bağlıysa //:foo
, //:bar
üzerinde işlem bağımlılığına sahiptir.
Belirli bağlamlarda dış bağımlılık anlamına da gelebilir. Modüller bölümüne bakın.
Depset
Geçişli bağımlılıklarla ilgili verileri toplamak için kullanılan bir veri yapısı. Çok büyük bağımlılık kümelerinin (yüz binlerce dosya) olması yaygın olduğundan, bağımlılık kümelerinin birleştirilmesi zaman ve alan açısından verimli olacak şekilde optimize edilmiştir. Alan verimliliği nedeniyle diğer bağımlılık kümelerine yinelemeli olarak başvurmak için uygulanır. Kural uygulamaları, kural derleme grafiğinin en üst düzeyinde olmadığı sürece, bağımlılık kümelerini listelere dönüştürerek "düzleştirmemelidir". Büyük bağımlılık kümelerini düzleştirme işlemi çok fazla bellek tüketir. Bazel'in dahili uygulamasında iç içe yerleştirilmiş kümeler olarak da bilinir.
Ayrıca: Depset belgeleri
Disk önbelleği
Uzak önbelleğe alma özelliği için yerel bir disk üzerinde blob deposu. Gerçek bir uzak blob deposuyla birlikte kullanılabilir.
Distdir
Bazel'in aksi takdirde internetten depo kurallarını kullanarak getireceği dosyaları içeren salt okunur bir dizin. Derlemelerin tamamen çevrimdışı çalışmasını sağlar.
Dinamik yürütme
Yerel ve uzak yürütme arasında seçim yapmak için çeşitli sezgisel yöntemler kullanan ve daha hızlı olan başarılı yöntemin yürütme sonuçlarını kullanan bir yürütme stratejisi. Bazı işlemler yerel olarak daha hızlı yürütülür (ör. bağlama), diğerleri ise uzaktan daha hızlıdır (ör. yüksek oranda paralelleştirilebilir derleme). Dinamik bir yürütme stratejisi, mümkün olan en iyi artımlı ve temiz derleme sürelerini sağlayabilir.
Yürütme aşaması
Yapılandırmanın üçüncü aşaması. Analiz aşamasında oluşturulan işlem grafiğindeki işlemleri yürütür. Bu işlemler, yapıları okumak ve yazmak için yürütülebilir dosyaları (derleyiciler, komut dosyaları) çağırır. Spawn stratejileri, bu işlemlerin nasıl yürütüleceğini (yerel olarak, uzaktan, dinamik olarak, korumalı alanda, Docker'da vb.) kontrol eder.
Yürütme kökü
Yerel işlemlerin sandbox dışı derlemelerde yürütüldüğü çalışma alanının çıkış tabanı dizinindeki bir dizin. Dizin içerikleri çoğunlukla iş alanındaki giriş yapıtlarının sembolik bağlantılarıdır. Yürütme kökü, diğer girişler olarak harici depolara yönelik sembolik bağlantılar ve çıkışları depolamak için bazel-out
dizinini de içerir. Yükleme aşamasında, derlemenin bağlı olduğu paketlerin geçişli kapanımını temsil eden dizinlerin sembolik bağlantı ormanı oluşturularak hazırlanır. Komut satırında bazel info
execution_root
ile erişilebilir.
Dosya
Yapı konusuna bakın.
Hermeticity
Derleme ve test işlemlerinde harici etkiler yoksa derleme hermetiktir. Bu, sonuçların deterministik ve doğru olmasını sağlar. Örneğin, hermetik derlemeler genellikle işlemlere ağ erişimini engeller, bildirilen girişlere erişimi kısıtlar, sabit zaman damgaları ve saat dilimleri kullanır, ortam değişkenlerine erişimi kısıtlar ve rastgele sayı üreteçleri için sabit başlangıç değerleri kullanır.
Artımlı derleme
Artımlı derleme, derleme süresini ve kaynak kullanımını azaltmak için önceki derlemelerin sonuçlarını yeniden kullanır. Bağımlılık kontrolü ve önbelleğe alma, bu tür derlemeler için doğru sonuçlar üretmeyi amaçlar. Artımlı derleme, temiz derlemenin tam tersidir.
Şirket
Bir hedef için tanımlayıcı. Genellikle @repo//path/to/package:target
biçimindedir. Burada repo
, hedefi içeren deponun (görünür) adıdır, path/to/package
, hedefi bildiren BUILD
dosyasını içeren dizinin yoludur (bu dizin paket olarak da bilinir) ve target
, hedefin adıdır. Duruma bağlı olarak bu söz diziminin bazı bölümleri atlanabilir.
Ayrıca: Etiketler
Yükleme aşaması
Bazel'in BUILD
dosyalarını çalıştırarak paketler oluşturduğu derlemenin ilk aşaması. Makrolar ve glob()
gibi belirli işlevler bu aşamada değerlendirilir. Hedef grafiği oluşturmak için geliştirme sürecinin ikinci aşaması olan analiz aşaması ile birlikte yürütülür.
Eski makro
Normal bir Starlark işlevi olarak tanımlanan ve BUILD
dosyasının yürütülmesinin yan etkisi olarak çalışan bir makro türü.
Eski makrolar, işlevlerin yapabileceği her şeyi yapabilir. Bu nedenle, bu tür yazı tipleri kullanışlı olsa da okunması, yazılması ve kullanılması daha zor olabilir. Eski bir makro, bağımsız değişkenlerini beklenmedik şekilde değiştirebilir veya select()
ya da yanlış türde bir bağımsız değişken verildiğinde başarısız olabilir.
Sembolik makrolarla karşılaştırın.
Ayrıca: Eski makro belgeleri
Makro
Birden fazla kural hedef bildirimini tek bir Starlark çağrılabilir öğesi altında birleştirme mekanizması. BUILD
dosyasında ortak kural bildirimi kalıplarının yeniden kullanılmasını sağlar. Yükleme aşamasında temel kural hedefi bildirimlerine genişletilir.
İki türü vardır: Sembolik makrolar (Bazel 8'den beri) ve eski makrolar.
Hafıza güçlendirici
Kural yazarının, kuraldaki bir işlemin ne yaptığını hızlıca anlamak için seçtiği kısa ve okunabilir dize. Kısa hatırlatıcılar, oluşturma stratejisi seçimleri için tanımlayıcı olarak kullanılabilir. İşlem anımsatıcılarına örnek olarak Java kurallarından Javac
, C++ kurallarından CppCompile
ve Android kurallarından AndroidManifestMerger
verilebilir.
Modül
Her biri diğer modüllere bağımlı olabilen birden fazla sürümü olabilen bir Bazel projesi. Bu, diğer bağımlılık yönetimi sistemlerindeki (ör. Maven artifact, npm package, Go module veya Cargo crate) tanıdık kavramlara benzer. Modüller, Bazel'in harici bağımlılık yönetim sisteminin temelini oluşturur.
Her modül, kök dizininde MODULE.bazel
dosyası bulunan bir depo tarafından desteklenir. Bu dosya, modülün kendisiyle (ör. adı ve sürümü), doğrudan bağımlılıklarıyla ve araç zinciri kayıtları ile modül uzantısı girişi dahil olmak üzere çeşitli diğer verilerle ilgili meta verileri içerir.
Modül meta verileri Bazel kayıtlarında barındırılır.
Ayrıca bkz: Bazel modülleri
Modül Uzantısı
Modül bağımlılığı grafiğindeki girişleri okuyarak ve repo kurallarını çağırarak repo oluşturmak için çalıştırılabilen bir mantık parçası. Modül uzantıları, depo kurallarına benzer özelliklere sahiptir. Bu sayede internete erişebilir, dosya G/Ç işlemleri gerçekleştirebilir vb.
Ayrıca: Modül uzantıları
Yerel kurallar
Bazel'e yerleştirilmiş ve Java'da uygulanmış kurallar. Bu tür kurallar, .bzl
dosyalarında yerel modüldeki işlevler (örneğin, native.cc_library
veya native.java_library
) olarak görünür. Kullanıcı tanımlı kurallar (yerel olmayan) Starlark kullanılarak oluşturulur.
Çıkış tabanı
Bazel çıkış dosyalarını depolamak için çalışma alanına özel bir dizin. Çıkışları çalışma alanının kaynak ağacından (ana depo) ayırmak için kullanılır. Çıkış kullanıcı kökünde bulunur.
Çıkış grupları
Bazel bir hedefi oluşturmayı bitirdiğinde oluşturulması beklenen bir dosya grubu. Kurallar, normal çıkışlarını "varsayılan çıkış grubu"na yerleştirir
(ör..jar
, java_library
, .a
ve .so
dosyaları cc_library
hedefleri için). Varsayılan çıkış grubu, komut satırında bir hedef istendiğinde yapıları oluşturulan çıkış grubudur.
Kurallar, BUILD
dosyalarında (filegroup
kuralı) veya komut satırında (--output_groups
işareti) açıkça belirtilebilen daha fazla adlandırılmış çıkış grubu tanımlayabilir.
Çıkış kullanıcı kökü
Bazel'in çıkışlarını depolamak için kullanıcıya özel bir dizin. Dizin adı, kullanıcının sistem kullanıcı adından türetilir. Birden fazla kullanıcı aynı anda sistemde aynı projeyi oluşturuyorsa çıkış dosyası çakışmalarını önler. Çıkış tabanları olarak da bilinen, bağımsız çalışma alanlarının derleme çıkışlarına karşılık gelen alt dizinleri içerir.
Paket
BUILD
dosyası tarafından tanımlanan hedefler kümesi. Bir paketin adı, BUILD
dosyasının repo köküne göreli yoludur. Bir paket, alt paketler veya BUILD
dosyaları içeren alt dizinler içerebilir ve böylece bir paket hiyerarşisi oluşturulur.
Paket grubu
Bir paket grubunu temsil eden hedef. Genellikle visibility
özellik değerlerinde kullanılır.
Platform
Bir derlemeye dahil olan "makine türü". Buna Bazel'in üzerinde çalıştığı makine ("ana makine" platformu), derleme araçlarının üzerinde çalıştığı makineler ("yürütme" platformları) ve hedeflerin oluşturulduğu makineler ("hedef platformlar") dahildir.
Sağlayıcı
Bağımlılık ilişkileri boyunca kural hedefleri arasında aktarılacak bir bilgi birimini açıklayan şema. Bu dosya genellikle derleyici seçenekleri, geçişli kaynak veya çıkış dosyaları ve derleme meta verileri gibi bilgileri içerir. Birikmiş geçişli verileri verimli bir şekilde depolamak için genellikle depsetler ile birlikte kullanılır. Yerleşik sağlayıcı örneği: DefaultInfo
.
Ayrıca: Sağlayıcı belgeleri
Sorgu (kavram)
Derleme grafiğini analiz ederek hedef özellikleri ve bağımlılık yapılarını anlama süreci. Bazel üç sorgu varyantını destekler: query, cquery ve aquery.
sorgu (komut)
Derlemenin yükleme sonrası hedef grafiği üzerinde çalışan bir sorgu aracı. Bu yöntem nispeten hızlıdır ancak select()
, derleme işaretleri, yapılar veya derleme işlemlerinin etkilerini analiz edemez.
Ayrıca: Sorgu nasıl yapılır?, Sorgu referansı
Kod deposu
Kökünde sınır işaretleyici dosyası bulunan, Bazel derlemesinde kullanılabilecek kaynak dosyaları içeren bir dizin ağacı. Genellikle repo olarak kısaltılır.
Depo sınırı işaretleyici dosyası MODULE.bazel
(bu deponun bir Bazel modülünü temsil ettiğini gösterir), REPO.bazel
veya eski bağlamlarda WORKSPACE
ya da WORKSPACE.bazel
olabilir. Herhangi bir depo sınırı işaretleyici dosyası, bir deponun sınırını gösterir. Bu türden birden fazla dosya bir dizinde birlikte bulunabilir.
Ana depo, mevcut Bazel komutunun çalıştırıldığı depodur.
Harici depolar, MODULE.bazel
dosyalarında modüller belirtilerek veya module
extensions içinde repo kuralları çağrılarak tanımlanır. İstenirse diskteki önceden belirlenmiş bir "sihirli" konuma getirilebilir.
Her depoda benzersiz ve sabit bir standart ad bulunur. Diğer depolardan görüntülendiğinde ise farklı görünen adlar olabilir.
Ayrıca bkz.: Harici bağımlılıklara genel bakış
Depo önbelleği
Bazel'in derlemeler için indirdiği dosyaların, çalışma alanları arasında paylaşılabilen, içeriğe göre adreslenebilir ortak bir önbelleği. İlk indirmeden sonra çevrimdışı derlemeleri etkinleştirir. http_archive
gibi repository rules aracılığıyla indirilen dosyaları ve repository_ctx.download
gibi repository rule API'lerini önbelleğe almak için yaygın olarak kullanılır. Dosyalar yalnızca indirme için SHA-256 sağlama toplamları belirtilmişse önbelleğe alınır.
Depo kuralı
Bazel'e bir deponun nasıl oluşturulacağını (veya "getirileceğini") söyleyen, depo tanımlarıyla ilgili bir şema. Genellikle repo kuralı olarak kısaltılır.
Depo kuralları, modüller tarafından desteklenen depoları tanımlamak için Bazel tarafından dahili olarak çağrılır veya modül uzantıları tarafından çağrılabilir.
Depo kuralları internete erişebilir veya dosya G/Ç'si gerçekleştirebilir. En yaygın depo kuralı, kaynak dosyaları içeren bir arşivi internetten indirmek için kullanılan http_archive
kuralıdır.
Ayrıca: Depo kuralı belgeleri
Yeniden üretilebilirlik
Bir derleme veya testin, zamandan, yöntemden ya da ortamdan bağımsız olarak her zaman aynı çıktı kümesini üreteceği özelliği. Bunun, çıkışların doğru veya istenen çıkışlar olduğu anlamına gelmediğini unutmayın.
Kural
BUILD
dosyasında kural hedeflerini tanımlamaya yönelik bir şema (ör. cc_library
). BUILD
dosya yazarı açısından bir kural, bir dizi özellik ve kara kutu mantığından oluşur. Mantık, kural hedefinin nasıl çıktı artefaktları oluşturacağını ve bilgileri diğer kural hedeflerine nasıl ileteceğini belirtir. .bzl
Yazarlar açısından kurallar, Bazel'i yeni programlama dillerini ve ortamlarını destekleyecek şekilde genişletmenin temel yoludur.
Kurallar, yükleme aşamasında kural hedefleri oluşturmak için başlatılır. Analiz aşamasında kural hedefleri, sağlayıcılar şeklinde alt bağımlılıklarına bilgi iletir ve çıkış yapılarını nasıl oluşturacaklarını açıklayan işlemleri kaydeder. Bu işlemler yürütme aşamasında çalıştırılır.
Ayrıca: Kurallar dokümanları
Kural hedefi
Bir kuralın örneği olan hedef. Dosya hedefleri ve paket gruplarıyla karşılaştırıldığında. Kural ile karıştırılmamalıdır.
Runfiles
Çalıştırılabilir bir hedefin çalışma zamanı bağımlılıkları. En yaygın olarak, yürütülebilir dosya bir test kuralının yürütülebilir çıktısıdır ve runfile'lar testin çalışma zamanı veri bağımlılıklarıdır. Bazel, yürütülebilir dosya çağrılmadan önce (bazel test sırasında) kaynak dizin yapılarına göre test yürütülebilir dosyasının yanında runfile ağacını hazırlar.
Ayrıca: Runfiles belgeleri
Korumalı alana alma
Çalışan bir işlemi kısıtlanmış ve geçici bir yürütme kökünde izole etme tekniğidir. Bu teknik, işlemin bildirilmemiş girişleri okumamasını veya bildirilmemiş çıkışları yazmamasını sağlamaya yardımcı olur. Koruma alanı, hermeticity'yi büyük ölçüde iyileştirir ancak genellikle performans maliyeti vardır ve işletim sisteminin desteğini gerektirir. Performans maliyeti platforma bağlıdır. Linux'ta bu durum önemli olmasa da macOS'te sanal alanın kullanılamaz hale gelmesine neden olabilir.
Skyframe
Skyframe, Bazel'in temel paralel, işlevsel ve artımlı değerlendirme çerçevesidir.
Istampalama
Bazel ile oluşturulan yapılara ek bilgiler yerleştirmek için kullanılan bir özellik. Örneğin, bu bilgiler kaynak kontrolü, derleme zamanı ve yayın derlemeleri için çalışma alanı veya ortamla ilgili diğer bilgiler için kullanılabilir.
--workspace_status_command
işareti ve zaman damgası özelliğini destekleyen kurallar aracılığıyla etkinleştirin.
Starlark
Kurallar ve makrolar yazmak için kullanılan uzantı dili. Yapılandırma ve daha iyi performans amacıyla kullanılan, Python'ın (söz dizimi ve gramer açısından) sınırlı bir alt kümesi. .bzl
file uzantısını kullanır. BUILD
dosyaları, Starlark'ın daha da kısıtlanmış bir sürümünü (ör. def
işlev tanımları yok) kullanır. Bu sürüm, daha önce Skylark olarak biliniyordu.
Ayrıca: Starlark dil belgeleri
Başlangıç işaretleri
bazel
ile komut arasında belirtilen işaretler grubu (ör. bazel --host_jvm_debug
build). Bu işaretler, Bazel sunucusunun yapılandırmasını değiştirir. Bu nedenle, başlangıç işaretlerinde yapılan herhangi bir değişiklik sunucunun yeniden başlatılmasına neden olur. Başlangıç işaretleri herhangi bir komuta özgü değildir.
Sembolik makro
rule benzeri bir attribute şemasıyla tanımlanan bir makro türü, dahili olarak tanımlanan hedeflerin kendi paketlerinden gizlenmesine olanak tanır ve makronun tanımladığı hedeflerde tahmin edilebilir bir adlandırma kalıbı uygular. Büyük eski makro kod tabanlarında görülen bazı sorunları önlemek için tasarlanmıştır.
Ayrıca: Sembolik makro belgeleri
Hedef
BUILD
dosyasında tanımlanan ve etiketle tanımlanan bir nesne. Hedefler, son kullanıcının bakış açısından bir çalışma alanının oluşturulabilir birimlerini temsil eder.
Bir kural oluşturularak tanımlanan hedefe kural hedefi denir. Bunlar, kurala bağlı olarak çalıştırılabilir (ör. cc_binary
) veya test edilebilir (ör. cc_test
). Kural hedefleri genellikle özellikleri (ör. deps
) aracılığıyla diğer hedeflere bağlıdır. Bu bağımlılıklar, hedef grafiğinin temelini oluşturur.
Kural hedeflerinin yanı sıra dosya hedefleri ve paket grubu hedefleri de vardır. Dosya hedefleri, bir BUILD
dosyası içinde referans verilen yapay nesnelere karşılık gelir. Özel bir durum olarak, herhangi bir paketin BUILD
dosyası her zaman o paketteki bir kaynak dosya hedefi olarak kabul edilir.
Hedefler, yükleme aşamasında keşfedilir. Analiz aşamasında hedefler, derleme yapılandırmaları ile ilişkilendirilerek yapılandırılmış hedefler oluşturulur.
Hedef grafiği
Hedeflerin ve bağımlılıklarının bellek içi grafiği. Yükleme aşamasında oluşturulur ve analiz aşamasında giriş olarak kullanılır.
Hedef kalıbı
Komut satırında bir grup hedef belirtme yöntemi. Sık kullanılan kalıplar :all
(tüm kural hedefleri), :*
(tüm kural + dosya hedefleri),
...
(mevcut paket ve tüm alt paketler yinelemeli olarak) şeklindedir. Örneğin, //...:*
, çalışma alanının kökünden başlayarak tüm paketlerdeki tüm kural ve dosya hedeflerinin yinelemeli olarak kullanılabileceği anlamına gelir.
Testler
Kural, test kurallarından oluşturulduğu için test edilebilir bir dosya içerir. Yürütülebilir dosyanın tamamlanmasından sıfır dönüş kodu alınması, testin başarılı olduğunu gösterir. Bazel ile testler (ör. test ortamı değişkenleri, test sonucu toplama yöntemleri) arasındaki tam sözleşme Test Ansiklopedisi'nde belirtilir.
Araç zinciri
Bir dil için çıktı oluşturmaya yönelik bir araç seti. Genellikle bir araç zinciri derleyiciler, bağlayıcılar, yorumlayıcılar ve/veya linter'lar içerir. Bir araç zinciri platforma göre de değişebilir. Örneğin, araç zinciri aynı dil için olsa bile Unix derleyici araç zincirinin bileşenleri Windows varyantında farklı olabilir. Platform için doğru araç zincirini seçmeye araç zinciri çözümü denir.
Üst düzey hedef
Bir derleme hedefi, Bazel komut satırında istenirse en üst düzey olur. Örneğin, //:foo
, //:bar
öğesine bağlıysa ve bazel build //:foo
çağrılıyorsa bu derleme için //:foo
üst düzeydir ve her iki hedef de oluşturulması gerekse de //:bar
üst düzey değildir. Üst düzey ve üst düzey olmayan hedefler arasındaki önemli bir fark, Bazel komut satırında (veya .bazelrc aracılığıyla) ayarlanan komut işaretlerinin üst düzey hedeflerin yapılandırmasını ayarlaması, ancak üst düzey olmayan hedeflerin geçişi tarafından değiştirilebilmesidir.
Geçiş
Yapılandırma durumunun bir değerden diğerine eşlenmesi. Grafik oluşturma işleminde hedeflerin aynı kuraldan başlatılmış olsalar bile farklı yapılandırmalara sahip olmasını sağlar. Geçişlerin yaygın olarak kullanıldığı yerlerden biri de bölünmüş geçişlerdir. Bu geçişlerde hedef grafiğin belirli bölümleri, her bir dal için farklı yapılandırmalarla dallanır. Örneğin, tek bir derlemede bölünmüş geçişler kullanarak ARM ve x86 için derlenmiş yerel ikili dosyalar içeren bir Android APK oluşturulabilir.
Ayrıca: Kullanıcı tanımlı geçişler
Ağaç yapısı
Dosya koleksiyonunu temsil eden bir yapı. Bu dosyalar yapay ürün olmadığından, bunlar üzerinde çalışan bir işlem, bunun yerine ağaç yapay ürününü giriş veya çıkış olarak kaydetmelidir.
Görünürlük
Derleme sisteminde istenmeyen bağımlılıkları önlemek için kullanılan iki mekanizmadan biri:
Bir hedefin diğer hedefler tarafından kullanılıp kullanılamayacağını kontrol etmek için hedef görünürlüğü ve bir BUILD
veya .bzl
dosyasının belirli bir .bzl
dosyasını yükleyip yükleyemeyeceğini kontrol etmek için yükleme görünürlüğü. Bağlam olmadığında genellikle "görünürlük" hedef görünürlüğünü ifade eder.
Ayrıca: Görünürlük belgeleri
Çalışma alanı
Aynı ana depodan çalıştırılan tüm Bazel komutlarının paylaştığı ortam.
Geçmişte "depo" ve "çalışma alanı" kavramlarının birbirine karıştırıldığını unutmayın. "Çalışma alanı" terimi genellikle ana depoyu ifade etmek için, bazen de "depo" ile eş anlamlı olarak kullanılmıştır. Anlaşılırlık için bu tür kullanımdan kaçınılmalıdır.