xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/rust/rust-cross-canadian.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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