라이브러리 모듈

Rust 라이브러리 모듈에는 두 가지 유형이 있습니다. 하나는 Rust 라이브러리를 생성하고 다른 하나는 C 호환 라이브러리를 생성합니다. 또한 빌드 시스템 목적을 위해 Rust 절차 매크로( proc-macros )를 라이브러리의 특수 유형으로 고려할 수 있습니다.

Rust_library

rust_library 모듈은 다른 Rust 모듈에서 사용할 Rust 라이브러리를 생성합니다.

_host 변형 외에도 Rust 라이브러리에는 사용 가능한 연결을 제어하는 ​​모듈 유형이 있습니다.

Rust 라이브러리 모듈 유형 정의
Rust_library 라이브러리 변형인 rlibdylib 를 모두 제공합니다. AOSP는 rustlibs 속성 아래에 종속성으로 나열될 때 모듈이 올바르게 작동하도록 허용하므로 Rust 라이브러리에 이 모듈 유형을 권장합니다.
Rust_library_rlib Rust 라이브러리의 rlib 변형만 제공합니다. rlib 변형만 제공하는 모듈은 rustlibs 속성과 함께 작동한다고 보장할 수 없습니다.
Rust_library_dylib Rust 라이브러리의 dylib 변형만 제공합니다. dylib 변형만 제공하는 모듈은 rustlibs 속성과 함께 작동한다고 보장할 수 없습니다.

Rust_ffi

rust_ffi 모듈은 CC 모듈과 상호 운용할 수 있는 C 호환 라이브러리를 생성합니다.

_host 변형 외에도 Rust FFI 라이브러리에는 다음 표에 표시된 대로 사용 가능한 연결을 제어하는 ​​모듈 유형이 있습니다.

Rust FFI 라이브러리 모듈 유형 정의
Rust_ffi 정적 및 공유 C 라이브러리 변형을 모두 제공합니다.
Rust_ffi_shared C 공유 라이브러리 변형만 제공합니다.
Rust_ffi_static C 정적 라이브러리 변형만 제공합니다.

C에서 Rust를 호출하기 위해 rust_ffi 를 사용하는 기본 예제는 Android Rust Patterns 페이지를 참조하세요.

고급 사용법에 대한 정보는 공식 Rust 문서 를 참조하십시오.

Rust_proc_macro

Rust 절차 매크로(proc-macro)는 컴파일러를 확장하여 소스 코드 변환을 수행하거나 새 속성을 제공하는 데 유용할 수 있습니다. 자세한 정보는 공식 Rust 문서의 Procedural Macros 페이지에서 찾을 수 있습니다.

빌드 시스템의 목적을 위해 rust_proc_macro 모듈은 rust_library 모듈과 유사하게 작동합니다. rust_proc_macros 에 의존하는 모듈의 경우 proc_macros 속성에 모듈 이름을 추가하십시오.

proc_macros 는 컴파일러 플러그인이므로 반드시 호스트를 대상으로 하며 장치에서 실행되는 코드를 생성하지 않습니다.

주목할만한 Rust 라이브러리 속성

아래 표에 정의된 속성은 모든 모듈에 적용되는 중요 공통 속성 에 추가됩니다. 이것은 Rust 라이브러리 모듈에 특히 중요하거나 rust_library 모듈 유형에 고유한 동작을 나타냅니다.

Rust 라이브러리 속성 정의
줄기 / 이름 stem 속성은 출력 라이브러리 파일 이름을 제어합니다. 그렇지 않으면 기본값은 name 입니다.

Rust 컴파일러는 라이브러리 파일 이름에 특정 요구 사항을 부과하고 결과적으로 빌드 시스템은 컴파일 문제를 피하기 위해 이러한 요구 사항을 적용합니다. 출력 파일 이름은 lib<crate_name><suffix> 형식을 따라야 합니다. (여기에는 crate_name 속성에 대한 종속성이 있습니다.)

크레이트 이름 이것은 라이브러리 생성 모듈의 필수 속성입니다. 또한 출력 파일 이름과도 관계가 있습니다. ( stem 정의를 참조하십시오.)
include_dirs rust_ffi 모듈의 경우 이 속성은 상대 포함 경로를 나타내는 문자열 목록을 정의합니다. 종속 cc 모듈이 사용할 수 있는 헤더가 포함된 경로입니다.

Rust_library 또는 rust_ffi의 연결

기본적으로 장치를 대상으로 하는 Rust 라이브러리 모듈은 항상 libstd 에 대해 동적으로 연결됩니다. 그러나 호스트 모듈은 항상 libstd 에 대해 정적으로 연결됩니다.

rustlibs 종속성에 사용되는 연결은 루트 모듈 연결 기본 설정에 따라 다릅니다. (예를 들어, rust_binary 가 있는 prefer_rlibsrlibsrustlibs 로 연결하는 Rust 라이브러리 변형을 사용합니다.)

동적 Rust 라이브러리(예: 정적 실행 파일)에 의존하지 않는 루트 종속성 모듈을 생성할 수 있도록 rlibs 는 동적 및 정적 libstd 연결 변형을 모두 제공합니다. 올바른 변형은 Soong에 의해 자동으로 연결됩니다.