Genel bir ilke olarak, rust_*
modül tanımları, kullanıma ve beklentilere cc_*
yakın bir şekilde bağlıdır. Aşağıda, Rust ikili dosyası için bir modül tanımı örneği verilmiştir:
rust_binary {
name: "hello_rust",
crate_name: "hello_rust",
srcs: ["src/hello_rust.rs"],
host_supported: true,
}
Bu sayfada, rust_*
modülleri için en yaygın özellikler ele alınmaktadır. Belirli modül türleri ve örnek modül tanımları hakkında daha fazla bilgi edinmek için İkili modüller, Kitaplık modülleri veya Test modülleri başlıklı makaleleri inceleyin.
Temel modül türleri
Tür | Tanım | Daha Fazla Bilgi Edinmek İçin |
---|---|---|
rust_binary | Rust ikili dosyası | İkili Modüller sayfası |
rust_library | Bir Rust kitaplığı oluşturur ve hem rlib hem de dylib varyantlarını sağlar. |
rust_library ,
Kitaplık Modülleri sayfasına gidin. |
rust_ffi | cc modülleri tarafından kullanılabilen bir Rust C kitaplığı oluşturur ve hem statik hem de paylaşılan varyantlar sağlar. | rust_ffi ,
Kitaplık Modülleri sayfası |
rust_proc_macro | proc-macro Rust kitaplığı oluşturur.
(Bunlar, derleyici eklentilerine benzer.) |
rust_proc_macro ,
Kitaplık Modülleri sayfası |
rust_test | Standart Rust test donanımlarını kullanan bir Rust test ikili dosyası oluşturur. | Test Modülleri sayfası |
rust_fuzz | libfuzzer 'den yararlanan bir Rust fuzz ikilisi oluşturur. |
rust_fuzz modülü örneği |
rust_protobuf | Kaynak oluşturur ve belirli bir protobuf için arayüz sağlayan bir Rust kitaplığı üretir. | Protokol Arabelleği Modülleri ve Kaynak Oluşturucu sayfaları |
rust_bindgen | Kaynak ve C kitaplıklarına Rust bağlamaları içeren bir Rust kitaplığı üretir. | Bindgen Bağlama Modülleri ve Kaynak Oluşturucular sayfaları |
Önemli ortak özellikler
Bu özellikler tüm Android Rust Modüllerinde ortaktır. Bağımsız Rust modülleriyle ilişkili ek (benzersiz) özellikler ilgili modülün sayfasında listelenir.
ad
name
, modülünüzün adıdır. Diğer Soong modülleri gibi bu modül de çoğu Android.bp
modülü türü için benzersiz olmalıdır. Varsayılan olarak, çıkış dosyası adı olarak name
kullanılır. Çıkış dosya adının modül adından farklı olması gerekiyorsa tanımlamak için stem
özelliğini kullanın.
sap
stem
(isteğe bağlı), çıkış dosyası adı üzerinde doğrudan kontrol sağlar (dosya uzantısı ve diğer ekler hariç). Örneğin, kök değeri libfoo
olan bir rust_library_rlib
kitaplığı, libfoo.rlib
dosyası oluşturur. stem
mülkü için bir değer sağlamazsanız çıkış dosyası adı varsayılan olarak modül adını kullanır.
Modül adını istediğiniz çıkış dosya adına ayarlayamıyorsanız stem
işlevini kullanın. Örneğin, log
kutusu için rust_library
liblog cc_library
zaten mevcut olduğundan liblog_rust
olarak adlandırılır. Bu durumda stem
özelliğinin kullanılması, çıkış dosyasının liblog_rust.*
yerine liblog.*
olarak adlandırılmasını sağlar.
src'ler
srcs
, modülünüzün giriş noktasını temsil eden tek bir kaynak dosya içerir (genellikle main.rs
veya lib.rs
). rustc
, derleme için gereken diğer tüm kaynak dosyalarının çözümlenmesini ve bulunmasını yönetir. Bu dosyalar, oluşturulan deps
dosyasında listelenir.
Mümkün olduğunda platform kodunda bu kullanımdan kaçının. Daha fazla bilgi için Kaynak Oluşturucular başlıklı makaleyi inceleyin.
crate_name
crate_name
, rustc
--crate_name
işaretçisi aracılığıyla kutu adı meta verilerini ayarlar. Kitaplık oluşturan modüllerde bu ad, kaynakta kullanılan beklenen kasa adıyla eşleşmelidir. Örneğin, kaynakta libfoo_bar
modülüne extern crate foo_bar
olarak referans veriliyor ise bu, crate_name: "foo_bar" olmalıdır.
Bu özellik tüm rust_*
modülleri için ortaktır ancak Rust kitaplıkları (rust_library
rust_ffi
, rust_bindgen
, rust_protobuf
ve rust_proc_macro
gibi) üreten modüller için zorunludur. Bu modüller, crate_name
ile çıkış dosyası adı arasındaki ilişkide rustc
şartlarını uygular. Daha fazla bilgi için Kitaplık Modülleri bölümüne bakın.
hata analizi
rustc linter, kaynak oluşturucular hariç tüm modül türleri için varsayılan olarak çalıştırılır. Bazı lint kümeleri tanımlanır ve modül kaynağını doğrulamak için kullanılır. Bu tür lint kümeleri için olası değerler şunlardır:
- Modülün konumuna bağlı olarak varsayılan lints grubunu
default
android
Tüm Android platform kodları için geçerli olan en katı lint kümesivendor
tedarikçi koduna uygulanan gevşek bir lint grubu- Tüm lint uyarılarını ve hatalarını yoksaymak için
none
Klipsli tüyler
clippy linter da kaynak oluşturucular hariç tüm modül türleri için varsayılan olarak çalıştırılır. Modül kaynağını doğrulamak için kullanılan birkaç lint grubu tanımlanır. Bazı olası değerler şunlardır:
default
modülün konumuna bağlı olarak varsayılan lint grubuandroid
Tüm Android platform kodları için geçerli olan en katı lint kümesivendor
tedarikçi koduna uygulanan gevşek bir lint grubu- Tüm lint uyarılarını ve hatalarını yoksaymak için
none
basım
edition
, bu kodu derlemek için kullanılacak Rust sürümünü tanımlar. Bu, C ve C++ için std sürümlerine benzer. Geçerli değerler 2015
ve 2018
'dır (varsayılan).
bayraklar
flags
, derleme sırasında rustc
öğesine iletilecek işaretlerin dize listesini içeriyor.
ld_flags
ld-flags
, kaynak derlenirken bağlayıcıya iletilecek işaretlerin dize listesini içerir. Bunlar, -C linker-args
rustc işareti tarafından iletilir. clang
, bağlayıcı ön ucu olarak kullanılır ve gerçek bağlantı için lld
'ı çağırır.
özellikler
features
, derleme sırasında etkinleştirilmesi gereken özelliklerin dize listesidir.
Bu öğe --cfg 'feature="foo"'
tarafından rustc'a geçirildi. Çoğu özellik eklemeli olduğundan çoğu durumda bu, tüm bağımlı modüller tarafından gereken tüm özellik grubundan oluşur. Ancak özelliklerin birbirini hariç tuttuğu durumlarda, derleme dosyalarında çakışan özellikler sağlayan ek modüller tanımlayın.
cfg'ler
cfgs
, derleme sırasında etkinleştirilecek cfg
işaretlerinin dize listesini içerir.
Bu ileti --cfg foo
ve --cfg "fizz=buzz"
tarafından rustc
bölümüne iletildi.
Derleme sistemi, aşağıda listelenen belirli durumlarda belirli cfg
işaretlerini otomatik olarak ayarlar:
dylib olarak oluşturulan modüllerde
android_dylib
cfg ayarlanır.VNDK'yı kullanacak modüllerde
android_vndk
cfg ayarlanır. Bu, C++ için__ANDROID_VNDK__
tanımına benzer.
şerit
strip
, çıkış dosyasının (varsa) soyulup soyulmayacağını ve nasıl soyulacağını kontrol eder.
Bu politika ayarlanmazsa cihaz modülleri, mini hata ayıklama bilgileri hariç varsayılan olarak her şeyi kaldırır.
Ana makine modülleri varsayılan olarak hiçbir sembolü kaldırmaz. Geçerli değerler arasında, çıkarmayı devre dışı bırakmak için none
ve mini hata ayıklama bilgileri de dahil olmak üzere her şeyi kaldırmak için all
bulunur.
Soong Modülleri Referansı bölümünde ek değerler bulunabilir.
ana_makine_destekli
Cihaz modülleri için host_supported
parametresi, modülün ana makine varyantı da sağlaması gerekip gerekmediğini belirtir.
Kitaplık bağımlılıklarını tanımlama
Rust modülleri, aşağıdaki özellikler aracılığıyla hem CC hem de Rust kitaplıklarına bağlı olabilir:
Mülk Adı | Açıklama |
---|---|
rustlibs |
Bağımlılık olan rust_library modüllerinin listesi. Derleme sisteminin tercih edilen bağlantıyı seçmesine olanak tanıdığından, bağımlılıkları bildirmek için bunu tercih ettiğiniz yöntem olarak kullanın. (Aşağıdaki Rust kitaplıklarına bağlantı oluştururken bölümüne bakın.) |
rlibs |
rlibs olarak statik olarak bağlanması gereken rust_library modüllerinin listesi. (Dikkatle kullanın; aşağıdaki Rust kitaplıklarına bağlantı oluştururken bölümüne bakın.) |
shared_libs |
Paylaşılan kitaplıklar şeklinde dinamik olarak bağlanması gereken cc_library modülün listesi. |
static_libs |
Statik kitaplıklar olarak statik olarak bağlanması gereken cc_library modüllerinin listesi. |
whole_static_libs |
Statik kitaplıklar olarak statik olarak bağlanması ve elde edilen kitaplığa rust_ffi_static varyant için whole_static_libraries , elde edilen statik kitaplık arşivine eklenir. rust_library_rlib varyantları için whole_static_libraries kitaplıklar, sonuç olarak elde edilen rlib kitaplığına eklenir.
|
Rust kitaplıklarıyla bağlantı oluştururken, belirli bir nedeniniz yoksa rlibs
veya dylibs
yerine rustlibs
mülkünü kullanarak bağlantı oluşturmanız önerilir. Bu, derleme sisteminin kök modülün gerektirdiğine göre doğru bağlantıyı seçmesine olanak tanır ve bir bağımlılık ağacının bir kitaplığın hem rlib
hem de dylib
sürümlerini içerme olasılığını azaltır (bu da derlemenin başarısız olmasına neden olur).
Desteklenmeyen ve sınırlı destek derleme özellikleri
Soong'un Rust, vendor
ve vendor_ramdisk
resimleri ve anlık görüntüleri için sınırlı destek sunar. Ancak staticlibs
, cdylibs
,
rlibs
ve binaries
desteklenir. Tedarikçi firma görüntüsü derleme hedefleri için android_vndk
cfg
özelliği ayarlanır. Sistem ve tedarikçi hedefleri arasında farklılıklar varsa bunu kodda kullanabilirsiniz. rust_proc_macros
, tedarikçi firma anlık görüntülerinin bir parçası olarak yakalanmaz. Bunlar bağımlıysa uygun şekilde sürüm kontrolü yaptığınızdan emin olun.
Ürün, VNDK ve Kurtarma görüntüleri desteklenmez.
Artımlı derlemeler
Geliştiriciler, SOONG_RUSTC_INCREMENTAL
ortam değişkenini true
değerine ayarlayarak Rust kaynağının artımlı derlemesini etkinleştirebilir.
Uyarı: Bu yöntemin, derleme robotları tarafından oluşturulanlarla aynı ikili dosyaları oluşturacağı garanti edilmez. Nesne dosyalarında bulunan işlevlerin veya verilerin adresleri farklı olabilir. Oluşturulan yapıların, EngProd altyapısı tarafından oluşturulanlarla %100 aynı olduğundan emin olmak için bu değeri ayarlanmamış olarak bırakın.