summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/rust-common.bbclass15
-rw-r--r--meta/files/rust-ccld-wrapper.c29
2 files changed, 8 insertions, 36 deletions
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 @@
1inherit python3native
2
1# Common variables used by all Rust builds 3# Common variables used by all Rust builds
2export rustlibdir = "${libdir}/rust" 4export rustlibdir = "${libdir}/rust"
3FILES:${PN} += "${rustlibdir}/*.so" 5FILES:${PN} += "${rustlibdir}/*.so"
@@ -133,8 +135,12 @@ create_wrapper () {
133 shift 135 shift
134 136
135 cat <<- EOF > "${file}" 137 cat <<- EOF > "${file}"
136 #!/bin/sh 138 #!/usr/bin/env python3
137 exec $@ "\$@" 139 import os, sys
140 orig_binary = "$@"
141 binary = orig_binary.split()[0]
142 args = orig_binary.split() + sys.argv[1:]
143 os.execvp(binary, args)
138 EOF 144 EOF
139 chmod +x "${file}" 145 chmod +x "${file}"
140} 146}
@@ -169,11 +175,6 @@ do_rust_create_wrappers () {
169 # Yocto Target / Rust Target archiver 175 # Yocto Target / Rust Target archiver
170 create_wrapper "${RUST_TARGET_AR}" "${WRAPPER_TARGET_AR}" 176 create_wrapper "${RUST_TARGET_AR}" "${WRAPPER_TARGET_AR}"
171 177
172 # Need to filter out LD_LIBRARY_PATH from the linker without using shell
173 mv ${RUST_BUILD_CCLD} ${RUST_BUILD_CCLD}.real
174 ${BUILD_CC} ${COREBASE}/meta/files/rust-ccld-wrapper.c -o ${RUST_BUILD_CCLD}
175 mv ${RUST_TARGET_CCLD} ${RUST_TARGET_CCLD}.real
176 ${BUILD_CC} ${COREBASE}/meta/files/rust-ccld-wrapper.c -o ${RUST_TARGET_CCLD}
177} 178}
178 179
179addtask rust_create_wrappers before do_configure after do_patch do_prepare_recipe_sysroot 180addtask 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 @@
1/*
2 * Copyright 2021 Richard Purdie
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#include <errno.h>
8#include <stdio.h>
9#include <stdlib.h>
10#include <string.h>
11#include <unistd.h>
12
13/*
14 * Run the original script (argv[0] + ".real") with LD_LIBRARY_PATH unset
15 * This avoids issues where cargo is running a wrapper script using /bin/sh from the host
16 * which links to something which has an incompatible version in in recipe-sysroot-native
17 * such as libtinfo on centos 7.
18 */
19
20int main(int argc, char* argv[]) {
21 char *real = malloc(strlen(argv[0] + 5));
22 strcpy(real, argv[0]);
23 strcpy(real + strlen(argv[0]), ".real");
24 putenv("LD_LIBRARY_PATH=");
25 if(execv(real, argv) == -1) {
26 printf("Wrapper failed to execute, error: %s\n", strerror(errno));
27 return -1;
28 }
29}