Makefile: Only build dtc if needed
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 <sjg@chromium.org>
This commit is contained in:
parent
d7faa082a5
commit
93b1965322
30
Makefile
30
Makefile
@ -415,7 +415,13 @@ PERL = perl
|
|||||||
PYTHON ?= python
|
PYTHON ?= python
|
||||||
PYTHON2 = python2
|
PYTHON2 = python2
|
||||||
PYTHON3 ?= python3
|
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
|
CHECK = sparse
|
||||||
|
|
||||||
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||||
@ -1954,9 +1960,29 @@ endif
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Check dtc and pylibfdt, if DTC is provided, else build them
|
||||||
PHONY += scripts_dtc
|
PHONY += scripts_dtc
|
||||||
scripts_dtc: scripts_basic
|
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 $@
|
quiet_cmd_cpp_lds = LDS $@
|
||||||
|
21
doc/build/gcc.rst
vendored
21
doc/build/gcc.rst
vendored
@ -120,6 +120,27 @@ Further important build parameters are
|
|||||||
* O=<dir> - generate all output files in directory <dir>, including .config
|
* O=<dir> - generate all output files in directory <dir>, including .config
|
||||||
* V=1 - verbose build
|
* 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
|
Other build targets
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -5,9 +5,6 @@
|
|||||||
config SUPPORT_OF_CONTROL
|
config SUPPORT_OF_CONTROL
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config DTC
|
|
||||||
bool
|
|
||||||
|
|
||||||
config PYLIBFDT
|
config PYLIBFDT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
@ -42,7 +39,6 @@ menu "Device Tree Control"
|
|||||||
|
|
||||||
config OF_CONTROL
|
config OF_CONTROL
|
||||||
bool "Run-time configuration via Device Tree"
|
bool "Run-time configuration via Device Tree"
|
||||||
select DTC
|
|
||||||
select OF_LIBFDT if !OF_PLATDATA
|
select OF_LIBFDT if !OF_PLATDATA
|
||||||
select OF_REAL if !OF_PLATDATA
|
select OF_REAL if !OF_PLATDATA
|
||||||
help
|
help
|
||||||
|
@ -10,4 +10,3 @@ always := $(hostprogs-y)
|
|||||||
|
|
||||||
# Let clean descend into subdirs
|
# Let clean descend into subdirs
|
||||||
subdir- += basic kconfig
|
subdir- += basic kconfig
|
||||||
subdir-$(CONFIG_DTC) += dtc
|
|
||||||
|
@ -10,11 +10,16 @@
|
|||||||
dtc="$*"
|
dtc="$*"
|
||||||
|
|
||||||
if [ ${#dtc} -eq 0 ]; then
|
if [ ${#dtc} -eq 0 ]; then
|
||||||
echo "Error: No dtc command specified."
|
echo "Error: No dtc command specified"
|
||||||
printf "Usage:\n\t$0 <dtc-command>\n"
|
printf "Usage:\n\t$0 <dtc-command>\n"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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)
|
MAJOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 1)
|
||||||
MINOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 2)
|
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)
|
PATCH=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 3 | cut -d - -f 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user