Uzantılara Genel Bakış

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu sayfada, makrolar ve kurallar kullanılarak BUILD dilinin nasıl genişletileceği açıklanmaktadır.

Bazel uzantıları, .bzl ile biten dosyalardır. Bir uzantıdan simge içe aktarmak için yükleme ifadesi kullanın.

Daha ileri seviye kavramları öğrenmeden önce:

Makrolar ve kurallar

Makro, kuralları örnekleyen bir işlevdir. Bazı kodları yeniden kullanmanıza olanak tanıdığı için BUILD dosyası çok tekrarlı veya çok karmaşık hale geldiğinde kullanışlıdır. İşlev, BUILD dosyası okunur okunmaz değerlendirilir. BUILD dosyasının değerlendirilmesinden sonra Bazel, makrolar hakkında çok az bilgiye sahip olur: Makronuz bir genrule oluşturursa Bazel, genrule'ı siz yazmış gibi davranır. Sonuç olarak, bazel query yalnızca oluşturulan genrule öğelerini listeler.

Kural, makrodan daha güçlüdür. Bazel'in dahili işlevlerine erişebilir ve neler olup bittiği üzerinde tam kontrole sahip olabilir. Örneğin, bilgileri diğer kurallara iletebilir.

Basit mantığı yeniden kullanmak istiyorsanız bir makroyla başlayın. Karmaşık hale gelen makroları kurala dönüştürmek genellikle iyi bir fikirdir. Yeni bir dil için destek genellikle bir kuralla sağlanır. Kurallar, ileri düzey kullanıcılar içindir. Çoğu kullanıcının kural yazması gerekmez. Yalnızca mevcut kuralları yükleyip çağırabilirler.

Değerlendirme modeli

Derleme üç aşamadan oluşur.

  • Yükleme aşaması. Öncelikle, derleme için gereken tüm uzantıları ve tüm BUILD dosyaları yükleyip değerlendirin. BUILD dosyalarının yürütülmesi, kuralları basitçe örneklendirir (bir kural her çağrıldığında bir grafiğe eklenir). Makrolar burada değerlendirilir.

  • Analiz aşaması. Kuralların kodu (implementation işlevi) yürütülür ve işlemler örneklenir. İşlem, bir giriş grubundan nasıl bir çıkış grubu oluşturulacağını açıklar (ör. "hello.c üzerinde gcc'yi çalıştır ve hello.o dosyasını al"). Gerçek komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça listelemeniz gerekir. Diğer bir deyişle, analiz aşaması, yükleme aşaması tarafından oluşturulan grafiği alır ve bir işlem grafiği oluşturur.

  • Yürütme aşaması. İşlemler, çıkışlarından en az biri gerektiğinde yürütülür. Bir dosya eksikse veya bir komut bir çıkış oluşturamazsa derleme başarısız olur. Bu aşamada testler de çalıştırılır.

Bazel, .bzl ve BUILD dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellik kullanır. Bir dosya, derleme başına en fazla bir kez okunur ve değerlendirmenin sonucu önbelleğe alınıp yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load() ifadesi) çözüldükten sonra değerlendirilir. Tasarım gereği, .bzl dosyasının yüklenmesi görünür bir yan etkiye sahip değildir. Yalnızca değerleri ve işlevleri tanımlar.

Bazel akıllı olmaya çalışır: Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini öğrenmek için bağımlılık analizini kullanır. Örneğin, bir kural mevcut derleme için ihtiyaç duymadığınız işlemler oluşturursa bu işlemler yürütülmez.

Uzantı oluşturma

Aşağıdaki iki bağlantı, kendi uzantılarınızı yazarken çok faydalı olacaktır. Bunları elinizin altında tutun:

Daha ileri gitme

Makrolar ve kurallara ek olarak yönler ve depo kuralları da yazabilirsiniz.