1*4882a593Smuzhiyun 2*4882a593Smuzhiyunrequire rust-cross-canadian-common.inc 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunRUSTLIB_TARGET_PN = "rust-cross-canadian-rustlib-target-${TRANSLATED_TARGET_ARCH}" 5*4882a593SmuzhiyunRUSTLIB_HOST_PN = "rust-cross-canadian-rustlib-host-${TRANSLATED_TARGET_ARCH}" 6*4882a593SmuzhiyunRUSTLIB_SRC_PN = "rust-cross-canadian-src" 7*4882a593SmuzhiyunRUSTLIB_PKGS = "${RUSTLIB_SRC_PN} ${RUSTLIB_TARGET_PN} ${RUSTLIB_HOST_PN}" 8*4882a593SmuzhiyunPN = "rust-cross-canadian-${TRANSLATED_TARGET_ARCH}" 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunPACKAGES = "${RUSTLIB_PKGS} ${PN}" 11*4882a593SmuzhiyunRDEPENDS:${PN} += "${RUSTLIB_PKGS}" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun# The default behaviour of x.py changed in 1.47+ so now we need to 14*4882a593Smuzhiyun# explicitly ask for the stage 2 compiler to be assembled. 15*4882a593Smuzhiyundo_compile () { 16*4882a593Smuzhiyun rust_runx build --stage 2 17*4882a593Smuzhiyun} 18*4882a593Smuzhiyun 19*4882a593Smuzhiyundo_install () { 20*4882a593Smuzhiyun # Rust requires /usr/lib to contain the libs. 21*4882a593Smuzhiyun # Similar story is with /usr/bin ruquiring `lib` to be at the same level. 22*4882a593Smuzhiyun # The required structure is retained for simplicity. 23*4882a593Smuzhiyun SYS_LIBDIR=$(dirname ${D}${libdir}) 24*4882a593Smuzhiyun SYS_BINDIR=$(dirname ${D}${bindir}) 25*4882a593Smuzhiyun RUSTLIB_DIR=${SYS_LIBDIR}/${TARGET_SYS}/rustlib 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun install -d "${SYS_BINDIR}" 28*4882a593Smuzhiyun cp build/${SNAPSHOT_BUILD_SYS}/stage2/bin/* ${SYS_BINDIR} 29*4882a593Smuzhiyun for i in ${SYS_BINDIR}/*; do 30*4882a593Smuzhiyun chrpath -r "\$ORIGIN/../lib" ${i} 31*4882a593Smuzhiyun done 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun install -d "${D}${libdir}" 34*4882a593Smuzhiyun cp -pRd build/${SNAPSHOT_BUILD_SYS}/stage2/lib/${TARGET_SYS}/*.so ${SYS_LIBDIR} 35*4882a593Smuzhiyun cp -pRd build/${SNAPSHOT_BUILD_SYS}/stage2/lib/${TARGET_SYS}/rustlib ${RUSTLIB_DIR} 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun for i in ${SYS_LIBDIR}/*.so; do 38*4882a593Smuzhiyun chrpath -r "\$ORIGIN/../lib" ${i} 39*4882a593Smuzhiyun done 40*4882a593Smuzhiyun for i in ${RUSTLIB_DIR}/*/lib/*.so; do 41*4882a593Smuzhiyun chrpath -d ${i} 42*4882a593Smuzhiyun done 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun install -m 0644 "${WORKDIR}/targets/${TARGET_SYS}.json" "${RUSTLIB_DIR}" 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun SRC_DIR=${RUSTLIB_DIR}/src/rust 47*4882a593Smuzhiyun install -d ${SRC_DIR}/src/llvm-project 48*4882a593Smuzhiyun cp -R --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/src/llvm-project/libunwind ${SRC_DIR}/src/llvm-project 49*4882a593Smuzhiyun cp -R --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/library ${SRC_DIR} 50*4882a593Smuzhiyun cp --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/Cargo.lock ${SRC_DIR} 51*4882a593Smuzhiyun # Remove executable bit from any files so then SDK doesn't try to relocate. 52*4882a593Smuzhiyun chmod -R -x+X ${SRC_DIR} 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d 55*4882a593Smuzhiyun mkdir "${ENV_SETUP_DIR}" 56*4882a593Smuzhiyun ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun cat <<- EOF > "${ENV_SETUP_SH}" 59*4882a593Smuzhiyun export RUSTFLAGS="--sysroot=\$OECORE_NATIVE_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT -L\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib/${TARGET_SYS}/lib" 60*4882a593Smuzhiyun export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib" 61*4882a593Smuzhiyun EOF 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun chown -R root.root ${D} 64*4882a593Smuzhiyun} 65*4882a593Smuzhiyun 66*4882a593SmuzhiyunPKG_SYS_LIBDIR = "${SDKPATHNATIVE}/usr/lib" 67*4882a593SmuzhiyunPKG_SYS_BINDIR = "${SDKPATHNATIVE}/usr/bin" 68*4882a593SmuzhiyunPKG_RUSTLIB_DIR = "${PKG_SYS_LIBDIR}/${TARGET_SYS}/rustlib" 69*4882a593SmuzhiyunFILES:${PN} = "${PKG_SYS_LIBDIR}/*.so ${PKG_SYS_BINDIR} ${base_prefix}/environment-setup.d" 70*4882a593SmuzhiyunFILES:${RUSTLIB_TARGET_PN} = "${PKG_RUSTLIB_DIR}/${TARGET_SYS} ${PKG_RUSTLIB_DIR}/${TARGET_SYS}.json" 71*4882a593SmuzhiyunFILES:${RUSTLIB_HOST_PN} = "${PKG_RUSTLIB_DIR}/${BUILD_ARCH}-unknown-linux-gnu" 72*4882a593SmuzhiyunFILES:${RUSTLIB_SRC_PN} = "${PKG_RUSTLIB_DIR}/src" 73*4882a593Smuzhiyun 74*4882a593SmuzhiyunSUMMARY:${RUSTLIB_TARGET_PN} = "Rust cross canadian libaries for ${TARGET_SYS}" 75*4882a593SmuzhiyunSUMMARY:${RUSTLIB_HOST_PN} = "Rust cross canadian libaries for ${HOST_SYS}" 76*4882a593SmuzhiyunSUMMARY:${RUSTLIB_SRC_PN} = "Rust standard library sources for cross canadian toolchain" 77*4882a593SmuzhiyunSUMMARY:${PN} = "Rust crost canadian compiler" 78*4882a593Smuzhiyun 79