From nobody Tue Feb 10 22:18:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1528462218701484.1932437312041; Fri, 8 Jun 2018 05:50:18 -0700 (PDT) Received: from localhost ([::1]:35444 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fRGqP-0006GS-OA for importer@patchew.org; Fri, 08 Jun 2018 08:50:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46589) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fRGZt-00017i-61 for qemu-devel@nongnu.org; Fri, 08 Jun 2018 08:33:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fRGZq-00069a-Gi for qemu-devel@nongnu.org; Fri, 08 Jun 2018 08:33:13 -0400 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:36424) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fRGZq-000696-6J for qemu-devel@nongnu.org; Fri, 08 Jun 2018 08:33:10 -0400 Received: by mail-wm0-x242.google.com with SMTP id v131-v6so3429041wma.1 for ; Fri, 08 Jun 2018 05:33:10 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id w102-v6sm36852355wrc.23.2018.06.08.05.33.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 08 Jun 2018 05:33:07 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 2A9FE3E01A5; Fri, 8 Jun 2018 13:33:07 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wykgDccvBm5riSGPu441XobqC71ioa4jYvwij3uVqU8=; b=XpEqxgo4Nh7PeZLE2aY/SEU7KEnxAQvQ/1LNwBHTd9oCd/UZ/QmU28X6A8jmdpWakb P5i1gh80Bc2Di9NZhk8oCQ/fE80wrUwgBJg8B34omSQgJyBYFcFTrMO4TaLIZiLCsSa8 xXzzMxt5AT4mtetiT+3NMScRNXDt0IT875U3U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wykgDccvBm5riSGPu441XobqC71ioa4jYvwij3uVqU8=; b=WwiSWBIGPiW9EM2uxmFS1HvpbFO4sCqx7G1GJZfDA+nYskRkzjUMFYaLlmJ1hum2Ia 4vgEJUm7YKJoEEivYKZs8SiGcNap9PUd1jiYbDKnSx8KCycaOkGuIjUH0H+x6Fx9UfiN Xq2Nv0qH6WnXP1QG4WTSRBUFzr80m1d1hFKxS6mz7CbXu/R/QRMH6nqi4DrUgmV2kwfY 9zrMlIf8fPEPSpWr5efCFc6DzYiKdnHis83E2+k/U3ltAZX2g3o8ayG3etj+Q+KvKxGF cNg9MfixraPRG/+831lW1x3BtwGFIg6OdgMrlYWOkJvUtuxQdU0p+7oGp9K8Q9MVW+/t /j6Q== X-Gm-Message-State: APt69E2JLkkDTBKoDSnsOpvWANm1g/tNyp90eqaZTP9EJRL/fYZOvBha YXFN8b9YE8O4JnNUBeUnYwItiw== X-Google-Smtp-Source: ADUXVKIf8Os7pddFx2DufLlT2qN2q1yyYTSGqRXF1/LcJHAZ+cJTWh2mcu4hUFEbfJUgoqIfKSDe+w== X-Received: by 2002:a1c:2cc2:: with SMTP id s185-v6mr1350057wms.62.1528461189015; Fri, 08 Jun 2018 05:33:09 -0700 (PDT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: cota@braap.org, famz@redhat.com, berrange@redhat.com, f4bug@amsat.org, richard.henderson@linaro.org, balrogg@gmail.com, aurelien@aurel32.net, agraf@suse.de, pbonzini@redhat.com, stefanha@redhat.com, stefanb@linux.vnet.ibm.com, marcandre.lureau@redhat.com Date: Fri, 8 Jun 2018 13:32:19 +0100 Message-Id: <20180608123307.24773-2-alex.bennee@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180608123307.24773-1-alex.bennee@linaro.org> References: <20180608123307.24773-1-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::242 Subject: [Qemu-devel] [PATCH v6 01/49] configure: add support for --cross-cc-FOO X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 This allows us to specify cross compilers for our guests. This is useful for building test images/programs. Currently we re-run the compile test for each target. I couldn't think of a way to cache the value for a given arch without getting messier configure code. The cross compiler for the guest is visible to each target as CROSS_CC_GUEST in config-target.mak. Signed-off-by: Alex Benn=C3=A9e Reviewed-by: Richard Henderson --- v3 - --cross-cc-*[!a-zA-Z0-9_-]*=3D*) error_exit... - --cross-cc-*) cc_arch=3D${opt#--cross-cc-}; cc_arch=3D${cc_arch%%=3D*} - add remaining target_compiler definitions v4 - also set cross_cc_$cpu=3D$host_cc - try a non-static build if static fails - use write_c_skeleton - add doc string in help --- configure | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/configure b/configure index 14b11130a7..0121e4e9f4 100755 --- a/configure +++ b/configure @@ -458,6 +458,13 @@ vxhs=3D"" libxml2=3D"" docker=3D"no" =20 +# cross compilers defaults, can be overridden with --cross-cc-ARCH +cross_cc_aarch64=3D"aarch64-linux-gnu-gcc" +cross_cc_arm=3D"arm-linux-gnueabihf-gcc" +cross_cc_powerpc=3D"powerpc-linux-gnu-gcc" + +enabled_cross_compilers=3D"" + supported_cpu=3D"no" supported_os=3D"no" bogus_os=3D"no" @@ -488,6 +495,11 @@ for opt do ;; --disable-debug-info) debug_info=3D"no" ;; + --cross-cc-*[!a-zA-Z0-9_-]*=3D*) error_exit "Passed bad --cross-cc-FOO o= ption" + ;; + --cross-cc-*) cc_arch=3D${opt#--cross-cc-}; cc_arch=3D${cc_arch%%=3D*} + eval "cross_cc_${cc_arch}=3D\$optarg" + ;; esac done # OS specific @@ -676,30 +688,37 @@ case "$cpu" in ppc|ppc64|s390|s390x|sparc64|x32) cpu=3D"$cpu" supported_cpu=3D"yes" + eval "cross_cc_${cpu}=3D\$host_cc" ;; i386|i486|i586|i686|i86pc|BePC) cpu=3D"i386" supported_cpu=3D"yes" + cross_cc_i386=3D$host_cc ;; x86_64|amd64) cpu=3D"x86_64" supported_cpu=3D"yes" + cross_cc_x86_64=3D$host_cc ;; armv*b|armv*l|arm) cpu=3D"arm" supported_cpu=3D"yes" + cross_cc_arm=3D$host_cc ;; aarch64) cpu=3D"aarch64" supported_cpu=3D"yes" + cross_cc_aarch64=3D$host_cc ;; mips*) cpu=3D"mips" supported_cpu=3D"yes" + cross_cc_mips=3D$host_cc ;; sparc|sun4[cdmuv]) cpu=3D"sparc" supported_cpu=3D"yes" + cross_cc_sparc=3D$host_cc ;; *) # This will result in either an error or falling back to TCI later @@ -917,6 +936,8 @@ for opt do ;; --disable-debug-info) ;; + --cross-cc-*) + ;; --enable-modules) modules=3D"yes" ;; @@ -1501,6 +1522,7 @@ Advanced options (experts only): --extra-cflags=3DCFLAGS append extra C compiler flags QEMU_CFLAGS --extra-cxxflags=3DCXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS --extra-ldflags=3DLDFLAGS append extra linker flags LDFLAGS + --cross-cc-ARCH=3DCC use compiler when building ARCH guest test ca= ses --make=3DMAKE use specified make [$make] --install=3DINSTALL use specified install [$install] --python=3DPYTHON use specified python [$python] @@ -6820,6 +6842,9 @@ case "$target" in ;; esac =20 +target_compiler=3D"" +target_compiler_static=3D"" + mkdir -p $target_dir echo "# Automatically generated by configure - do not modify" > $config_ta= rget_mak =20 @@ -6835,19 +6860,23 @@ TARGET_ABI_DIR=3D"" case "$target_name" in i386) gdb_xml_files=3D"i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" + target_compiler=3D$cross_cc_i386 ;; x86_64) TARGET_BASE_ARCH=3Di386 gdb_xml_files=3D"i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" + target_compiler=3D$cross_cc_x86_64 ;; alpha) mttcg=3D"yes" + target_compiler=3D$cross_cc_alpha ;; arm|armeb) TARGET_ARCH=3Darm bflt=3D"yes" mttcg=3D"yes" gdb_xml_files=3D"arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + target_compiler=3D$cross_cc_arm ;; aarch64|aarch64_be) TARGET_ARCH=3Daarch64 @@ -6855,59 +6884,74 @@ case "$target_name" in bflt=3D"yes" mttcg=3D"yes" gdb_xml_files=3D"aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp= .xml arm-vfp3.xml arm-neon.xml" + target_compiler=3D$cross_cc_aarch64 ;; cris) + target_compiler=3D$cross_cc_cris ;; hppa) mttcg=3D"yes" + target_compiler=3D$cross_cc_hppa ;; lm32) + target_compiler=3D$cross_cc_lm32 ;; m68k) bflt=3D"yes" gdb_xml_files=3D"cf-core.xml cf-fp.xml m68k-fp.xml" + target_compiler=3D$cross_cc_m68k ;; microblaze|microblazeel) TARGET_ARCH=3Dmicroblaze bflt=3D"yes" echo "TARGET_ABI32=3Dy" >> $config_target_mak + target_compiler=3D$cross_cc_microblaze ;; mips|mipsel) TARGET_ARCH=3Dmips + target_compiler=3D$cross_cc_mips echo "TARGET_ABI_MIPSO32=3Dy" >> $config_target_mak ;; mipsn32|mipsn32el) TARGET_ARCH=3Dmips64 TARGET_BASE_ARCH=3Dmips + target_compiler=3D$cross_cc_mipsn32 echo "TARGET_ABI_MIPSN32=3Dy" >> $config_target_mak echo "TARGET_ABI32=3Dy" >> $config_target_mak ;; mips64|mips64el) TARGET_ARCH=3Dmips64 TARGET_BASE_ARCH=3Dmips + target_compiler=3D$cross_cc_mips64 echo "TARGET_ABI_MIPSN64=3Dy" >> $config_target_mak ;; moxie) + target_compiler=3D$cross_cc_moxie ;; nios2) + target_compiler=3D$cross_cc_nios2 ;; or1k) + target_compiler=3D$cross_cc_or1k TARGET_ARCH=3Dopenrisc TARGET_BASE_ARCH=3Dopenrisc ;; ppc) gdb_xml_files=3D"power-core.xml power-fpu.xml power-altivec.xml power-= spe.xml" + target_compiler=3D$cross_cc_powerpc ;; ppcemb) TARGET_BASE_ARCH=3Dppc TARGET_ABI_DIR=3Dppc gdb_xml_files=3D"power-core.xml power-fpu.xml power-altivec.xml power-= spe.xml" + target_compiler=3D$cross_cc_ppcemb ;; ppc64) TARGET_BASE_ARCH=3Dppc TARGET_ABI_DIR=3Dppc mttcg=3Dyes gdb_xml_files=3D"power64-core.xml power-fpu.xml power-altivec.xml powe= r-spe.xml power-vsx.xml" + target_compiler=3D$cross_cc_ppc64 ;; ppc64le) TARGET_ARCH=3Dppc64 @@ -6915,6 +6959,7 @@ case "$target_name" in TARGET_ABI_DIR=3Dppc mttcg=3Dyes gdb_xml_files=3D"power64-core.xml power-fpu.xml power-altivec.xml powe= r-spe.xml power-vsx.xml" + target_compiler=3D$cross_cc_ppc64le ;; ppc64abi32) TARGET_ARCH=3Dppc64 @@ -6922,45 +6967,57 @@ case "$target_name" in TARGET_ABI_DIR=3Dppc echo "TARGET_ABI32=3Dy" >> $config_target_mak gdb_xml_files=3D"power64-core.xml power-fpu.xml power-altivec.xml powe= r-spe.xml power-vsx.xml" + target_compiler=3D$cross_cc_ppc64abi32 ;; riscv32) TARGET_BASE_ARCH=3Driscv TARGET_ABI_DIR=3Driscv mttcg=3Dyes + target_compiler=3D$cross_cc_riscv32 ;; riscv64) TARGET_BASE_ARCH=3Driscv TARGET_ABI_DIR=3Driscv mttcg=3Dyes + target_compiler=3D$cross_cc_riscv64 ;; sh4|sh4eb) TARGET_ARCH=3Dsh4 bflt=3D"yes" + target_compiler=3D$cross_cc_sh4 ;; sparc) + target_compiler=3D$cross_cc_sparc ;; sparc64) TARGET_BASE_ARCH=3Dsparc + target_compiler=3D$cross_cc_sparc64 ;; sparc32plus) TARGET_ARCH=3Dsparc64 TARGET_BASE_ARCH=3Dsparc TARGET_ABI_DIR=3Dsparc + target_compiler=3D$cross_cc_sparc32plus echo "TARGET_ABI32=3Dy" >> $config_target_mak ;; s390x) mttcg=3Dyes gdb_xml_files=3D"s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xm= l s390-cr.xml s390-virt.xml s390-gs.xml" + target_compiler=3D$cross_cc_s390x ;; tilegx) + target_compiler=3D$cross_cc_tilegx ;; tricore) + target_compiler=3D$cross_cc_tricore ;; unicore32) + target_compiler=3D$cross_cc_unicore32 ;; xtensa|xtensaeb) TARGET_ARCH=3Dxtensa mttcg=3D"yes" + target_compiler=3D$cross_cc_xtensa ;; *) error_exit "Unsupported target CPU" @@ -6971,6 +7028,27 @@ if [ "$TARGET_BASE_ARCH" =3D "" ]; then TARGET_BASE_ARCH=3D$TARGET_ARCH fi =20 +# Do we have a cross compiler for this target? +if has $target_compiler; then + + write_c_skeleton + + if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then + # For host systems we might get away with building without -static + if ! do_compiler $target_compiler -o $TMPE $TMPC ; then + target_compiler=3D"" + else + enabled_cross_compilers=3D"${enabled_cross_compilers} ${target= _compiler}" + target_compiler_static=3D"n" + fi + else + enabled_cross_compilers=3D"${enabled_cross_compilers} ${target_com= piler}" + target_compiler_static=3D"y" + fi +else + target_compiler=3D"" +fi + symlink "$source_path/Makefile.target" "$target_dir/Makefile" =20 upper() { @@ -7044,6 +7122,14 @@ if test "$target_bsd_user" =3D "yes" ; then echo "CONFIG_BSD_USER=3Dy" >> $config_target_mak fi =20 +if test -n "$target_compiler"; then + echo "CROSS_CC_GUEST=3D$target_compiler" >> $config_target_mak + + if test -n "$target_compiler_static"; then + echo "CROSS_CC_GUEST_STATIC=3D$target_compiler_static" >> $config_ta= rget_mak + fi +fi + # generate QEMU_CFLAGS/LDFLAGS for targets =20 cflags=3D"" @@ -7166,6 +7252,12 @@ echo "QEMU_CFLAGS+=3D$cflags" >> $config_target_mak =20 done # for target in $targets =20 +if test -n "$enabled_cross_compilers"; then + echo + echo "NOTE: cross-compilers enabled:" + printf '%s\n' $enabled_cross_compilers | sort -u +fi + if [ "$fdt" =3D "git" ]; then echo "config-host.h: subdir-dtc" >> $config_host_mak fi --=20 2.17.1