kbuild: rename SRCTREE to srctree
[oweals/u-boot.git] / tools / Makefile
index af0de477cd8623cce4f8da970ce28f0c9e58667b..097cc1df17838af2f0904f1f6a361efb94d328d2 100644 (file)
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
-# See file CREDITS for list of people who contributed to this
-# project.
+# SPDX-License-Identifier:     GPL-2.0+
 #
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-# MA 02111-1307 USA
-#
-
-BIN_FILES      = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) ubsha1$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
-
-OBJ_LINKS      = environment.o crc32.o sha1.o
-OBJ_FILES      = img2srec.o mkimage.o envcrc.o ubsha1.o gen_eth_addr.o bmp_logo.o
-
-ifeq ($(ARCH),mips)
-BIN_FILES      += inca-swap-bytes$(SFX)
-OBJ_FILES      += inca-swap-bytes.o
-endif
-
-# Don't build by default
-#ifeq ($(ARCH),ppc)
-#BIN_FILES             += mpc86x_clk$(SFX)
-#OBJ_FILES     += mpc86x_clk.o
-#endif
-
-LOGO_H = $(OBJTREE)/include/bmp_logo.h
-
-ifeq ($(LOGO_BMP),)
-LOGO_BMP= logos/denx.bmp
-endif
-
-#-------------------------------------------------------------------------
-
-HOSTARCH := $(shell uname -m | \
-       sed -e s/i.86/i386/ \
-           -e s/sun4u/sparc64/ \
-           -e s/arm.*/arm/ \
-           -e s/sa110/arm/ \
-           -e s/powerpc/ppc/ \
-           -e s/Power\ Macintosh/ppc/ \
-           -e s/macppc/ppc/)
-
-HOSTOS := $(shell uname -s | tr A-Z a-z | \
-       sed -e 's/\(cygwin\).*/cygwin/')
-
-TOOLSUBDIRS =
 
 #
-# Mac OS X / Darwin's C preprocessor is Apple specific.  It
-# generates numerous errors and warnings.  We want to bypass it
-# and use GNU C's cpp.  To do this we pass the -traditional-cpp
-# option to the compiler.  Note that the -traditional-cpp flag
-# DOES NOT have the same semantics as GNU C's flag, all it does
-# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
+# toolchains targeting win32 generate .exe files
 #
-# Apple's linker is similar, thanks to the new 2 stage linking
-# multiple symbol definitions are treated as errors, hence the
-# -multiply_defined suppress option to turn off this error.
-#
-ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc)
-HOST_CFLAGS = -traditional-cpp -Wall
-HOST_LDFLAGS =-multiply_defined suppress
-HOST_ENVIRO_CFLAGS =
-
-else
-ifeq ($(HOSTOS)-$(HOSTARCH),netbsd-ppc)
-HOST_CFLAGS = -Wall -pedantic
-HOST_LDFLAGS =
-HOST_ENVIRO_CFLAGS =
-
-#
-# Everyone else
-#
-else
-HOST_CFLAGS = -Wall -pedantic
-HOST_LDFLAGS =
-HOST_ENVIRO_CFLAGS =
-endif
-endif
-
-#
-# Cygwin needs .exe files :-(
-#
-ifeq ($(HOSTOS),cygwin)
+ifneq (,$(findstring WIN32 ,$(shell $(HOSTCC) -E -dM -xc /dev/null)))
 SFX = .exe
-HOST_CFLAGS += -ansi
 else
 SFX =
 endif
 
-#
-# Include this after HOSTOS HOSTARCH check
-# so that we can act intelligently.
-#
-include $(TOPDIR)/config.mk
-
-# now $(obj) is defined
-SRCS   := $(addprefix $(obj),$(OBJ_LINKS:.o=.c)) $(OBJ_FILES:.o=.c)
-BINS   := $(addprefix $(obj),$(BIN_FILES))
-
-#
-# Use native tools and options
-#
-CPPFLAGS   = -idirafter $(SRCTREE)/include \
-               -idirafter $(OBJTREE)/include2 \
-               -idirafter $(OBJTREE)/include \
-               -DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC
-CFLAGS     = $(HOST_CFLAGS) $(CPPFLAGS) -O
-AFLAGS    = -D__ASSEMBLY__ $(CPPFLAGS)
-CC        = $(HOSTCC)
-STRIP     = $(HOSTSTRIP)
-MAKEDEPEND = makedepend
-
-all:   $(obj).depend $(BINS) $(LOGO_H) subdirs
-
-$(obj)envcrc$(SFX):    $(obj)envcrc.o $(obj)crc32.o $(obj)environment.o $(obj)sha1.o
-               $(CC) $(CFLAGS) -o $@ $^
-
-$(obj)ubsha1$(SFX):    $(obj)ubsha1.o $(obj)sha1.o
-               $(CC) $(CFLAGS) -o $@ $^
-
-$(obj)img2srec$(SFX):  $(obj)img2srec.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
-
-$(obj)mkimage$(SFX):   $(obj)mkimage.o $(obj)crc32.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+# Enable all the config-independent tools
+ifneq ($(HOST_TOOLS_ALL),)
+CONFIG_LCD_LOGO = y
+CONFIG_CMD_LOADS = y
+CONFIG_CMD_NET = y
+CONFIG_XWAY_SWAP_BYTES = y
+CONFIG_NETCONSOLE = y
+CONFIG_SHA1_CHECK_UB_IMG = y
+endif
 
-$(obj)ncb$(SFX):       $(obj)ncb.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+subdir-$(HOST_TOOLS_ALL) += easylogo
+subdir-$(HOST_TOOLS_ALL) += gdb
+
+# Merge all the different vars for envcrc into one
+ENVCRC-$(CONFIG_ENV_IS_EMBEDDED) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_DATAFLASH) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_EEPROM) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_FLASH) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_ONENAND) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_NAND) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_NVRAM) = y
+ENVCRC-$(CONFIG_ENV_IS_IN_SPI_FLASH) = y
+CONFIG_BUILD_ENVCRC ?= $(ENVCRC-y)
+
+# TODO: CONFIG_CMD_LICENSE does not work
+hostprogs-$(CONFIG_CMD_LICENSE) += bin2header$(SFX)
+
+hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo$(SFX)
+hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo$(SFX)
+HOSTCFLAGS_bmp_logo$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_BUILD_ENVCRC) += envcrc$(SFX)
+envcrc$(SFX)-objs := crc32.o env_embedded.o envcrc.o sha1.o
+
+hostprogs-$(CONFIG_CMD_NET) += gen_eth_addr$(SFX)
+HOSTCFLAGS_gen_eth_addr$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_CMD_LOADS) += img2srec$(SFX)
+HOSTCFLAGS_img2srec$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes$(SFX)
+HOSTCFLAGS_xway-swap-bytes$(SFX).o := -pedantic
+
+hostprogs-y += mkenvimage$(SFX)
+mkenvimage$(SFX)-objs := crc32.o mkenvimage.o os_support.o
+
+hostprogs-y += dumpimage$(SFX) mkimage$(SFX)
+
+FIT_SIG_OBJS-$(CONFIG_FIT_SIGNATURE) := image-sig.o
+# Flattened device tree objects
+LIBFDT_OBJS := fdt.o fdt_ro.o fdt_rw.o fdt_strerror.o fdt_wip.o
+RSA_OBJS-$(CONFIG_FIT_SIGNATURE) := rsa-sign.o
+
+# common objs for dumpimage and mkimage
+dumpimage-mkimage-objs := aisimage.o \
+                       $(FIT_SIG_OBJS-y) \
+                       crc32.o \
+                       default_image.o \
+                       fit_image.o \
+                       image-fit.o \
+                       image-host.o \
+                       image.o \
+                       imagetool.o \
+                       imximage.o \
+                       kwbimage.o \
+                       md5.o \
+                       mxsimage.o \
+                       omapimage.o \
+                       os_support.o \
+                       pblimage.o \
+                       sha1.o \
+                       ublimage.o \
+                       $(LIBFDT_OBJS) \
+                       $(RSA_OBJS-y)
+
+dumpimage$(SFX)-objs := $(dumpimage-mkimage-objs) dumpimage.o
+mkimage$(SFX)-objs   := $(dumpimage-mkimage-objs) mkimage.o
+
+# TODO(sjg@chromium.org): Is this correct on Mac OS?
+
+# MXSImage needs LibSSL
+ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
+HOSTLOADLIBES_dumpimage$(SFX) := -lssl -lcrypto
+HOSTLOADLIBES_mkimage$(SFX) := -lssl -lcrypto
+# Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
+# the mxsimage support within tools/mxsimage.c .
+HOSTCFLAGS_mxsimage.o += -DCONFIG_MXS
+endif
 
-$(obj)gen_eth_addr$(SFX):      $(obj)gen_eth_addr.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+ifdef CONFIG_FIT_SIGNATURE
+HOSTLOADLIBES_dumpimage$(SFX) := -lssl -lcrypto
+HOSTLOADLIBES_mkimage$(SFX) := -lssl -lcrypto
 
-$(obj)bmp_logo$(SFX):  $(obj)bmp_logo.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+# This affects include/image.h, but including the board config file
+# is tricky, so manually define this options here.
+HOST_EXTRACFLAGS       += -DCONFIG_FIT_SIGNATURE
+endif
 
-$(obj)inca-swap-bytes$(SFX):   $(obj)inca-swap-bytes.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+hostprogs-$(CONFIG_EXYNOS5250) += mkexynosspl$(SFX)
+hostprogs-$(CONFIG_EXYNOS5420) += mkexynosspl$(SFX)
+HOSTCFLAGS_mkexynosspl$(SFX).o := -pedantic
 
-$(obj)mpc86x_clk$(SFX):        $(obj)mpc86x_clk.o
-               $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
-               $(STRIP) $@
+hostprogs-$(CONFIG_MX23) += mxsboot$(SFX)
+hostprogs-$(CONFIG_MX28) += mxsboot$(SFX)
+HOSTCFLAGS_mxsboot$(SFX).o := -pedantic
 
-$(obj)envcrc.o:        $(src)envcrc.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+hostprogs-$(CONFIG_NETCONSOLE) += ncb$(SFX)
+hostprogs-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1$(SFX)
 
-$(obj)ubsha1.o:        $(src)ubsha1.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+ubsha1$(SFX)-objs := os_support.o sha1.o ubsha1.o
 
-$(obj)crc32.o: $(obj)crc32.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+HOSTCFLAGS_ubsha1.o := -pedantic
 
-$(obj)sha1.o:  $(obj)sha1.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+hostprogs-$(CONFIG_KIRKWOOD) += kwboot$(SFX)
+hostprogs-y += proftool$(SFX)
+hostprogs-$(CONFIG_STATIC_RELA) += relocate-rela$(SFX)
 
-$(obj)mkimage.o:       $(src)mkimage.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+# We build some files with extra pedantic flags to try to minimize things
+# that won't build on some weird host compiler -- though there are lots of
+# exceptions for files that aren't complaint.
+HOSTCFLAGS_crc32.o := -pedantic
+HOSTCFLAGS_md5.o := -pedantic
+HOSTCFLAGS_sha1.o := -pedantic
 
-$(obj)ncb.o:           $(src)ncb.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+# Don't build by default
+#hostprogs-$(CONFIG_PPC) += mpc86x_clk$(SFX)
+#HOSTCFLAGS_mpc86x_clk$(SFX).o := -pedantic
 
-$(obj)gen_eth_addr.o:  $(src)gen_eth_addr.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+always := $(hostprogs-y)
 
-$(obj)inca-swap-bytes.o:       $(src)inca-swap-bytes.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+# Generated LCD/video logo
+LOGO_H = $(objtree)/include/bmp_logo.h
+LOGO_DATA_H = $(objtree)/include/bmp_logo_data.h
+LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
+LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_DATA_H)
+LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
+LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_DATA_H)
 
-$(obj)mpc86x_clk.o:    $(src)mpc86x_clk.c
-               $(CC) -g $(CFLAGS) -c -o $@ $<
+# Generic logo
+ifeq ($(LOGO_BMP),)
+LOGO_BMP= $(srctree)/$(src)/logos/denx.bmp
 
-subdirs:
-ifeq ($(TOOLSUBDIRS),)
-               @:
+# Use board logo and fallback to vendor
+ifneq ($(wildcard $(srctree)/$(src)/logos/$(BOARD).bmp),)
+LOGO_BMP= $(srctree)/$(src)/logos/$(BOARD).bmp
 else
-               @for dir in $(TOOLSUBDIRS) ; do \
-                   $(MAKE) \
-                       HOSTOS=$(HOSTOS) \
-                       HOSTARCH=$(HOSTARCH) \
-                       HOST_CFLAGS="$(HOST_CFLAGS)" \
-                       HOST_LDFLAGS="$(HOST_LDFLAGS)" \
-                       -C $$dir || exit 1 ; \
-               done
+ifneq ($(wildcard $(srctree)/$(src)/logos/$(VENDOR).bmp),)
+LOGO_BMP= $(srctree)/$(src)/logos/$(VENDOR).bmp
+endif
 endif
 
-$(obj)environment.c:
-               @rm -f $(obj)environment.c
-               ln -s $(src)../common/environment.c $(obj)environment.c
+endif # !LOGO_BMP
 
-$(obj)environment.o:   $(obj)environment.c
-               $(CC) -g $(HOST_ENVIRO_CFLAGS) $(CPPFLAGS) -c -o $@ $<
+#
+# Use native tools and options
+# Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
+# Define _GNU_SOURCE to obtain the getline prototype from stdio.h
+#
+HOST_EXTRACFLAGS += -include $(srctree)/include/libfdt_env.h \
+               $(patsubst -I%,-idirafter%, $(UBOOTINCLUDE)) \
+               -I$(srctree)/lib/libfdt \
+               -I$(srctree)/tools \
+               -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) \
+               -DUSE_HOSTCC \
+               -D__KERNEL_STRICT_NAMES \
+               -D_GNU_SOURCE
 
-$(obj)crc32.c:
-               @rm -f $(obj)crc32.c
-               ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c
+__build:       $(LOGO-y)
 
-$(obj)sha1.c:
-               @rm -f $(obj)sha1.c
-               ln -s $(src)../lib_generic/sha1.c $(obj)sha1.c
+$(LOGO_H):     $(obj)/bmp_logo $(LOGO_BMP)
+       $(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
 
-$(LOGO_H):     $(obj)bmp_logo $(LOGO_BMP)
-               $(obj)./bmp_logo $(LOGO_BMP) >$@
+$(LOGO_DATA_H):        $(obj)/bmp_logo $(LOGO_BMP)
+       $(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
 
-#########################################################################
+# Let clean descend into subdirs
+subdir- += env
 
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
+ifneq ($(CROSS_BUILD_TOOLS),)
+HOSTCC = $(CC)
 
-sinclude $(obj).depend
+quiet_cmd_crosstools_strip = STRIP   $^
+      cmd_crosstools_strip = $(STRIP) $^; touch $@
+$(obj)/.strip: $(call objectify,$(filter $(always),$(hostprogs-y)))
+       $(call cmd,crosstools_strip)
 
-#########################################################################
+always += .strip
+endif
+clean-files += .strip