From patchwork Wed Jun 21 15:42:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 106102 Delivered-To: patch@linaro.org Received: by 10.140.91.2 with SMTP id y2csp1995162qgd; Wed, 21 Jun 2017 08:44:18 -0700 (PDT) X-Received: by 10.55.151.69 with SMTP id z66mr41846851qkd.90.1498059858331; Wed, 21 Jun 2017 08:44:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1498059858; cv=none; d=google.com; s=arc-20160816; b=IFVeA3qLyDqNs+sMIfFbkvjEx0Q3No0XcMK+ZpcwulvXfc1MlQ7231j2a5Fg50DBcy SL6wILlsrzqZAHJzYVRvg/nPVIKm6ILCStQjBkWUUR6aClGsFkC7qOkDq+AjUfdaiHrM oCOMl3ISO8eXl4EcbtEZm1O9E48E+3S7X8wADFql9xs9ZNJOlmglizizubAMzJWB6P7i 2hlcHp7mqf3Bh9GVdl2YT06oWppRDmFrdeFGqhqETCjk8L2YlurKNFP7wmQIKZ3RtrcG yYZv5/Dl/9iuvAdNorxBodQHJy4mEmsUVqwdYzXcJ/EAvaETawyBXwYBp7LJIhYHnp4H yfYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=0hV6icSBl6NGyP4dZPbmN3LtwMPFGu9f3EQ2z6M+6xQ=; b=rdz6U+hyjz6ATtReRhx6t8o1z4Im90zlix9haILKfAZXaimzbcP+Fkw0H38dGe4H4f lpBGz74G+0THSmHFGLUisZY3qLSdwNbwxkrYGDoinRJnerTOdiZEF6Uu+spRcc12l9qF JVCZAJf+TzP7EMFWIsWsYCEXaNc0FrVAFFm+La2wbdcZrzaggRXcoIUxPs6qK6353MJA RseRZD2vzQGXol2kj3cn9XbeqUN0zxsOANFUYkPNbivugmiuV19zcPMuA6pJetyGlWbb UNK5mMzr0TVtV3zAYgEn9XVEmKoVrA0hM+7JHW83GW46dF77W90djeKUm4kBEtLv6/95 FLlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.b=AFptzrx5; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id w7si14637351qkc.340.2017.06.21.08.44.17 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 21 Jun 2017 08:44:18 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.b=AFptzrx5; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:54748 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNhnj-0007VY-Hx for patch@linaro.org; Wed, 21 Jun 2017 11:44:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNhlm-0006D1-P8 for qemu-devel@nongnu.org; Wed, 21 Jun 2017 11:42:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dNhlj-0002pv-KI for qemu-devel@nongnu.org; Wed, 21 Jun 2017 11:42:14 -0400 Received: from mail-wr0-x22f.google.com ([2a00:1450:400c:c0c::22f]:33512) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dNhlj-0002pi-Cy for qemu-devel@nongnu.org; Wed, 21 Jun 2017 11:42:11 -0400 Received: by mail-wr0-x22f.google.com with SMTP id r103so140131180wrb.0 for ; Wed, 21 Jun 2017 08:42:11 -0700 (PDT) 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=0hV6icSBl6NGyP4dZPbmN3LtwMPFGu9f3EQ2z6M+6xQ=; b=AFptzrx5WALdkbxhhjYfcPKetwicKUBw1em+6BWuRZIv1W+XFvGAwxgMupWRbc5Xou Ni2mgRz7c5mZ7OlB+dK49fPChZNMlSXGUjWeqTfoLRRsDfvrbWqPdhw6sPyzA/rdmEAF HzchvbslbVkpXrBhlDFL0VgLid9cOAJ88azTg= 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=0hV6icSBl6NGyP4dZPbmN3LtwMPFGu9f3EQ2z6M+6xQ=; b=oj6Hax6oxepFFbFWhX2M9o/zsucJWn/fTzvQ0fVuktpaK5vi1RZaGk3tMEpi1iOFAl DT5HSoFuYBRgKZ9NNuqFAYKi+wwvc7lklQCBZSzqFK4qcGi/lIp/9cSYoNHydzbdYFtr MdrH/Ds6Dhcxhs/umwEFOkBMqSD58fPk9zZZeCUkKZPaI4BnfA0x015zbda87ecsKJkc nXyzwwdVTLZmMEBmEm8ozblFbBJJbw90fuks+SEs+8ZAxjRtvEqaJ6h4+xOcnQ9rPHq2 ejXpyQiAEtO90GDz1XPcwWll8Kt5jzoWa+sqP/Lcx8ghqVrldrVtC72aVYX6sAHfIKdD yzeg== X-Gm-Message-State: AKS2vOyaFwVglS9F4jsk5u1aOgfJL6vgXmqwuavCpzJ0R1hZtfu4Y4jb MtOdPnbEBkteU8oG X-Received: by 10.28.96.134 with SMTP id u128mr6868814wmb.85.1498059730170; Wed, 21 Jun 2017 08:42:10 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id p34sm10819012wrc.66.2017.06.21.08.42.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Jun 2017 08:42:07 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 3E3773E0F31; Wed, 21 Jun 2017 16:42:51 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Wed, 21 Jun 2017 16:42:36 +0100 Message-Id: <20170621154244.28309-3-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170621154244.28309-1-alex.bennee@linaro.org> References: <20170621154244.28309-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::22f Subject: [Qemu-devel] [RISU PATCH v6 02/10] build-all-archs: support cross building via docker 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_Benn=C3=A9e?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" If we want to link to any other libraries we might find using simple cross toolchains doesn't work so well. One way around this is to use a dockerised cross-toolchain which then won't clash with your host system. If the user specifies --use-docker the obvious will be done. By default we use the QEMU projects qemu:debian-FOO-cross images as RISU hackers are likely to be QEMU developers too. However any docker tag can be passed on the command line. If none of the docker images have usable compilers we fall back to checking the host path. Signed-off-by: Alex Bennée --- v5 - swapped with --static patch so this can be dropped if desired --- build-all-archs | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) -- 2.13.0 diff --git a/build-all-archs b/build-all-archs index 581a1b4..63918e5 100755 --- a/build-all-archs +++ b/build-all-archs @@ -11,9 +11,6 @@ # Contributors: # Peter Maydell (Linaro) - initial implementation -# So we notice risugen failing even though it's in a pipeline -set -o pipefail - # Simple usage usage() { cat <<-EOF @@ -21,7 +18,10 @@ usage() { Options include: --static build a static binary + --use-docker[=tags] use docker cross compile + If specifying docker the default will be to use the any + qemu:debian-FOO-cross targets available on your system. EOF exit 1 } @@ -37,6 +37,14 @@ while [[ "$1" = -* ]]; do --static) CONF="--static" ;; + --use-docker) + if [ -z "$arg" ]; then + default_tags=$(docker images qemu --format "{{.Repository}}:{{.Tag}}" | grep "\(arm\|power\).*cross$") + docker_tags=$(echo $default_tags | sed 's/\n/\s/g' ) + else + docker_tags="$arg" + fi + ;; --help) usage ;; @@ -48,10 +56,24 @@ done # Debian stretch and Ubuntu Xenial have cross compiler packages for # all of these: -# gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu gcc-m68k-linux-gnu -# gcc-powerpc64le-linux-gnu gcc-powerpc64-linux-gnu +# gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu gcc-m68k-linux-gnu +# gcc-powerpc64le-linux-gnu gcc-powerpc64-linux-gnu +# If docker is enabled we just brute force the various images until we +# can set the one that has a workable cross compiler. + +DOCKER_RUN="docker run --rm -t -u $(id -u) -v $(pwd):$(pwd) -w $(pwd)" program_exists() { + if [ ! -z "$docker_tags" ]; then + use_docker_tag="" + for tag in $docker_tags; do + if ${DOCKER_RUN} ${tag} /bin/bash -c "command -v $1 >/dev/null"; then + use_docker_tag=$tag + return + fi + done + fi + command -v "$1" >/dev/null 2>&1 } @@ -62,19 +84,29 @@ for triplet in aarch64-linux-gnu arm-linux-gnueabihf m68k-linux-gnu \ if ! program_exists "${triplet}-gcc"; then echo "Skipping ${triplet}: no compiler found" continue + else + echo "Building ${triplet} on ${use_docker_tag:-host}..." fi # Do a complete rebuild from scratch, because it's cheap enough. rm -rf build/${triplet} mkdir -p build/${triplet} - (cd build/${triplet} && CROSS_PREFIX="${triplet}-" ../../configure ${CONF}) - make -C build/${triplet} EXTRA_CFLAGS=-Werror + CONFIGURE="cd build/${triplet} && CROSS_PREFIX="${triplet}-" ../../configure ${CONF}" + MAKE="make -C build/${triplet} EXTRA_CFLAGS=-Werror" + if [ -z "$use_docker_tag" ]; then + /bin/bash -c "${CONFIGURE}" + ${MAKE} + else + ${DOCKER_RUN} $use_docker_tag /bin/bash -c "${CONFIGURE}" + ${DOCKER_RUN} $use_docker_tag /bin/bash -c "${MAKE}" + fi done # Now run risugen for all architectures mkdir -p build/risuout +set -o pipefail # detect failures in pipeline for f in *.risu; do echo "Running risugen on $f..."