mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
meson.eclass: Set rust and bindgen_clang_arguments fields in ini files
This is needed for cross-compiling and multilib. It also allows us to respect the chosen linker and LDFLAGS like cargo.eclass does. Meson actually handles this better than Cargo (without nightly features) because it can apply these to both the native config and the cross config. rust-toolchain.eclass is needed in the cross case, but this no longer supports EAPI 7. There are no EAPI 7 packages using Rust with Meson, so we can conditionally inherit it. I'm not 100% sure whether bindgen_clang_arguments needs further work for cross-compiling (as opposed to multilib), but it doesn't look like it. Signed-off-by: James Le Cuirot <chewi@gentoo.org>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright 2017-2025 Gentoo Authors
|
||||
# Copyright 2017-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
# @ECLASS: meson.eclass
|
||||
@@ -42,6 +42,7 @@ if [[ -z ${_MESON_ECLASS} ]]; then
|
||||
_MESON_ECLASS=1
|
||||
|
||||
inherit flag-o-matic multiprocessing ninja-utils python-utils-r1 sysroot toolchain-funcs
|
||||
[[ ${EAPI} != 7 ]] && inherit rust-toolchain
|
||||
|
||||
BDEPEND=">=dev-build/meson-1.2.3
|
||||
${NINJA_DEPEND}
|
||||
@@ -149,6 +150,16 @@ _meson_create_cross_file() {
|
||||
_meson_get_machine_info "${CHOST}"
|
||||
|
||||
local fn=${T}/meson.${CHOST}.${ABI}.ini
|
||||
local CFLAGS_ABI=CFLAGS_${ABI:-${DEFAULT_ABI}}
|
||||
|
||||
if has rust-toolchain ${INHERITED}; then
|
||||
local LD_A=( $(tc-getCC) ${LDFLAGS} )
|
||||
local RUSTC=( rustc --target="$(rust_abi)" --codegen=linker="${LD_A[0]}" )
|
||||
LD_A=( "${LD_A[@]:1}" )
|
||||
[[ ${LD_A[@]} ]] && RUSTC+=( "${LD_A[@]/#/--codegen=link-arg=}" )
|
||||
else
|
||||
unset RUSTC
|
||||
fi
|
||||
|
||||
cat > "${fn}" <<-EOF || die "failed to create cross file"
|
||||
[binaries]
|
||||
@@ -166,6 +177,7 @@ _meson_create_cross_file() {
|
||||
# >=1.3.0.
|
||||
pkgconfig = '$(tc-getPKG_CONFIG)'
|
||||
pkg-config = '$(tc-getPKG_CONFIG)'
|
||||
rust = $(_meson_env_array "${RUSTC[@]@Q}")
|
||||
strip = $(_meson_env_array "$(tc-getSTRIP)")
|
||||
windres = $(_meson_env_array "$(tc-getRC)")
|
||||
|
||||
@@ -183,8 +195,9 @@ _meson_create_cross_file() {
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = $(tc-is-cross-compiler && echo true || echo false)
|
||||
sys_root = '${SYSROOT}'
|
||||
pkg_config_libdir = '${PKG_CONFIG_LIBDIR:-${EPREFIX}/usr/$(get_libdir)/pkgconfig}'
|
||||
bindgen_clang_arguments = $(_meson_env_array "${!CFLAGS_ABI}")
|
||||
sys_root = '${SYSROOT}'
|
||||
|
||||
[host_machine]
|
||||
system = '${system}'
|
||||
@@ -208,6 +221,11 @@ _meson_create_native_file() {
|
||||
|
||||
local fn=${T}/meson.${CBUILD}.ini
|
||||
|
||||
local LD_A=( $(tc-getBUILD_CC) ${BUILD_LDFLAGS} )
|
||||
local RUSTC=( rustc --codegen=linker="${LD_A[0]}" )
|
||||
LD_A=( "${LD_A[@]:1}" )
|
||||
[[ ${LD_A[@]} ]] && RUSTC+=( "${LD_A[@]/#/--codegen=link-arg=}" )
|
||||
|
||||
cat > "${fn}" <<-EOF || die "failed to create native file"
|
||||
[binaries]
|
||||
ar = $(_meson_env_array "$(tc-getBUILD_AR)")
|
||||
@@ -223,6 +241,7 @@ _meson_create_native_file() {
|
||||
# >=1.3.0.
|
||||
pkgconfig = '$(tc-getBUILD_PKG_CONFIG)'
|
||||
pkg-config = '$(tc-getBUILD_PKG_CONFIG)'
|
||||
rust = $(_meson_env_array "${RUSTC[@]@Q}")
|
||||
strip = $(_meson_env_array "$(tc-getBUILD_STRIP)")
|
||||
windres = $(_meson_env_array "$(tc-getBUILD_PROG RC windres)")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user