Существует два типа библиотечных модулей Rust: один для создания библиотек Rust, а другой — для C-совместимых библиотек. Кроме того, для целей сборки системы вы можете рассматривать процедурные макросы Rust ( proc-macros
) как особый тип библиотеки.
rust_library
Модуль rust_library
создает библиотеки Rust для использования другими модулями Rust.
В дополнение к вариантам _host
в библиотеках Rust есть типы модулей, которые управляют доступной компоновкой.
Тип модуля библиотеки Rust | Определение |
---|---|
rust_library | Предоставляет оба варианта библиотеки, rlib и dylib . AOSP рекомендует этот тип модуля для библиотек Rust, так как он позволяет модулям работать правильно, если они перечислены в качестве зависимости в свойстве rustlibs |
rust_library_rlib | Предоставляет только вариант rlib библиотеки Rust; модули, предоставляющие только варианты rlib , не могут гарантировать работу со свойством rustlibs . |
rust_library_dylib | Предоставляет только dylib вариант библиотеки Rust; модули, предоставляющие только варианты dylib , не могут гарантировать работу со свойством rustlibs . |
rust_ffi
Модуль rust_ffi
создает C-совместимые библиотеки для взаимодействия с модулями CC.
В дополнение к вариантам _host
библиотеки Rust FFI имеют типы модулей, которые управляют доступной связью, показанной в следующей таблице.
Тип модуля библиотеки Rust FFI | Определение |
---|---|
rust_ffi | Предоставляет оба варианта библиотеки C: статическую и общую. |
rust_ffi_shared | Предоставляет только вариант общей библиотеки C. |
rust_ffi_static | Предоставляет только вариант статической библиотеки C. |
Базовый пример использования rust_ffi
для вызова Rust из C см. на странице Android Rust Patterns .
Для получения информации о более продвинутом использовании посетите официальную документацию Rust .
rust_proc_macro
Процедурные макросы Rust (proc-macros) могут быть полезны для расширения компилятора для выполнения преобразований исходного кода или предоставления новых атрибутов. Более подробную информацию об этом можно найти на странице « Процедурные макросы » официальной документации Rust.
Для целей системы сборки модуль rust_proc_macro
работает аналогично модулям rust_library
. Для модулей, которые зависят от rust_proc_macros
, добавьте имя модуля в свойство proc_macros
.
Поскольку proc_macros
являются подключаемыми модулями компилятора, они обязательно нацелены на хост и не создают никакого кода, который мог бы работать на устройстве.
Известные свойства библиотеки Rust
Свойства, определенные в таблице ниже, являются дополнением к важным общим свойствам , которые применяются ко всем модулям. Они либо особенно важны для библиотечных модулей Rust, либо демонстрируют уникальное поведение, специфичное для типа модуля rust_library
.
Свойства библиотеки Rust | Определение |
---|---|
стебель / имя | Свойство stem управляет именем файла выходной библиотеки, которое в противном случае по умолчанию имеет значение name . Компилятор Rust предъявляет определенные требования к именам файлов библиотек, и в результате система сборки применяет эти требования, чтобы избежать проблем с компиляцией. Имя выходного файла должно соответствовать формату |
crate_name | Это обязательное свойство для модулей, создающих библиотеки; он дополнительно имеет отношение к выходному имени файла. (См. определение stem .) |
include_dirs | Для модулей rust_ffi это свойство определяет список строк, представляющих относительные пути включения: пути, которые содержат заголовки, которые могут использовать зависимые модули cc . |
Связывание rust_library или rust_ffi
По умолчанию модули библиотеки Rust, предназначенные для устройств, всегда динамически компонуются с libstd
. Хост-модули, однако, всегда статически компонуются с libstd
.
Связывание, используемое для зависимостей rustlibs
зависит от настроек связывания корневых модулей. (Например, rust_binary
с prefer_rlibs
будет использовать варианты библиотеки Rust, которые связывают rustlibs
как rlibs
.)
Чтобы разрешить создание модулей корневой зависимости, которые не зависят от каких-либо динамических библиотек ржавчины (таких как статические исполняемые файлы), rlibs
предоставляет как динамические, так и статические варианты libstd
. Сун автоматически связывает правильный вариант.