blob: d04f60df3d332fcf7e85220361c421e46e67cc26 [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{406:function(t,a,e){"use strict";e.r(a);var s=e(11),l=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"building-rust-ca-as-android-elf"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#building-rust-ca-as-android-elf"}},[t._v("#")]),t._v(" Building Rust CA as Android ELF")]),t._v(" "),e("p",[t._v("In Teaclave TrustZone SDK, example CAs are built as ARM64 Linux ELF by default.\nBesides, you can follow these steps to build Rust CAs running on the Android\nplatform:")]),t._v(" "),e("ol",[e("li",[t._v("Download Android NDK toolchain")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("$ wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip\n$ unzip android-ndk-r21e-linux-x86_64.zip\n")])])]),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Add the android target")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("$ rustup target add aarch64-linux-android\n")])])]),e("ol",{attrs:{start:"3"}},[e("li",[t._v("Set toolchains for the target. Add PATH env:")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("export PATH=$PATH:/your/path/to/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/\n")])])]),e("ol",{attrs:{start:"4"}},[e("li",[t._v("Edit "),e("code",[t._v("incubator-teaclave-trustzone-sdk/.cargo/config")]),t._v(", add:")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('[target.aarch64-linux-android]\nlinker = "aarch64-linux-android28-clang"\nar = "aarch64-linux-android-ar"\n')])])]),e("ol",{attrs:{start:"5"}},[e("li",[t._v("Copy Android libteec.so to\n"),e("code",[t._v("/incubator-teaclave-trustzone-sdk/optee/optee_client/out/export/usr/lib")]),t._v(".")])]),t._v(" "),e("ul",[e("li",[t._v("Note: If you've not built the libteec.so of Android, you can build it using:")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("$ cd /path/to/optee/optee_client/\n$ ndk-build APP_BUILD_SCRIPT=./Android.mk NDK_PROJECT_PATH=. NDK_LOG=1 APP_PLATFORM=android-29\n")])])]),e("ol",{attrs:{start:"6"}},[e("li",[t._v("Modify CA's Makefile:")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("NAME := hello_world-rs\nTARGET := aarch64-linux-android\nOPTEE_DIR ?= ../../../optee\nOUT_DIR := $(CURDIR)/target/$(TARGET)/release\n\nall: host\n\nhost:\n @cargo build --target $(TARGET) --release --verbose\nclean:\n @cargo clean\n")])])]),e("ol",{attrs:{start:"7"}},[e("li",[t._v("build:")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("$ make -C examples/hello_world-rs/host\n")])])])])}),[],!1,null,null,null);a.default=l.exports}}]);