1# Copyright (C) 2022 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# 15 16LOCAL_DIR := $(GET_LOCAL_DIR) 17 18MODULE := $(LOCAL_DIR) 19 20MANIFEST := $(LOCAL_DIR)/manifest.json 21 22MODULE_SRCS += \ 23 $(LOCAL_DIR)/lib.rs \ 24 25MODULE_CRATE_NAME := keymint 26 27MODULE_LIBRARY_DEPS += \ 28 trusty/user/base/interface/keybox \ 29 trusty/user/base/lib/hwbcc/rust \ 30 trusty/user/base/lib/hwkey/rust \ 31 trusty/user/base/lib/hwwsk/rust \ 32 trusty/user/base/lib/keymint-rust/boringssl \ 33 trusty/user/base/lib/keymint-rust/common \ 34 trusty/user/base/lib/keymint-rust/ta \ 35 $(call FIND_CRATE,log) \ 36 trusty/user/base/lib/storage/rust \ 37 trusty/user/base/lib/tipc/rust \ 38 trusty/user/base/lib/system_state/rust \ 39 trusty/user/base/lib/trusty-log \ 40 trusty/user/base/lib/trusty-std \ 41 42# Special case discovery of the path to the right protobuf crate 43# since the way older versions are located changed with the switch 44# to the rust crate monorepo. This can be simplified to just use 45# `FIND_CRATE` once all Trusty manifests use the monorepo. 46ifneq ($(wildcard external/rust/crates/protobuf/2.27.1/rules.mk),) 47MODULE_LIBRARY_DEPS += external/rust/crates/protobuf/2.27.1 48else 49MODULE_LIBRARY_DEPS += $(call FIND_CRATE,protobuf) 50endif 51 52ifdef TRUSTY_KM_RUST_ACCESS_POLICY 53 MODULE_LIBRARY_DEPS+= $(TRUSTY_KM_RUST_ACCESS_POLICY) 54else 55 MODULE_LIBRARY_DEPS+= trusty/user/app/keymint/generic_access_policy 56endif 57 58MODULE_RUSTFLAGS += \ 59 --cfg 'feature="soft_attestation_fallback"' \ 60 --cfg 'feature="auto_second_imei"' \ 61 62MODULE_RUST_TESTS := true 63 64# The port tests are built and installed regardless of whether the KeyMint Rust TA 65# is enabled, so set a config value to allow tests that involve the TA to be skipped. 66ifeq (rust,$(TRUSTY_KEYMINT_IMPL)) 67 MODULE_RUSTFLAGS += --cfg 'kmr_enabled' 68endif 69 70MODULE_BINDGEN_ALLOW_TYPES := \ 71 keybox.* \ 72 73MODULE_BINDGEN_ALLOW_FUNCTIONS := \ 74 trusty_rng_.* \ 75 76MODULE_BINDGEN_ALLOW_VARS := \ 77 KEYBOX.* \ 78 79MODULE_BINDGEN_SRC_HEADER := $(LOCAL_DIR)/bindings.h 80 81MODULE_RUST_USE_CLIPPY := true 82 83include make/library.mk 84