Genel prensip olarak, rust_*
modül tanımları cc_*
kullanımı ve beklentilerine sıkı sıkıya 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 sayfa, rust_*
modüllerinin en yaygın özelliklerini kapsar. Belirli modül türleri ve örnek modül tanımları hakkında daha fazla bilgi için bkz. İkili modüller , Kitaplık modülleri veya Test modülleri .
Temel modül türleri
Tip | Tanım | Daha fazla bilgi için |
---|---|---|
rust_binary | Bir Rust ikilisi | İkili Modüller sayfası |
rust_library | Bir Rust kitaplığı oluşturur ve hem rlib hem de dylib değişkenlerini sağlar. | rust_library , Kütüphane Modülleri sayfası. |
rust_ffi | Cc modülleri tarafından kullanılabilen bir Rust C kitaplığı üretir ve hem statik hem de paylaşılan değişkenler sağlar. | rust_ffi , Kütüphane Modülleri sayfası |
rust_proc_macro | Bir proc-macro Rust kütüphanesi üretir. (Bunlar derleyici eklentilerine benzer.) | rust_proc_macro , Kitaplıklar Modülleri sayfası |
rust_test | Standart Rust test donanımını kullanan bir Rust test ikili dosyası üretir. | Test Modülleri sayfası |
rust_fuzz | libfuzzer yararlanan bir Rust fuzz ikili dosyası üretir. | rust_fuzz modülü örneği |
rust_protobuf | Kaynak oluşturur ve belirli bir protobuf için arayüz sağlayan bir Rust kütüphanesi üretir. | Protobuf 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ığı üretir. | Bindgen Bağlama Modülleri ve Kaynak Oluşturucu sayfaları |
Önemli ortak özellikler
Bu özellikler tüm Android Rust Modüllerinde ortaktır. Bireysel Rust modülleriyle ilişkili tüm ek (benzersiz) özellikler, o modülün sayfasında listelenir.
isim
name
modülünüzün adıdır. Diğer Soong modülleri gibi bunun da çoğu Android.bp
modül türünde benzersiz olması gerekir. Varsayılan olarak, çıktı dosya adı olarak name
kullanılır. Çıkış dosya adının modül adından farklı olması gerekiyorsa bunu tanımlamak için stem
özelliğini kullanın.
kök
stem
(isteğe bağlı), çıktı dosya adı üzerinde doğrudan kontrol sağlar (dosya uzantısı ve diğer son ekler hariç). Örneğin, libfoo
kök değerine sahip bir rust_library_rlib
kitaplığı, bir libfoo.rlib
dosyası üretir. stem
özelliği için bir değer sağlamazsanız çıktı dosya adı, varsayılan olarak modül adını kullanır.
Modül adını istenen çıktı dosya adına ayarlayamadığınızda stem
işlevini kullanın. Örneğin, log
kasasının rust_library
liblog_rust
olarak adlandırılmıştır çünkü bir liblog cc_library
zaten mevcuttur. Bu durumda stem
özelliğinin kullanılması, çıktı dosyasının liblog.*
yerine liblog_rust.*
olarak adlandırılmasını sağlar.
kaynaklar
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 tüm diğer kaynak dosyaların çözümlenmesini ve keşfedilmesini sağlar ve bunlar, üretilen deps
dosyasında numaralandırılır.
Mümkün olduğunda platform kodu için bu kullanımdan kaçının; Daha fazla bilgi için Kaynak Jeneratörleri'ne bakın.
sandık_adı
crate_name
sandık adı meta verilerini rustc
--crate_name
bayrağı aracılığıyla ayarlar. Kitaplıklar üreten modüller için bu, kaynakta kullanılan beklenen kasa adıyla eşleşmelidir . Örneğin, libfoo_bar
modülüne kaynakta extern crate foo_bar
olarak başvuruluyorsa, bu sandık_adı: "foo_bar" olmalıdır .
Bu özellik tüm rust_*
modülleri için ortaktır ancak Rust kitaplıkları üreten modüller için gereklidir (örneğin, rust_library
rust_ffi
, rust_bindgen
, rust_protobuf
ve rust_proc_macro
). Bu modüller, crate_name
ile çıktı dosya adı arasındaki ilişkiye ilişkin rustc
gerekliliklerini uygular. Daha fazla bilgi için Kütüphane Modülleri bölümüne bakın.
tüyler
Rusc linter, kaynak oluşturucular dışındaki tüm modül türleri için varsayılan olarak çalıştırılır. Bazı tüy kümeleri tanımlanır ve modül kaynağını doğrulamak için kullanılır. Bu tür tüy kümeleri için olası değerler aşağıdaki gibidir:
- modülün konumuna bağlı olarak varsayılan tüy kümesini
default
-
android
tüm Android platform kodları için geçerli olan en katı tüy bırakmayan settir -
vendor
satıcı koduna uygulanan rahat bir tüy bırakmayan dizi -
none
tüm tüy bırakmayan uyarıları ve hataları göz ardı etmek için
Clippy_lints
Clippy linter, kaynak oluşturucular dışındaki 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ç tüy kümesi tanımlanmıştır. Bunlar bazı olası değerlerdir:
- modülün konumuna bağlı olarak
default
varsayılan tüy tiftiği seti -
android
tüm Android platform kodları için geçerli olan en katı tüy bırakmayan settir -
vendor
satıcı koduna uygulanan rahat bir tüy bırakmayan dizi -
none
tüm tüy bırakmayan uyarıları ve hataları göz ardı etmek için
baskı
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
(varsayılan).
bayraklar
flags
derleme sırasında rustc
aktarılacak bayrakların bir dize listesini içerir.
ld_flags
ld-flags
kaynağı derlerken bağlayıcıya iletilecek bayrakların bir dize listesini içerir. Bunlar -C linker-args
Rusc bayrağıyla iletilir. clang
bağlayıcı ön uç 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 bir dize listesidir. --cfg 'feature="foo"'
ile Rusc'a iletilir. Çoğu özellik eklemelidir, dolayısıyla çoğu durumda bu, tüm bağımlı modüllerin gerektirdiği tüm özellikler setinden oluşur. Ancak özelliklerin birbirini dışladığı durumlarda, herhangi bir yapı dosyasında çakışan özellikler sağlayan ek modüller tanımlayın.
CFG'ler
cfgs
derleme sırasında etkinleştirilecek cfg
bayraklarının bir dize listesini içerir. Bu --cfg foo
ve --cfg "fizz=buzz"
tarafından rustc
iletilir.
Yapı sistemi, aşağıda listelenen belirli durumlarda belirli cfg
bayraklarını otomatik olarak ayarlar:
Dylib olarak oluşturulan modüller
android_dylib
cfg setine sahip olacaktır.VNDK'yı kullanacak modüller
android_vndk
cfg setine sahip olacaktır. Bu, C++ için__ANDROID_VNDK__
tanımına benzer.
şerit
strip
çıktı dosyasının çıkarılıp çıkarılmayacağını ve nasıl çıkarılacağını (varsa) kontrol eder. Bu ayarlanmazsa, cihaz modülleri varsayılan olarak mini hata ayıklama bilgisi dışındaki her şeyi çıkarır. Ana bilgisayar modülleri varsayılan olarak hiçbir sembolü çıkarmaz. Geçerli değerler, ayırmayı devre dışı bırakmak için none
ve mini hata ayıklama bilgisi de dahil olmak üzere her şeyi çıkarmak için all
içerir. Ek değerler Soong Modül Referansında bulunabilir.
ana bilgisayar_desteklendi
Cihaz modülleri için host_supported
parametresi, modülün ayrıca bir ana bilgisayar varyantı 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ülkiyet adı | Tanım |
---|---|
rustlibs | Aynı zamanda bağımlılık olan rust_library modüllerinin listesi. Yapı sisteminin tercih edilen bağlantıyı seçmesine olanak tanıdığından, bağımlılıkları bildirmek için tercih ettiğiniz yöntem olarak bunu kullanın. (Aşağıdaki Rust kitaplıklarına bağlantı verirken bölümüne bakın) |
rlibs | Statik olarak rlibs olarak bağlanması gereken rust_library modüllerinin listesi. (Dikkatli kullanın; aşağıdaki Rust kitaplıklarına bağlantı verirken 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 kitaplıklar olarak statik olarak bağlanması ve sonuçta ortaya çıkan kitaplığa tamamen dahil edilmesi gereken cc_library modüllerinin listesi. rust_ffi_static çeşitleri için, whole_static_libraries sonuçta ortaya çıkan statik kitaplık arşivine dahil edilecektir. rust_library_rlib çeşitleri için, whole_static_libraries kitaplıkları sonuçtaki rlib kitaplığında paketlenecektir. |
Rust kitaplıklarına karşı bağlantı oluştururken , en iyi uygulama olarak, özel bir nedeniniz olmadığı sürece bunu rlibs
veya dylibs
yerine rustlibs
özelliğini kullanarak yapın. 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, derlemenin başarısız olmasına neden olur).
Desteklenmeyen ve sınırlı destek oluşturma özellikleri
Soong's Rust , vendor
ve vendor_ramdisk
görüntüleri ve anlık görüntüleri için sınırlı destek sunar. Ancak staticlibs
, cdylibs
, rlibs
ve binaries
desteklenir. Satıcı imajı oluşturma hedefleri için android_vndk
cfg
özelliği ayarlanır. Sistem ve satıcı hedefleri arasında farklar varsa bunu kodda kullanabilirsiniz. rust_proc_macros
satıcı anlık görüntülerinin bir parçası olarak yakalanmaz; bunlara bağlıysa, bunların sürüm kontrolünü uygun şekilde 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ştirebilirler.
Uyarı : Bunun, buildbot'lar tarafından oluşturulanlarla aynı ikili dosyalar üreteceği garanti edilmez. Nesne dosyalarının içerdiği işlevlerin veya verilerin adresleri farklı olabilir. Oluşturulan yapıtların EngProd altyapısı tarafından oluşturulanlarla %100 aynı olduğundan emin olmak için bu değeri ayarlamadan bırakın.