summaryrefslogtreecommitdiffstats
path: root/meta/classes-recipe/rust-common.bbclass
diff options
context:
space:
mode:
authorAnton Antonov <anton.antonov@arm.com>2023-01-03 14:36:39 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-01-12 23:08:58 +0000
commit755ee95a45a4a5e3f880b6143e755ec699194416 (patch)
tree15ba3c7e2986eadd1c5957e310b6ced97bf470d8 /meta/classes-recipe/rust-common.bbclass
parentd5668a7fd4d33d0d1670baeef58385c3acf4becd (diff)
downloadpoky-755ee95a45a4a5e3f880b6143e755ec699194416.tar.gz
rust: Do not use default compiler flags defined in CC crate
Rust crates build dependecy C libraries using "CC" crate. This crate adds some default compiler parameters depending on target arch. For some targets these parameters conflict with the parameters defined by OE. Warnings/errors like this can be seen in the case: cc1: error: switch '-mcpu=cortex-a15' conflicts with switch '-march=armv7-a+fp' [-Werror] Lets use only the OE parameters by exporting CRATE_CC_NO_DEFAULTS. https://github.com/rust-lang/cc-rs#external-configuration-via-environment-variables This patch fixes https://bugzilla.yoctoproject.org/show_bug.cgi?id=14947 (From OE-Core rev: 0c07089bdf7e0d7d8f37552db0bcd75f860979d9) Signed-off-by: Anton Antonov <Anton.Antonov@arm.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes-recipe/rust-common.bbclass')
-rw-r--r--meta/classes-recipe/rust-common.bbclass28
1 files changed, 19 insertions, 9 deletions
diff --git a/meta/classes-recipe/rust-common.bbclass b/meta/classes-recipe/rust-common.bbclass
index 0f72e45e8c..e0cedd7aa2 100644
--- a/meta/classes-recipe/rust-common.bbclass
+++ b/meta/classes-recipe/rust-common.bbclass
@@ -97,7 +97,7 @@ RUST_BUILD_ARCH = "${@oe.rust.arch_to_rust_arch(d.getVar('BUILD_ARCH'))}"
97# Rust additionally will use two additional cases: 97# Rust additionally will use two additional cases:
98# - undecorated (e.g. CC) - equivalent to TARGET 98# - undecorated (e.g. CC) - equivalent to TARGET
99# - triple suffix (e.g. CC:x86_64_unknown_linux_gnu) - both 99# - triple suffix (e.g. CC:x86_64_unknown_linux_gnu) - both
100# see: https://github.com/alexcrichton/gcc-rs 100# see: https://github.com/rust-lang/cc-rs
101# The way that Rust's internal triples and Yocto triples are mapped together 101# The way that Rust's internal triples and Yocto triples are mapped together
102# its likely best to not use the triple suffix due to potential confusion. 102# its likely best to not use the triple suffix due to potential confusion.
103 103
@@ -128,12 +128,22 @@ create_wrapper_rust () {
128 shift 128 shift
129 extras="$1" 129 extras="$1"
130 shift 130 shift
131 crate_cc_extras="$1"
132 shift
131 133
132 cat <<- EOF > "${file}" 134 cat <<- EOF > "${file}"
133 #!/usr/bin/env python3 135 #!/usr/bin/env python3
134 import os, sys 136 import os, sys
135 orig_binary = "$@" 137 orig_binary = "$@"
136 extras = "${extras}" 138 extras = "${extras}"
139
140 # Apply a required subset of CC crate compiler flags
141 # when we build a target recipe for a non-bare-metal target.
142 # https://github.com/rust-lang/cc-rs/blob/main/src/lib.rs#L1614
143 if "CRATE_CC_NO_DEFAULTS" in os.environ.keys() and \
144 "TARGET" in os.environ.keys() and not "-none-" in os.environ["TARGET"]:
145 orig_binary += "${crate_cc_extras}"
146
137 binary = orig_binary.split()[0] 147 binary = orig_binary.split()[0]
138 args = orig_binary.split() + sys.argv[1:] 148 args = orig_binary.split() + sys.argv[1:]
139 if extras: 149 if extras:
@@ -157,22 +167,22 @@ do_rust_create_wrappers () {
157 mkdir -p "${WRAPPER_DIR}" 167 mkdir -p "${WRAPPER_DIR}"
158 168
159 # Yocto Build / Rust Host C compiler 169 # Yocto Build / Rust Host C compiler
160 create_wrapper_rust "${RUST_BUILD_CC}" "" "${BUILD_CC}" 170 create_wrapper_rust "${RUST_BUILD_CC}" "" "${CRATE_CC_FLAGS}" "${BUILD_CC}"
161 # Yocto Build / Rust Host C++ compiler 171 # Yocto Build / Rust Host C++ compiler
162 create_wrapper_rust "${RUST_BUILD_CXX}" "" "${BUILD_CXX}" 172 create_wrapper_rust "${RUST_BUILD_CXX}" "" "${CRATE_CC_FLAGS}" "${BUILD_CXX}"
163 # Yocto Build / Rust Host linker 173 # Yocto Build / Rust Host linker
164 create_wrapper_rust "${RUST_BUILD_CCLD}" "" "${BUILD_CCLD}" "${BUILD_LDFLAGS}" 174 create_wrapper_rust "${RUST_BUILD_CCLD}" "" "" "${BUILD_CCLD}" "${BUILD_LDFLAGS}"
165 # Yocto Build / Rust Host archiver 175 # Yocto Build / Rust Host archiver
166 create_wrapper_rust "${RUST_BUILD_AR}" "" "${BUILD_AR}" 176 create_wrapper_rust "${RUST_BUILD_AR}" "" "" "${BUILD_AR}"
167 177
168 # Yocto Target / Rust Target C compiler 178 # Yocto Target / Rust Target C compiler
169 create_wrapper_rust "${RUST_TARGET_CC}" "${WRAPPER_TARGET_EXTRALD}" "${WRAPPER_TARGET_CC}" "${WRAPPER_TARGET_LDFLAGS}" 179 create_wrapper_rust "${RUST_TARGET_CC}" "${WRAPPER_TARGET_EXTRALD}" "${CRATE_CC_FLAGS}" "${WRAPPER_TARGET_CC}" "${WRAPPER_TARGET_LDFLAGS}"
170 # Yocto Target / Rust Target C++ compiler 180 # Yocto Target / Rust Target C++ compiler
171 create_wrapper_rust "${RUST_TARGET_CXX}" "${WRAPPER_TARGET_EXTRALD}" "${WRAPPER_TARGET_CXX}" "${CXXFLAGS}" 181 create_wrapper_rust "${RUST_TARGET_CXX}" "${WRAPPER_TARGET_EXTRALD}" "${CRATE_CC_FLAGS}" "${WRAPPER_TARGET_CXX}" "${CXXFLAGS}"
172 # Yocto Target / Rust Target linker 182 # Yocto Target / Rust Target linker
173 create_wrapper_rust "${RUST_TARGET_CCLD}" "${WRAPPER_TARGET_EXTRALD}" "${WRAPPER_TARGET_CCLD}" "${WRAPPER_TARGET_LDFLAGS}" 183 create_wrapper_rust "${RUST_TARGET_CCLD}" "${WRAPPER_TARGET_EXTRALD}" "" "${WRAPPER_TARGET_CCLD}" "${WRAPPER_TARGET_LDFLAGS}"
174 # Yocto Target / Rust Target archiver 184 # Yocto Target / Rust Target archiver
175 create_wrapper_rust "${RUST_TARGET_AR}" "" "${WRAPPER_TARGET_AR}" 185 create_wrapper_rust "${RUST_TARGET_AR}" "" "" "${WRAPPER_TARGET_AR}"
176 186
177} 187}
178 188