From nobody Sun Nov 24 01:27:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1728299122; cv=none; d=zohomail.com; s=zohoarc; b=gOtlPvZP5qZTjC1cPwkJCCaRRxpoUD9/aWXYWtuUow/opT34CPGiH8xI1nbsq/5BXaxg+kttaUi/wfU5FluCxSWPdyv6lYSQ9YqjIyInyYzWZ5NXXPCy3N7VRDFO0Ew00KKSay1Ps4U3992i8BfWHQ4MFAJfbI9yYwEdG6dgCic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1728299122; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=svV5TpLybYn9X0tiGkt40RrMIOZJ9Xrkkw5ba10Anqg=; b=iiOcm8VWhyf6uMMohgIWhPUCeozw96ztbXYaanfbtnS6JvhOmXBMXkvPGoloyZFsvVTgHZXGhOTLMCNxxfJFC7flOJDJKtGfWpAPitxrNPihpMbJc7lhIFLU3dffcW5xu5h4XwSpUxJklp6hGZLnxVBg7k8YBNvEWLHYQIELPMg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1728299122665198.09138569533513; Mon, 7 Oct 2024 04:05:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sxlXC-0001mo-7U; Mon, 07 Oct 2024 07:04:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sxlXA-0001mU-Dl for qemu-devel@nongnu.org; Mon, 07 Oct 2024 07:04:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sxlX8-0006V0-7E for qemu-devel@nongnu.org; Mon, 07 Oct 2024 07:04:12 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-515-2JeN5yYVNVWsEJ_qISM6fA-1; Mon, 07 Oct 2024 07:04:06 -0400 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-37d0506098cso2660281f8f.1 for ; Mon, 07 Oct 2024 04:04:06 -0700 (PDT) Received: from avogadro.local ([151.62.111.131]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-37d1698fcacsm5440261f8f.116.2024.10.07.04.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Oct 2024 04:04:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728299048; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=svV5TpLybYn9X0tiGkt40RrMIOZJ9Xrkkw5ba10Anqg=; b=MJ5Nyy9ITsE0EoQ0ZTUIpUufEjXf7vB1LTIRRdArqJHVpwHRV/8AQ03RkcApWGRADq8vtW MYqa6sK29MaV1CYOKjCs8nckEGfO1b/oWbEexo15WfY1j0L6aZ5pd23XMvalD9nhkqzY2Y IY8RpFScuoCy0dDkV3XevJT5pJLV2IY= X-MC-Unique: 2JeN5yYVNVWsEJ_qISM6fA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728299044; x=1728903844; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=svV5TpLybYn9X0tiGkt40RrMIOZJ9Xrkkw5ba10Anqg=; b=ix65EtOu6GPB9xfTzH76YIj1PQwYfvdSvHxUCRJ9/oa+eUlxjSMOWlHJJGe8WtV47f DqJYVKYiNZR8ffO1965lZFRLqzMa726OZNSK4l6h/dKHKOys8FoN2EtXWzSXzfd3+3Tc eLu3onDXi3JOQtd8nxYqQLstt0kJ2cm6beMQhNBVzRWwfzKnU8L/dG+VUAK05crS6wdm ICUZhcYXWIb4ixNFDCdpZtBBBf+V88g1YD1DNn0SrPs4E6Q/5b85vlt4Dqn08eIMXI2z pQ2MXamrDVWKxgky+AWlTi/F8+9U4bQSY0jSBtKx5z684zWOvpG8C7TNZiLr60h/ir6O CfKg== X-Gm-Message-State: AOJu0YwN9RHxRgAbQi9t5dqvnCFWfNLDNMWsQkYcce6f1VS6LMaKwWhk f7FDeykFQ9K8rpUE3GkzHIsO2sGpEuxSwpPco3afs0m6y1SKL1YiVc8Tv6xShsgmsOzvvmRqzS1 kAslfjqrk2oGKwi/2Rbyj5RvsNI2fxM4M9NyDD8JAE0+SGlvLyH10SvHKknImvAanx0MY2MumDQ VHCOzsP/5LtCfu0BJeZeQZKGogaolWHC+5ykaXnWQ= X-Received: by 2002:adf:f411:0:b0:374:b9a7:5ed6 with SMTP id ffacd0b85a97d-37d0e6f01bemr7017659f8f.22.1728299044374; Mon, 07 Oct 2024 04:04:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEczpx6WychkKN0Bof3/i7wMH+EdRPjpPc8y1Rx6O1X/slx1PTBEeMhKuuF/Mu4VN6Wa8JQ0A== X-Received: by 2002:adf:f411:0:b0:374:b9a7:5ed6 with SMTP id ffacd0b85a97d-37d0e6f01bemr7017621f8f.22.1728299043798; Mon, 07 Oct 2024 04:04:03 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: manos.pitsidianakis@linaro.org, zhao1.liu@intel.com, junjie.mao@intel.com, pierrick.bouvier@linaro.org, alex.bennee@linaro.org Subject: [PULL 03/12] configure, meson: detect Rust toolchain Date: Mon, 7 Oct 2024 13:03:31 +0200 Message-ID: <20241007110342.1298598-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20241007110342.1298598-1-pbonzini@redhat.com> References: <20241007110342.1298598-1-pbonzini@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.151, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1728299123990116600 Content-Type: text/plain; charset="utf-8" Include the correct path and arguments to rustc in the native and cross files (native compilation is needed for procedural macros). Based on the host architecture and OS, the compiler and optionally the argu= ment to --cpu, the Rust target triple can be detected automatically for either a native or a cross compiler. In general, it is only a matter of translating the architecture and OS, and adding a machine to form the triple, but there are some special cases (e.g. detecting soft vs. hard floating point on ARM) and some inconsistencies. Signed-off-by: Paolo Bonzini Signed-off-by: Manos Pitsidianakis Link: https://lore.kernel.org/r/207d2640b32d511e9c27478ce3192f5bb0bf3169.17= 27961605.git.manos.pitsidianakis@linaro.org Signed-off-by: Paolo Bonzini --- configure | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++- meson.build | 5 +- 2 files changed, 164 insertions(+), 4 deletions(-) diff --git a/configure b/configure index aa7aae70fa1..0ccc92074ea 100755 --- a/configure +++ b/configure @@ -207,6 +207,8 @@ for opt do ;; --objcc=3D*) objcc=3D"$optarg" ;; + --rustc=3D*) RUSTC=3D"$optarg" + ;; --cpu=3D*) cpu=3D"$optarg" ;; --extra-cflags=3D*) @@ -252,6 +254,8 @@ python=3D download=3D"enabled" skip_meson=3Dno use_containers=3D"yes" +rust=3D"auto" +rust_target_triple=3D"" gdb_bin=3D$(command -v "gdb-multiarch" || command -v "gdb") gdb_arches=3D"" =20 @@ -310,6 +314,7 @@ objcopy=3D"${OBJCOPY-${cross_prefix}objcopy}" ld=3D"${LD-${cross_prefix}ld}" ranlib=3D"${RANLIB-${cross_prefix}ranlib}" nm=3D"${NM-${cross_prefix}nm}" +readelf=3D"${READELF-${cross_prefix}readelf}" strip=3D"${STRIP-${cross_prefix}strip}" widl=3D"${WIDL-${cross_prefix}widl}" windres=3D"${WINDRES-${cross_prefix}windres}" @@ -317,6 +322,8 @@ windmc=3D"${WINDMC-${cross_prefix}windmc}" pkg_config=3D"${PKG_CONFIG-${cross_prefix}pkg-config}" sdl2_config=3D"${SDL2_CONFIG-${cross_prefix}sdl2-config}" =20 +rustc=3D"${RUSTC-rustc}" + check_define() { cat > $TMPC < "${TMPDIR1}/= ${TMPB}.out"; then + rust_host_triple=3D$(sed -n 's/^host: //p' "${TMPDIR1}/${TMPB}.out") +else + if test "$rust" =3D enabled; then + error_exit "could not execute rustc binary \"$rustc\"" + fi + rust=3Ddisabled +fi +if test "$rust" !=3D disabled && test -z "$rust_target_triple"; then + # arch and os generally matches between meson and rust + rust_arch=3D$host_arch + rust_os=3D$host_os + rust_machine=3Dunknown + rust_osvariant=3D + + # tweak rust_os if needed; also, machine and variant depend on the OS + android=3Dno + case "$host_os" in + darwin) + # e.g. aarch64-apple-darwin + rust_machine=3Dapple + ;; + + linux) + # detect android/glibc/musl + if check_define __ANDROID__; then + rust_osvariant=3Dandroid + android=3Dyes + else + cat > $TMPC << EOF +#define _GNU_SOURCE +#include +#ifndef __USE_GNU +error using musl +#endif +EOF + if compile_object; then + rust_osvariant=3Dgnu + else + rust_osvariant=3Dmusl + fi + fi + + case "$host_arch" in + arm) + # e.g. arm-unknown-linux-gnueabi, arm-unknown-linux-gnueabihf + write_c_skeleton + compile_object + if $READELF -A $TMPO | grep Tag_API_VFP_args: > /dev/null; then + rust_osvariant=3D${rust_osvariant}eabihf + else + rust_osvariant=3D${rust_osvariant}eabi + fi + ;; + + mips64) + # e.g. mips64-unknown-linux-gnuabi64 + rust_osvariant=3D${rust_osvariant}abi64 + ;; + esac + ;; + + netbsd) + # e.g. arm-unknown-netbsd-eabihf + test "$host_arch" =3D arm && rust_osvariant=3Deabihf + ;; + + sunos) + rust_machine=3Dpc + rust_os=3Dsolaris + ;; + + windows) + # e.g. aarch64-pc-windows-gnullvm, x86_64-pc-windows-gnu (MSVC not sup= ported) + rust_machine=3Dpc + if test "$host_arch" =3D aarch64; then + rust_osvariant=3Dgnullvm + else + rust_osvariant=3Dgnu + fi + ;; + esac + + # now tweak the architecture part, possibly based on pre-canonicalizatio= n --cpu + case "$host_arch" in + arm) + # preserve ISA version (armv7 etc.) from $raw_cpu if passed via --cpu + rust_arch=3D$raw_cpu + test "$rust_arch" =3D arm && test "$rust_os" !=3D linux && rust_arch= =3Darmv7 + ;; + + mips|mips64) + # preserve ISA version (mipsisa64r6 etc.) and include endianness + rust_arch=3D${raw_cpu%el} + test "$bigendian" =3D no && rust_arch=3D${rust_arch}el + ;; + + riscv32|riscv64) + # e.g. riscv64gc-unknown-linux-gnu, but riscv64-linux-android + test "$android" =3D no && rust_arch=3D${rust_arch}gc + ;; + + sparc64) + if test "$rust_os" =3D solaris; then + rust_arch=3Dsparcv9 + rust_machine=3Dsun + fi + ;; + + x86_64) + # e.g. x86_64-unknown-linux-gnux32 + test "$raw_cpu" =3D x32 && rust_osvariant=3D${rust_osvariant}x32 + ;; + esac + + if test "$android" =3D yes; then + # e.g. aarch64-linux-android + rust_target_triple=3D$rust_arch-$rust_os-$rust_osvariant + else + rust_target_triple=3D$rust_arch-$rust_machine-$rust_os${rust_osvariant= +-$rust_osvariant} + fi +fi + ########################################## # functions to probe cross compilers =20 @@ -1628,6 +1772,9 @@ if test "$container" !=3D no; then echo "RUNC=3D$runc" >> $config_host_mak fi echo "SUBDIRS=3D$subdirs" >> $config_host_mak +if test "$rust" !=3D disabled; then + echo "RUST_TARGET_TRIPLE=3D$rust_target_triple" >> $config_host_mak +fi echo "PYTHON=3D$python" >> $config_host_mak echo "MKVENV_ENSUREGROUP=3D$mkvenv ensuregroup $mkvenv_online_flag" >> $co= nfig_host_mak echo "GENISOIMAGE=3D$genisoimage" >> $config_host_mak @@ -1764,12 +1911,20 @@ if test "$skip_meson" =3D no; then echo "c =3D [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross test -n "$cxx" && echo "cpp =3D [$(meson_quote $cxx $CPU_CFLAGS)]" >> $c= ross test -n "$objcc" && echo "objc =3D [$(meson_quote $objcc $CPU_CFLAGS)]" = >> $cross + if test "$rust" !=3D disabled; then + if test "$rust_host_triple" !=3D "$rust_target_triple"; then + echo "rust =3D [$(meson_quote $rustc --target "$rust_target_triple")= ]" >> $cross + else + echo "rust =3D [$(meson_quote $rustc)]" >> $cross + fi + fi echo "ar =3D [$(meson_quote $ar)]" >> $cross echo "dlltool =3D [$(meson_quote $dlltool)]" >> $cross echo "nm =3D [$(meson_quote $nm)]" >> $cross echo "pkgconfig =3D [$(meson_quote $pkg_config)]" >> $cross echo "pkg-config =3D [$(meson_quote $pkg_config)]" >> $cross echo "ranlib =3D [$(meson_quote $ranlib)]" >> $cross + echo "readelf =3D [$(meson_quote $readelf)]" >> $cross if has $sdl2_config; then echo "sdl2-config =3D [$(meson_quote $sdl2_config)]" >> $cross fi @@ -1799,6 +1954,9 @@ if test "$skip_meson" =3D no; then echo "# Automatically generated by configure - do not modify" > $native echo "[binaries]" >> $native echo "c =3D [$(meson_quote $host_cc)]" >> $native + if test "$rust" !=3D disabled; then + echo "rust =3D [$(meson_quote $rustc)]" >> $cross + fi mv $native config-meson.native meson_option_add --native-file meson_option_add config-meson.native @@ -1817,6 +1975,7 @@ if test "$skip_meson" =3D no; then test "$pie" =3D no && meson_option_add -Db_pie=3Dfalse =20 # QEMU options + test "$rust" !=3D "auto" && meson_option_add "-Drust=3D$rust" test "$cfi" !=3D false && meson_option_add "-Dcfi=3D$cfi" "-Db_lto=3D$cf= i" test "$docs" !=3D auto && meson_option_add "-Ddocs=3D$docs" test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engin= e=3D$LIB_FUZZING_ENGINE" diff --git a/meson.build b/meson.build index 93ddaef500f..f76f01f065f 100644 --- a/meson.build +++ b/meson.build @@ -4325,8 +4325,9 @@ else endif summary_info +=3D {'Rust support': have_rust} if have_rust - summary_info +=3D {'rustc version': rustc.version()} - summary_info +=3D {'rustc': ' '.join(rustc.cmd_array())} + summary_info +=3D {'rustc version': rustc.version()} + summary_info +=3D {'rustc': ' '.join(rustc.cmd_array())} + summary_info +=3D {'Rust target': config_host['RUST_TARGET_TRIPLE']} endif option_cflags =3D (get_option('debug') ? ['-g'] : []) if get_option('optimization') !=3D 'plain' --=20 2.46.1