From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC566C433F5 for ; Wed, 22 Sep 2021 17:35:14 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CE2DE60D42 for ; Wed, 22 Sep 2021 17:35:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org CE2DE60D42 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 056E083311; Wed, 22 Sep 2021 19:35:01 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="YmWmNwlU"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 12CA68331E; Wed, 22 Sep 2021 19:34:59 +0200 (CEST) Received: from mail-io1-xd36.google.com (mail-io1-xd36.google.com [IPv6:2607:f8b0:4864:20::d36]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id EB12483314 for ; Wed, 22 Sep 2021 19:34:50 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sjg@chromium.org Received: by mail-io1-xd36.google.com with SMTP id d18so4357820iof.13 for ; Wed, 22 Sep 2021 10:34:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b7IGLK1WqG7V1DvLa24ypq/2Mh49AH7E75fCyZWDpA4=; b=YmWmNwlUaYDd83tHfImpEhU+0zMdXEnKe9Yf3sH5modqjqPcgoyC2B2Xb89iHsOYb7 lm0LI+Ax4jj4V5Wo6X1j/TTiO3yofH4SVxZn2+5Uf+V85Id3sgbQ9es6MRVMlIJnTEW+ h7nLPW8r15auEZnSifGsY4JYMnYydLP5jlReM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b7IGLK1WqG7V1DvLa24ypq/2Mh49AH7E75fCyZWDpA4=; b=omqM9K5nLEqWLsM0/O4t4/J9OvoiqbPol3qNFN5UvUUuCGqrA+20R5qTMv32ghks4M hwTMfrP9sB38Nsn1qpc+X5bOjFTVNHY0SFfTdpKo3Olyfr6d6lqlnh40bZzyH2Ktcf4r lil9ExTc+VPQKhoc+tWlnWVMvJibXduu8UNMfL3n7YvPwwFy/kUSbwA8Q9Ldvpau8g27 /hPyAmcY+PXxye41DsCpXDGAiOev9A+5TW4pch29Fj/b8ngOjcYwYBw7kOSe0sy+Coh3 8feBn+KXjICyZsipS+xIy+1oaUP790ped4rByMi+Ae5pjXVvQa87foKcOIJUkQ5VogVj WpkQ== X-Gm-Message-State: AOAM532t+ZCFLS0uK5Q3Lm1PY5ifTvmzIBBBx98ztA5LHDIFqongFrA9 Ig5FHzvIXw+Zf45h3JrkGxItAA== X-Google-Smtp-Source: ABdhPJy5lL34gqOSE4pl1AfR3Wpsg9czQyzO+ZzAimGZ2UxcAadgzHc9evfLFtMu3jHDXRGyxCIoSg== X-Received: by 2002:a05:6602:25d4:: with SMTP id d20mr139288iop.135.1632332089319; Wed, 22 Sep 2021 10:34:49 -0700 (PDT) Received: from kiwi.bld.corp.google.com (c-67-190-101-114.hsd1.co.comcast.net. [67.190.101.114]) by smtp.gmail.com with ESMTPSA id b2sm1320124ilj.72.2021.09.22.10.34.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 10:34:48 -0700 (PDT) From: Simon Glass To: Tom Rini Cc: Marek Vasut , Vagrant Cascadian , Masahiro Yamada , Heinrich Schuchardt , Simon Glass , Bin Meng , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Pali=20Roh=C3=A1r?= , u-boot@lists.denx.de Subject: [PATCH v3 2/2] Makefile: Only build dtc if needed Date: Wed, 22 Sep 2021 11:34:44 -0600 Message-Id: <20210922173444.192256-2-sjg@chromium.org> X-Mailer: git-send-email 2.33.0.685.g46640cef36-goog In-Reply-To: <20210922173444.192256-1-sjg@chromium.org> References: <20210922173444.192256-1-sjg@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean At present U-Boot always builds dtc if CONFIG_OF_CONTROL is defined, even when DTC is provided. The built dtc is not actually used, so this is a waste of time. Update the Makefile logic to build dtc only if one is not provided to the build with the DTC variable. Add documentation to explain this. This saves about 3.5 seconds of elapsed time on a clean build of sandbox_spl for me. Signed-off-by: Simon Glass --- Changes in v3: - Use DTC_MIN_VERSION instead of hard-coding in the dtc-version call - Make the logic deterministic, failing if DTC is too old - Move version checks into Makefile to avoid the complicated version script - Add documentation - Update the commit message Changes in v2: - Add a patch to bring back the dtc-version.sh script - Update the check to make sure libfdt is available if needed Makefile | 30 ++++++++++++++++++++++++++++-- doc/build/gcc.rst | 21 +++++++++++++++++++++ dts/Kconfig | 4 ---- scripts/Makefile | 1 - scripts/dtc-version.sh | 7 ++++++- 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 3014788e14e..74ca48c50c3 100644 --- a/Makefile +++ b/Makefile @@ -415,7 +415,13 @@ PERL = perl PYTHON ?= python PYTHON2 = python2 PYTHON3 ?= python3 -DTC ?= $(objtree)/scripts/dtc/dtc + +# The devicetree compiler and pylibfdt are automatically built unless DTC is +# provided. If DTC is provided, it is assumed the pylibfdt is available too. +DTC_INTREE := $(objtree)/scripts/dtc/dtc +DTC ?= $(DTC_INTREE) +DTC_MIN_VERSION := 010406 + CHECK = sparse CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ @@ -1973,9 +1979,29 @@ endif endif +# Check dtc and pylibfdt, if DTC is provided, else build them PHONY += scripts_dtc scripts_dtc: scripts_basic - $(Q)$(MAKE) $(build)=scripts/dtc + $(Q)if test "$(DTC)" = "$(DTC_INTREE)"; then \ + $(MAKE) $(build)=scripts/dtc; \ + else \ + if ! $(DTC) -v >/dev/null; then \ + echo '*** Failed to check dtc version: $(DTC)'; \ + false; \ + else \ + if test "$(call dtc-version)" -lt $(DTC_MIN_VERSION); then \ + echo '*** Your dtc is too old, please upgrade to dtc $(DTC_MIN_VERSION) or newer'; \ + false; \ + else \ + if [ -n "$(CONFIG_PYLIBFDT)" ]; then \ + if ! echo "import libfdt" | $(PYTHON3) 2>/dev/null; then \ + echo '*** pylibfdt does not seem to be available with $(PYTHON3)'; \ + false; \ + fi; \ + fi; \ + fi; \ + fi; \ + fi # --------------------------------------------------------------------------- quiet_cmd_cpp_lds = LDS $@ diff --git a/doc/build/gcc.rst b/doc/build/gcc.rst index 0cdc307d57b..6c4b4ad7a05 100644 --- a/doc/build/gcc.rst +++ b/doc/build/gcc.rst @@ -120,6 +120,27 @@ Further important build parameters are * O= - generate all output files in directory , including .config * V=1 - verbose build +Devicetree compiler +~~~~~~~~~~~~~~~~~~~ + +Boards that use `CONFIG_OF_CONTROL` (i.e. almost all of them) need the +devicetree compiler (dtc). Those with `CONFIG_PYLIBFDT` need pylibfdt, a Python +library for accessing devicetree data. Suitable versions of these are included +in the U-Boot tree in `scripts/dtc` and built automatically as needed. + +To use the system versions of these, use the DTC parameter, for example + +.. code-block:: bash + + DTC=/usr/bin/dtc make + +In this case, dtc and pylibfdt are not built. The build checks that the version +of dtc is new enough. It also makes sure that pylibfdt is present, if needed +(see `scripts_dtc` in the Makefile). + +Note that the :doc:`tools` are always built with the included version of libfdt +so it is not possible to build U-Boot tools with a system libfdt, at present. + Other build targets ~~~~~~~~~~~~~~~~~~~ diff --git a/dts/Kconfig b/dts/Kconfig index dabe0080c1e..85d9d397e58 100644 --- a/dts/Kconfig +++ b/dts/Kconfig @@ -5,9 +5,6 @@ config SUPPORT_OF_CONTROL bool -config DTC - bool - config PYLIBFDT bool @@ -42,7 +39,6 @@ menu "Device Tree Control" config OF_CONTROL bool "Run-time configuration via Device Tree" - select DTC select OF_LIBFDT if !OF_PLATDATA help This feature provides for run-time configuration of U-Boot diff --git a/scripts/Makefile b/scripts/Makefile index e7b353f77f4..cfe9fef8044 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -10,4 +10,3 @@ always := $(hostprogs-y) # Let clean descend into subdirs subdir- += basic kconfig -subdir-$(CONFIG_DTC) += dtc diff --git a/scripts/dtc-version.sh b/scripts/dtc-version.sh index bd4e818e92d..bfb514e179f 100755 --- a/scripts/dtc-version.sh +++ b/scripts/dtc-version.sh @@ -10,11 +10,16 @@ dtc="$*" if [ ${#dtc} -eq 0 ]; then - echo "Error: No dtc command specified." + echo "Error: No dtc command specified" printf "Usage:\n\t$0 \n" exit 1 fi +if ! which $dtc >/dev/null ; then + echo "Error: Cannot find dtc: $dtc" + exit 1 +fi + MAJOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 1) MINOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 2) PATCH=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 3 | cut -d - -f 1) -- 2.33.0.685.g46640cef36-goog