diff --git a/meta/classes/rust-common.bbclass b/meta/classes/rust-common.bbclass index f7f9cbbb2e..98d65970e8 100644 --- a/meta/classes/rust-common.bbclass +++ b/meta/classes/rust-common.bbclass @@ -1,3 +1,5 @@ +inherit python3native + # Common variables used by all Rust builds export rustlibdir = "${libdir}/rust" FILES:${PN} += "${rustlibdir}/*.so" @@ -133,8 +135,12 @@ create_wrapper () { shift cat <<- EOF > "${file}" - #!/bin/sh - exec $@ "\$@" + #!/usr/bin/env python3 + import os, sys + orig_binary = "$@" + binary = orig_binary.split()[0] + args = orig_binary.split() + sys.argv[1:] + os.execvp(binary, args) EOF chmod +x "${file}" } @@ -169,11 +175,6 @@ do_rust_create_wrappers () { # Yocto Target / Rust Target archiver create_wrapper "${RUST_TARGET_AR}" "${WRAPPER_TARGET_AR}" - # Need to filter out LD_LIBRARY_PATH from the linker without using shell - mv ${RUST_BUILD_CCLD} ${RUST_BUILD_CCLD}.real - ${BUILD_CC} ${COREBASE}/meta/files/rust-ccld-wrapper.c -o ${RUST_BUILD_CCLD} - mv ${RUST_TARGET_CCLD} ${RUST_TARGET_CCLD}.real - ${BUILD_CC} ${COREBASE}/meta/files/rust-ccld-wrapper.c -o ${RUST_TARGET_CCLD} } addtask rust_create_wrappers before do_configure after do_patch do_prepare_recipe_sysroot diff --git a/meta/files/rust-ccld-wrapper.c b/meta/files/rust-ccld-wrapper.c deleted file mode 100644 index 6bc9958b90..0000000000 --- a/meta/files/rust-ccld-wrapper.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2021 Richard Purdie - * - * SPDX-License-Identifier: GPL-2.0-only - */ - -#include -#include -#include -#include -#include - -/* - * Run the original script (argv[0] + ".real") with LD_LIBRARY_PATH unset - * This avoids issues where cargo is running a wrapper script using /bin/sh from the host - * which links to something which has an incompatible version in in recipe-sysroot-native - * such as libtinfo on centos 7. - */ - -int main(int argc, char* argv[]) { - char *real = malloc(strlen(argv[0] + 5)); - strcpy(real, argv[0]); - strcpy(real + strlen(argv[0]), ".real"); - putenv("LD_LIBRARY_PATH="); - if(execv(real, argv) == -1) { - printf("Wrapper failed to execute, error: %s\n", strerror(errno)); - return -1; - } -}