From nobody Sun Nov 24 01:15:53 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=1728667085; cv=none; d=zohomail.com; s=zohoarc; b=gGbUU9CLL2PFRmCLqzSQ+rZ1VJRpP2KX7zbM9V1l7vSnAuY1eirdeGz4gYEeOcij8PSfwdC0Q0nihUxnqsuqW/Q9U8SlvKWGlf1gn9kZn7wd966kEyd39kSif11TiaQxQjhndMckOG0Ge+1foLwCifugrTDeKIixMzVLqwlGTOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1728667085; 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=ZR1T+vpYx1en//qxZ86okghghuxFj+biFOOdnSlhygw=; b=lgUlQQjO4fKtXy4BiouQA9eKXbPxQmCf6KYxuqaGGN5Nca28DU1xrilUaDZoFzx/24HOug9uUy8OA0tTEdOKGbT6Dtd9I3ZdnpPK1LEJ6XrIQoja4rR/3crK35VePPE9y/mHvG7d3fN1AWVRy7Y07j94pB7fBixCZz+F462A7mE= 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 1728667085518243.92431718895273; Fri, 11 Oct 2024 10:18:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1szJ4u-0001ZU-4X; Fri, 11 Oct 2024 13:05:24 -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 1szJ4U-0000hD-DD for qemu-devel@nongnu.org; Fri, 11 Oct 2024 13:04:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1szHdO-0007CW-9Y for qemu-devel@nongnu.org; Fri, 11 Oct 2024 11:32:56 -0400 Received: from mail-lj1-f197.google.com (mail-lj1-f197.google.com [209.85.208.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-474-RQzjhaBvMd6ZjpBITHcjiA-1; Fri, 11 Oct 2024 11:32:51 -0400 Received: by mail-lj1-f197.google.com with SMTP id 38308e7fff4ca-2fae0ab58ceso16850941fa.0 for ; Fri, 11 Oct 2024 08:32:50 -0700 (PDT) Received: from avogadro.local ([151.81.124.37]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c937153a6asm2037345a12.49.2024.10.11.08.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Oct 2024 08:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1728660772; 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=ZR1T+vpYx1en//qxZ86okghghuxFj+biFOOdnSlhygw=; b=hE2dtXsqvLVl1lypLCp98HdlCl7SQD++wW9+G48J3BGDuvxMlHtX927lwig4mRpN/rfUBy 7awz0lcYIjA1BaeN7/x75pJUdGdioQgLBnfIU3Aa6xpBx7vPWO8c8aQHNXGaQYGTfU4ol+ I1g5tF6FeVfo9h5n/7pVT85aYIwkqSE= X-MC-Unique: RQzjhaBvMd6ZjpBITHcjiA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728660768; x=1729265568; 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=ZR1T+vpYx1en//qxZ86okghghuxFj+biFOOdnSlhygw=; b=xKCEYT/X4aQokDfl06lvvYtI9zrA03mL18XNJRVQl7ce76gTBQ42PpDHQdv+s/wofG 0p9+CnQx8tcR6XDqIRHDSLETAywsXPhcglnVnuJkC+svIAclEz1+rlN0cQPBJothvukE ZrYp4osdAXNW1IgYQkBAODceRnJdmIg7TYoFGeda70i21wz36jZjn+gDNBXcSSulJWhW vPlqFZp6xNaW1J8xG4mZ5n5zFWzNiBNl/3CaJFqqNJKmXLxDSUNH/YQKY0ErcGpmeEm9 n7FzAhQX/deBzNSM1JFnfCAhGN0kAuOsnyrL9ZcjsjczozZ4LqRKf4sQzgLZSwJ8mrDG no6A== X-Gm-Message-State: AOJu0Ywpc22o3AqWXYaMrg8MkJ5anWtJI9c3xkSxHvtASyJ9rSLS7GbF MBPR1BhVp4B6GmksO/FLEsAIHcd4FV2QkqwFzczeC42JrylSbjLdTiNIAFs4Ys8kQbtwyK2ugVA V7R1IImVozjbOSd3IAApX+euGglZFkWlfYR/F82+jd/8VWF//AKGiP2yWxhodlltaQ2wppQH79y HaLj7PcGk69TburDZLLYdJ1vJZYrpWSqBRCxdD4B4= X-Received: by 2002:a2e:4c12:0:b0:2fb:c6e:9a36 with SMTP id 38308e7fff4ca-2fb329b870fmr10639851fa.24.1728660768066; Fri, 11 Oct 2024 08:32:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGOGWZqFUenV3zNtdyxMfFZ2lcESiUS5XPE2VIBG7dRZ7nP/T5RESNUglO7MefxXNdrobBEzg== X-Received: by 2002:a2e:4c12:0:b0:2fb:c6e:9a36 with SMTP id 38308e7fff4ca-2fb329b870fmr10639661fa.24.1728660767399; Fri, 11 Oct 2024 08:32:47 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis Subject: [PULL v3 03/18] configure, meson: detect Rust toolchain Date: Fri, 11 Oct 2024 17:32:11 +0200 Message-ID: <20241011153227.81770-4-pbonzini@redhat.com> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20241011153227.81770-1-pbonzini@redhat.com> References: <20241011153227.81770-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.133.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.15, 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.001, RCVD_IN_MSPIKE_WL=0.001, 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: 1728667087267116600 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 [Leave disabled by default until CI covers the Rust code on supported distros. - Paolo] 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..e832f211dc6 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"disabled" +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.2