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:
default
Modülün konumuna bağlı olarak varsayılan lint kümesiandroid
Tüm Android platform kodu için geçerli olan en katı lint kümesivendor
satı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
default
varsayılan lint kümesi android
Tüm Android platform kodu için geçerli olan en katı lint kümesivendor
satı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_dylib
cfg ayarlanır.VNDK'yı kullanacak modüllerde
android_vndk
cfg 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.