1*4882a593Smuzhiyun## 2*4882a593Smuzhiyun## Purpose: 3*4882a593Smuzhiyun## This class is used by any recipes that are built using 4*4882a593Smuzhiyun## Cargo. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyuninherit cargo_common 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun# the binary we will use 9*4882a593SmuzhiyunCARGO = "cargo" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun# We need cargo to compile for the target 12*4882a593SmuzhiyunBASEDEPENDS:append = " cargo-native" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun# Ensure we get the right rust variant 15*4882a593SmuzhiyunDEPENDS:append:class-target = " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}" 16*4882a593SmuzhiyunDEPENDS:append:class-nativesdk = " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}" 17*4882a593SmuzhiyunDEPENDS:append:class-native = " rust-native" 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun# Enable build separation 20*4882a593SmuzhiyunB = "${WORKDIR}/build" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# In case something fails in the build process, give a bit more feedback on 23*4882a593Smuzhiyun# where the issue occured 24*4882a593Smuzhiyunexport RUST_BACKTRACE = "1" 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun# The directory of the Cargo.toml relative to the root directory, per default 27*4882a593Smuzhiyun# assume there's a Cargo.toml directly in the root directory 28*4882a593SmuzhiyunCARGO_SRC_DIR ??= "" 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# The actual path to the Cargo.toml 31*4882a593SmuzhiyunMANIFEST_PATH ??= "${S}/${CARGO_SRC_DIR}/Cargo.toml" 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunRUSTFLAGS ??= "" 34*4882a593SmuzhiyunBUILD_MODE = "${@['--release', ''][d.getVar('DEBUG_BUILD') == '1']}" 35*4882a593SmuzhiyunCARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} ${BUILD_MODE} --manifest-path=${MANIFEST_PATH}" 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun# This is based on the content of CARGO_BUILD_FLAGS and generally will need to 38*4882a593Smuzhiyun# change if CARGO_BUILD_FLAGS changes. 39*4882a593SmuzhiyunBUILD_DIR = "${@['release', 'debug'][d.getVar('DEBUG_BUILD') == '1']}" 40*4882a593SmuzhiyunCARGO_TARGET_SUBDIR="${HOST_SYS}/${BUILD_DIR}" 41*4882a593Smuzhiyunoe_cargo_build () { 42*4882a593Smuzhiyun export RUSTFLAGS="${RUSTFLAGS}" 43*4882a593Smuzhiyun export RUST_TARGET_PATH="${RUST_TARGET_PATH}" 44*4882a593Smuzhiyun bbnote "cargo = $(which ${CARGO})" 45*4882a593Smuzhiyun bbnote "rustc = $(which ${RUSTC})" 46*4882a593Smuzhiyun bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" 47*4882a593Smuzhiyun "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@" 48*4882a593Smuzhiyun} 49*4882a593Smuzhiyun 50*4882a593Smuzhiyundo_compile[progress] = "outof:\s+(\d+)/(\d+)" 51*4882a593Smuzhiyuncargo_do_compile () { 52*4882a593Smuzhiyun oe_cargo_fix_env 53*4882a593Smuzhiyun oe_cargo_build 54*4882a593Smuzhiyun} 55*4882a593Smuzhiyun 56*4882a593Smuzhiyuncargo_do_install () { 57*4882a593Smuzhiyun local have_installed=false 58*4882a593Smuzhiyun for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do 59*4882a593Smuzhiyun case $tgt in 60*4882a593Smuzhiyun *.so|*.rlib) 61*4882a593Smuzhiyun install -d "${D}${rustlibdir}" 62*4882a593Smuzhiyun install -m755 "$tgt" "${D}${rustlibdir}" 63*4882a593Smuzhiyun have_installed=true 64*4882a593Smuzhiyun ;; 65*4882a593Smuzhiyun *examples) 66*4882a593Smuzhiyun if [ -d "$tgt" ]; then 67*4882a593Smuzhiyun for example in "$tgt/"*; do 68*4882a593Smuzhiyun if [ -f "$example" ] && [ -x "$example" ]; then 69*4882a593Smuzhiyun install -d "${D}${bindir}" 70*4882a593Smuzhiyun install -m755 "$example" "${D}${bindir}" 71*4882a593Smuzhiyun have_installed=true 72*4882a593Smuzhiyun fi 73*4882a593Smuzhiyun done 74*4882a593Smuzhiyun fi 75*4882a593Smuzhiyun ;; 76*4882a593Smuzhiyun *) 77*4882a593Smuzhiyun if [ -f "$tgt" ] && [ -x "$tgt" ]; then 78*4882a593Smuzhiyun install -d "${D}${bindir}" 79*4882a593Smuzhiyun install -m755 "$tgt" "${D}${bindir}" 80*4882a593Smuzhiyun have_installed=true 81*4882a593Smuzhiyun fi 82*4882a593Smuzhiyun ;; 83*4882a593Smuzhiyun esac 84*4882a593Smuzhiyun done 85*4882a593Smuzhiyun if ! $have_installed; then 86*4882a593Smuzhiyun die "Did not find anything to install" 87*4882a593Smuzhiyun fi 88*4882a593Smuzhiyun} 89*4882a593Smuzhiyun 90*4882a593SmuzhiyunEXPORT_FUNCTIONS do_compile do_install 91