Provide documentation behind what the triples mean for Yocto and Rust since they have different meanings of BUILD, TARGET, and HOST. Namely Rust uses HOST when Yocto means BUILD. In our current supported cases HOST and TARGET from Yocto mean the same thing.
59 lines
2.1 KiB
Plaintext
59 lines
2.1 KiB
Plaintext
# Responseible for taking Yocto triples and converting it to Rust triples
|
|
|
|
def rust_base_triple(d, thing):
|
|
'''
|
|
Mangle bitbake's *_SYS into something that rust might support (see
|
|
rust/mk/cfg/* for a list)
|
|
|
|
Note that os is assumed to be some linux form
|
|
'''
|
|
|
|
arch = d.getVar('{}_ARCH'.format(thing), True)
|
|
# All the Yocto targets are Linux and are 'unknown'
|
|
vendor = "-unknown"
|
|
os = d.getVar('{}_OS'.format(thing), True)
|
|
libc = d.getVar('TCLIBC', True)
|
|
|
|
# Prefix with a dash and convert glibc -> gnu
|
|
if libc == "glibc":
|
|
libc = "-gnu"
|
|
elif libc == "musl":
|
|
libc = "-musl"
|
|
|
|
# Don't double up musl (only appears to be the case on aarch64)
|
|
if os == "linux-musl":
|
|
if libc != "-musl":
|
|
bb.fatal("{}_OS was '{}' but TCLIBC was not 'musl'".format(thing, os))
|
|
os = "linux"
|
|
|
|
# This catches ARM targets and appends the necessary hard float bits
|
|
if os == "linux-gnueabi" or os == "linux-musleabi":
|
|
libc = bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hf', '', d)
|
|
return arch + vendor + '-' + os + libc
|
|
|
|
# Naming explanation
|
|
# Yocto
|
|
# - BUILD_SYS - Yocto triple of the build environment
|
|
# - HOST_SYS - What we're building for in Yocto
|
|
# - TARGET_SYS - What we're building for in Yocto
|
|
#
|
|
# So when building '-native' packages BUILD_SYS == HOST_SYS == TARGET_SYS
|
|
# When building packages for the image HOST_SYS == TARGET_SYS
|
|
# This is a gross over simplification as there are other modes but
|
|
# currently this is all that's supported.
|
|
#
|
|
# Rust
|
|
# - TARGET - the system where the binary will run
|
|
# - HOST - the system where the binary is being built
|
|
#
|
|
# Rust additionally will use two additional cases:
|
|
# - undecorated (e.g. CC) - equivalent to TARGET
|
|
# - triple suffix (e.g. CC_x86_64_unknown_linux_gnu) - both
|
|
# see: https://github.com/alexcrichton/gcc-rs
|
|
# The way that Rust's internal triples and Yocto triples are mapped together
|
|
# its likely best to not use the triple suffix due to potential confusion.
|
|
|
|
RUST_BUILD_SYS = "${@rust_base_triple(d, 'BUILD')}"
|
|
RUST_HOST_SYS = "${@rust_base_triple(d, 'HOST')}"
|
|
RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
|