Genel bir ilke olarak, rust_* modül tanımları, cc_* kullanımına ve beklentilerine yakından bağlıdır. Aşağıda, Rust ikilisi 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üllerinin en yaygın özellikleri ele alınmaktadır. Belirli modül türleri ve örnek modül tanımları hakkında daha fazla bilgi 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 | Rust kitaplığı oluşturur ve hem rlib hem de dylib varyantlarını sağlar. |
rust_library,
Kitaplık Modülleri sayfası. |
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 koşumunu kullanan bir Rust test ikilisi oluşturur. | Test Modülleri sayfası |
rust_fuzz | libfuzzer kullanarak 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. | Protobufs Modules (Protobuf Modülleri) ve Source Generators (Kaynak Oluşturucular) sayfaları |
rust_bindgen | Kaynak oluşturur 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 tüm ek (benzersiz) özellikler, ilgili modülün sayfasında listelenir.
ad
name, modülünüzün adıdır. Diğer Soong modüllerinde olduğu gibi, bu da çoğu Android.bp modül türünde benzersiz olmalıdır. Varsayılan olarak, çıkış dosya adı olarak name kullanılır. Çıkış dosyasının adı, modül adından farklı olmalıdır. Bu durumda, adı tanımlamak için stem özelliğini kullanın.
kök
stem (isteğe bağlı) çıkış dosyasının adı (dosya uzantısı ve diğer sonekler hariç) üzerinde doğrudan kontrol sağlar. Örneğin, rust_library_rlib
kök değeri libfoo olan bir kitaplık, libfoo.rlib dosyası oluşturur. stem özelliği için bir değer sağlamazsanız çıkış dosyasının adı varsayılan olarak modül adı olur.
Modül adını istediğiniz çıkış dosyası adına ayarlayamadığınızda stem işlevini kullanın. Örneğin, log kasası 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.
srcs
srcs, modülünüzün giriş noktasını temsil eden tek bir kaynak dosyayı (genellikle main.rs veya lib.rs) içerir. rustc, derleme için gereken diğer tüm kaynak dosyaların çözümlenmesini ve bulunmasını sağlar. Bu dosyalar, oluşturulan deps dosyasında listelenir.
Mümkün olduğunda platform kodu için 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şaretiyle paket adı meta verilerini ayarlar. Kitaplık üreten modüller için bu, kaynakta kullanılan beklenen sandık adıyla eşleşmelidir. Örneğin, kaynakta libfoo_bar modülüne extern crate foo_bar olarak referans veriliyorsa bu crate_name, "foo_bar" olmalıdır.
Bu özellik tüm rust_* modüllerinde ortaktır ancak rust_library (rust_ffi, rust_bindgen, rust_protobuf ve rust_proc_macro gibi) Rust kitaplıkları oluşturan modüller için zorunludur. Bu modüller, crate_name ile çıkış dosyasının adı arasındaki ilişkiyle ilgili rustc şartlarını zorunlu kılar. 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, modül kaynağını doğrulamak için tanımlanır ve kullanılır. Bu tür lint kümeleri için olası değerler şunlardır:
defaultModülün konumuna bağlı olarak varsayılan lint kümesiandroidTüm Android platform kodu için geçerli olan en katı lint kümesivendorsatıcı koduna uygulanan gevşek bir lint kümesi- Tüm lint uyarılarını ve hatalarını yoksaymak için
none
clippy_lints
Clippy linter, kaynak oluşturucular hariç tüm modül türleri için varsayılan olarak da çalıştırılır. Modül kaynağını doğrulamak için kullanılan birkaç lint kümesi tanımlanır. Olası değerlerden bazıları şunlardır:
- Modülün konumuna bağlı olarak
defaultvarsayılan lint kümesi androidTüm Android platform kodu için geçerli olan en katı lint kümesivendorsatıcı koduna uygulanan gevşek bir lint kümesi- 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, 2018 ve 2021'dir (varsayılan).
flags
flags, derleme sırasında rustc'ye iletilecek işaretlerin dize listesini içerir.
ld_flags
ld-flags, kaynak derlenirken bağlayıcıya iletilecek işaretlerin dize listesini içerir. Bunlar, -C linker-args rustc işaretiyle iletilir. clang, bağlayıcı ön ucu olarak kullanılır ve gerçek bağlama için lld çağrılır.
özellikler
features, derleme sırasında etkinleştirilmesi gereken özelliklerin dize listesidir.
Bu, --cfg 'feature="foo"' tarafından rustc'ye iletilir. Çoğu özellik eklenir. Bu nedenle, birçok durumda bu, tüm bağımlı modüllerin gerektirdiği tam özellik setinden oluşur. Ancak özelliklerin birbirini dışladığı durumlarda, çakışan özellikler sağlayan tüm derleme dosyalarında ek modüller tanımlayın.
cfgs
cfgs, derleme sırasında etkinleştirilecek cfg işaretlerinin dize listesini içerir.
Bu, --cfg foo ve --cfg "fizz=buzz" tarafından rustc'a iletilir.
Derleme sistemi, belirli durumlarda aşağıdaki cfg işaretlerini otomatik olarak ayarlar:
Dinamik kitaplık olarak oluşturulan modüllerde
android_dylibcfg ayarlanır.VNDK'yı kullanacak modüllerde
android_vndkcfg ayarı bulunur. Bu, C++ için__ANDROID_VNDK__tanımına benzer.
strip
strip, çıktı dosyasının (varsa) temizlenip temizlenmeyeceğini ve nasıl temizleneceğini kontrol eder.
Bu ayar belirlenmemişse cihaz modülleri, mini debuginfo hariç her şeyi varsayılan olarak kaldırır.
Varsayılan olarak, ana makine modülleri sembolleri kaldırmaz. Geçerli değerler arasında, none ile sıyırma işlemini devre dışı bırakma ve all ile mini debuginfo dahil her şeyi sıyırma yer alır.
Ek değerleri Soong Modules Reference (Soong Modülleri Referansı) bölümünde bulabilirsiniz.
host_supported
Cihaz modüllerinde host_supported parametresi, modülün bir ana makine varyantı da sağlayıp sağlamaması gerektiğini gösterir.
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 |
Aynı zamanda bağımlılık olan rust_library modüllerinin listesi. Bu yöntemi, derleme sisteminin tercih edilen bağlantıyı seçmesine olanak tanıdığı için tercih ettiğiniz bağımlılık bildirme yöntemi olarak kullanın. (Aşağıdaki Rust kitaplıklarına bağlama bölümüne bakın.) |
rlibs |
rust_library olarak statik olarak bağlanması gereken rlibs modüllerinin listesi. (Dikkatli kullanın; aşağıdaki Rust kitaplıklarına bağlarken bölümüne bakın.) |
shared_libs |
Paylaşılan kitaplıklar olarak dinamik şekilde bağlanması gereken cc_library modüllerinin 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 sonuçtaki kitaplığa tamamen dahil edilmesi gereken cc_library modüllerinin listesi. rust_ffi_static varyantları için whole_static_libraries, sonuçta ortaya çıkan statik kitaplık arşivine dahil edilir. rust_library_rlib varyantları için whole_static_libraries kitaplıkları, sonuçta elde edilen rlib kitaplığına paketlenir.
|
Rust kitaplıklarına bağlarken, en iyi uygulama olarak, bunu yapmak için özel bir nedeniniz olmadığı sürece rlibs veya dylibs yerine rustlibs özelliğini kullanarak yapın. Bu, derleme sisteminin kök modülün gerektirdiklerine göre doğru bağlantıyı seçmesine olanak tanır ve 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 durum derlemenin başarısız olmasına neden olur).
Desteklenmeyen ve sınırlı desteklenen derleme özellikleri
Soong's Rust, vendor ve vendor_ramdisk resimleri ile anlık görüntüler için sınırlı destek sunar. Ancak staticlibs, cdylibs, rlibs ve binaries desteklenir. Tedarikçi resim derleme hedefleri için android_vndk cfg özelliği ayarlanır. Sistem ve satıcı hedefleri arasında farklılıklar varsa bunu kodda kullanabilirsiniz. rust_proc_macros satıcı anlık görüntülerinin bir parçası olarak yakalanmaz. Bunlar kullanılıyorsa 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 olarak ayarlayarak Rust kaynağının artımlı derlenmesini etkinleştirebilir.
Uyarı: Bu işlem, derleme botları tarafından oluşturulanlarla aynı ikili dosyaları üreteceği 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ı olmasını sağlamak için bu değeri ayarlamayın.