Genel bir ilke olarak, rust_*
modülü tanımları
cc_*
kullanımı ve beklentileri. 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üllerde en sık kullanılan ö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 | Pas ikili programı | İkili Modüller sayfasına gidin. |
rust_library | Bir Rust kitaplığı oluşturur ve hem rlib hem de dylib varyantlarını sağlar. |
rust_library ,
Kitaplık Modülleri sayfası. |
rust_ffi | CC 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.
(Bu, derleyici eklentilerine benzer.) |
rust_proc_macro ,
Kitaplıklar 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 | Veriden yararlanan bir Rust fuzz ikilisi
libfuzzer . |
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 oluşturur ve C kitaplıklarına Rust bağlamaları içeren bir Rust kitaplığı oluşturur. | Bindgen Bağlama Modülleri ve Kaynak Oluşturucular sayfaları |
Önemli ortak özellikler
Bu özellikler tüm Android Rust modülleri için 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ış olarak name
kullanılır
dosya adı. Çıkış dosya adının modül adından farklı olması gerekiyorsa
stem
özelliğini kullanmanız gerekir.
sap
stem
(isteğe bağlı), çıkış dosya adı üzerinde doğrudan kontrol sağlar (
dosya uzantısı ve diğer son ekler gibi). Örneğin, rust_library_rlib
kök değeri libfoo
olan kitaplık bir 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ı alır.
Modül adını istediğiniz çıkış dosya adına ayarlayamadığınızda stem
işlevini kullanın. Örneğin, log
kasasının rust_library
adı
liblog_rust
,
çünkü liblog cc_library
zaten var. Bu durumda stem
özelliğini kullanmak, çıkışın
dosyasının adı liblog_rust.*
yerine liblog.*
.
srcs
srcs
,
modülünü (genellikle main.rs
veya lib.rs
) içerir. Çözünürlüğü rustc
işler ve
ve bunlar, derleme için gereken diğer tüm kaynak dosyaların
oluşturulan deps
dosyasında numaralandırılır.
Mümkün olduğunda platform kodunda bu kullanımdan kaçının. Daha fazla bilgi için Kaynak Oluşturucular bölümüne bakın.
sandık_adı
crate_name
, rustc
--crate_name
işaretçisi aracılığıyla kutu adı meta verilerini ayarlar. Kitaplık oluşturan modüllerde bu, beklenen ile eşleşmelidir
kaynakta kullanılan kasa adı. Ö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 analizleri
rustc lint işlevi, 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'ler için olası değerler kümeleri şu şekildedir:
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 grubuvendor
tedarikçi firma 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, 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 grubu tanımlanır. Bazı olası işlemler değerleri:
- Modülün konumuna bağlı olarak
default
varsayılan lints grubu android
tüm Android platform kodları için geçerli olan en katı lint grubuvendor
tedarikçi firma koduna uygulanan gevşek bir lint grubu- Tüm lint uyarılarını ve hatalarını yoksaymak için
none
basım
edition
, kullanılacak Rust sürümünü tanımlar
bu kodu derlemek. Bu, C ve C++ için std sürümlerine benzer. Geçerli değerler 2015
ve 2018
'tır (varsayılan).
flags
flags
, derleme sırasında rustc
öğesine iletilecek işaretlerin dize listesini içeriyor.
ld_bayrakları
ld-flags
, kaynak derlenirken bağlayıcıya iletilecek işaretlerin dize listesini içerir. Bunlar -C linker-args
rustc işareti ile geçilir. clang
, bağlayıcı ön ucu olarak kullanılır ve gerçek bağlantı için lld
çağrılı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 katkıdır,
Böylece çoğu durumda bu, bağımlı olan tüm SDK'ların gerektirdiği özelliklerin
modüllerinde yer alır. Ancak özelliklerin birbirinin dışında olduğu durumlarda,
çakışan özellikler sunan derleme dosyalarında ek modüller tanımlama.
cfgs
cfgs
, derleme sırasında etkinleştirilecek cfg
işaretinin dize listesini içeriyor.
Bu değer, --cfg foo
ve --cfg "fizz=buzz"
tarafından rustc
'e iletilir.
Derleme sistemi özellikle belirli cfg
işaretlerini otomatik olarak ayarlar
durumlar, aşağıda listelenmiştir:
Dlib olarak oluşturulan modüllerde
android_dylib
cfg grubu bulunur.VNDK'yı kullanacak modüller
android_vndk
cfg ayarını içerir. Bu, C++ için__ANDROID_VNDK__
tanımına benzer.
şerit
strip
, çıkış dosyasının çıkarılıp çıkarılmayacağını ve nasıl çıkarılacağını (varsa) 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, ayıklama işlemini devre dışı bırakmak için none
ve mini hata ayıklama bilgileri dahil her şeyi ayıklamak için all
bulunur.
Diğer değerleri Soong Modülleri Referansı bölümünde bulabilirsiniz.
ana_makine_destekli
Cihaz modüllerinde host_supported
parametresi, modülün
bir ana makine varyantı da sağlamalıdır.
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. Bunu şu şekilde kullan:
bağımlılıkları bildirmeyi tercih ettiğiniz yöntemi kullanır. Bu, derleme sisteminin
tercih edilen bağlantıyı
seçin. (Aşağıdaki Rust kitaplıklarına bağlantı oluştururken bölümüne göz atı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 olarak dinamik olarak 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 olarak bulunması gereken cc_library modülün listesi
statik kitaplıklar olarak bağlanır ve sonuç olarak elde edilen kitaplığa bütün olarak eklenir. rust_ffi_static varyantları için whole_static_libraries , elde edilen statik kitaplık arşivine dahil edilir. rust_library_rlib varyant için
whole_static_libraries kitaplık, sonuç olarak elde edilen rlib içinde birleştirilecek
kitaplığını tanıtır.
|
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ı destekli 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 resim derleme hedefleri için android_vndk
cfg
mülkü ayarlanır. Varsa bunu kodda kullanabilirsiniz
arasındaki farkları konuşacağız. rust_proc_macros
değil
tedarikçi anlık görüntülerinin bir parçası olarak yakalanır. ve bunlara güveniyorsanız
sürüm denetimi yapması gerekir.
Ü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ı derlemesini etkinleştirebilir.
Uyarı: Bunun, şunlarla aynı olan ikili programlar üretmesi garanti edilmez oluşturmak için kullanılır. Nesne dosyalarında bulunan işlevlerin veya verilerin adresleri farklı olabilir. Oluşturulan yapıların %100 olduğundan emin olmak gibi bir sürüm oluşturuyorsa bu değeri ayarlamadan bırakın.