1################################################################################
2#
3# uboot-tools
4#
5################################################################################
6
7UBOOT_TOOLS_VERSION = 2021.07
8UBOOT_TOOLS_SOURCE = u-boot-$(UBOOT_TOOLS_VERSION).tar.bz2
9UBOOT_TOOLS_SITE = https://ftp.denx.de/pub/u-boot
10UBOOT_TOOLS_LICENSE = GPL-2.0+
11UBOOT_TOOLS_LICENSE_FILES = Licenses/gpl-2.0.txt
12UBOOT_TOOLS_CPE_ID_VENDOR = denx
13UBOOT_TOOLS_CPE_ID_PRODUCT = u-boot
14UBOOT_TOOLS_INSTALL_STAGING = YES
15
16# u-boot 2020.01+ needs make 4.0+
17UBOOT_TOOLS_DEPENDENCIES = $(BR2_MAKE_HOST_DEPENDENCY)
18HOST_UBOOT_TOOLS_DEPENDENCIES = $(BR2_MAKE_HOST_DEPENDENCY)
19
20define UBOOT_TOOLS_CONFIGURE_CMDS
21	mkdir -p $(@D)/include/config
22	touch $(@D)/include/config/auto.conf
23	mkdir -p $(@D)/include/generated
24	touch $(@D)/include/generated/autoconf.h
25	echo $(if $(BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT),'#define CONFIG_FIT_PRINT 1') >> $(@D)/include/generated/autoconf.h
26	mkdir -p $(@D)/include/asm
27	touch $(@D)/include/asm/linkage.h
28endef
29
30UBOOT_TOOLS_MAKE_OPTS = CROSS_COMPILE="$(TARGET_CROSS)" \
31	CFLAGS="$(TARGET_CFLAGS)" \
32	LDFLAGS="$(TARGET_LDFLAGS)" \
33	HOSTCFLAGS="$(HOST_CFLAGS)" \
34	STRIP=$(TARGET_STRIP)
35
36ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT),y)
37UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT=y CONFIG_MKIMAGE_DTC_PATH=dtc
38UBOOT_TOOLS_DEPENDENCIES += dtc
39endif
40
41ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT),y)
42UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT_SIGNATURE=y CONFIG_FIT_SIGNATURE_MAX_SIZE=0x10000000
43UBOOT_TOOLS_DEPENDENCIES += openssl host-pkgconf
44endif
45
46ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKEFICAPSULE),y)
47UBOOT_TOOLS_MAKE_OPTS += CONFIG_EFI_HAVE_CAPSULE_SUPPORT=y
48endif
49
50ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN),y)
51define UBOOT_TOOLS_INSTALL_FIT_CHECK_SIGN
52	$(INSTALL) -m 0755 -D $(@D)/tools/fit_check_sign $(TARGET_DIR)/usr/bin/fit_check_sign
53endef
54endif
55
56define UBOOT_TOOLS_BUILD_CMDS
57	$(TARGET_MAKE_ENV) $(BR2_MAKE) -C $(@D) $(UBOOT_TOOLS_MAKE_OPTS) \
58		CROSS_BUILD_TOOLS=y tools-only
59	$(TARGET_MAKE_ENV) $(BR2_MAKE) -C $(@D) $(UBOOT_TOOLS_MAKE_OPTS) \
60		envtools no-dot-config-targets=envtools
61endef
62
63ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE),y)
64define UBOOT_TOOLS_INSTALL_MKIMAGE
65	$(INSTALL) -m 0755 -D $(@D)/tools/mkimage $(TARGET_DIR)/usr/bin/mkimage
66endef
67endif
68
69ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKEFICAPSULE),y)
70define UBOOT_TOOLS_INSTALL_MKEFICAPSULE
71	$(INSTALL) -m 0755 -D $(@D)/tools/mkeficapsule $(TARGET_DIR)/usr/bin/mkeficapsule
72endef
73endif
74
75ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE),y)
76define UBOOT_TOOLS_INSTALL_MKENVIMAGE
77	$(INSTALL) -m 0755 -D $(@D)/tools/mkenvimage $(TARGET_DIR)/usr/bin/mkenvimage
78endef
79endif
80
81ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FWPRINTENV),y)
82define UBOOT_TOOLS_INSTALL_FWPRINTENV
83	$(INSTALL) -m 0755 -D $(@D)/tools/env/fw_printenv $(TARGET_DIR)/usr/sbin/fw_printenv
84	ln -sf fw_printenv $(TARGET_DIR)/usr/sbin/fw_setenv
85endef
86endif
87
88ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_DUMPIMAGE),y)
89define UBOOT_TOOLS_INSTALL_DUMPIMAGE
90	$(INSTALL) -m 0755 -D $(@D)/tools/dumpimage $(TARGET_DIR)/usr/sbin/dumpimage
91endef
92endif
93
94define UBOOT_TOOLS_INSTALL_STAGING_CMDS
95	$(INSTALL) -D -m 0755 $(@D)/tools/env/lib.a $(STAGING_DIR)/usr/lib/libubootenv.a
96	$(INSTALL) -D -m 0644 $(@D)/tools/env/fw_env.h $(STAGING_DIR)/usr/include/fw_env.h
97endef
98
99define UBOOT_TOOLS_INSTALL_TARGET_CMDS
100	$(UBOOT_TOOLS_INSTALL_MKIMAGE)
101	$(UBOOT_TOOLS_INSTALL_MKEFICAPSULE)
102	$(UBOOT_TOOLS_INSTALL_MKENVIMAGE)
103	$(UBOOT_TOOLS_INSTALL_FWPRINTENV)
104	$(UBOOT_TOOLS_INSTALL_DUMPIMAGE)
105	$(UBOOT_TOOLS_INSTALL_FIT_CHECK_SIGN)
106endef
107
108# host-uboot-tools
109
110define HOST_UBOOT_TOOLS_CONFIGURE_CMDS
111	mkdir -p $(@D)/include/config
112	touch $(@D)/include/config/auto.conf
113	mkdir -p $(@D)/include/generated
114	touch $(@D)/include/generated/autoconf.h
115	echo $(if $(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT),'#define CONFIG_FIT_PRINT 1') >> $(@D)/include/generated/autoconf.h
116	mkdir -p $(@D)/include/asm
117	touch $(@D)/include/asm/linkage.h
118endef
119
120HOST_UBOOT_TOOLS_MAKE_OPTS = HOSTCC="$(HOSTCC)" \
121	HOSTCFLAGS="$(HOST_CFLAGS)" \
122	HOSTLDFLAGS="$(HOST_LDFLAGS)" \
123	CONFIG_EFI_HAVE_CAPSULE_SUPPORT=y
124
125ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT),y)
126HOST_UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT=y CONFIG_MKIMAGE_DTC_PATH=dtc
127HOST_UBOOT_TOOLS_DEPENDENCIES += host-dtc
128endif
129
130ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT),y)
131HOST_UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT_SIGNATURE=y CONFIG_FIT_SIGNATURE_MAX_SIZE=0x10000000
132HOST_UBOOT_TOOLS_DEPENDENCIES += host-openssl
133define HOST_UBOOT_TOOLS_INSTALL_FIT_CHECK_SIGN
134	$(INSTALL) -m 0755 -D $(@D)/tools/fit_check_sign $(HOST_DIR)/bin/fit_check_sign
135endef
136endif
137
138ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE),y)
139
140UBOOT_TOOLS_GENERATE_ENV_FILE = $(call qstrip,$(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE))
141
142# If BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE is left empty, we
143# will use the default environment provided in the U-Boot build
144# directory as boot-env-defaults.txt, which requires having uboot as a
145# dependency.
146# If BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE is not empty, is
147# might be referring to a file within the U-Boot source tree, so we
148# also need to have uboot as a dependency.
149ifeq ($(BR2_TARGET_UBOOT),y)
150HOST_UBOOT_TOOLS_DEPENDENCIES += uboot
151
152# Handle the case where BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE
153# is left empty, use the default U-Boot environment.
154ifeq ($(UBOOT_TOOLS_GENERATE_ENV_FILE),)
155UBOOT_TOOLS_GENERATE_ENV_FILE = $(@D)/boot-env-defaults.txt
156define HOST_UBOOT_TOOLS_GENERATE_ENV_DEFAULTS
157	CROSS_COMPILE="$(TARGET_CROSS)" \
158		$(UBOOT_SRCDIR)/scripts/get_default_envs.sh \
159		$(UBOOT_SRCDIR) \
160		> $(UBOOT_TOOLS_GENERATE_ENV_FILE)
161endef
162endif # UBOOT_TOOLS_GENERATE_ENV_FILE
163endif # BR2_TARGET_UBOOT
164
165ifeq ($(BR_BUILDING),y)
166ifeq ($(call qstrip,$(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE)),)
167$(error Please provide U-Boot environment size (BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE setting))
168endif
169# If U-Boot is not available, ENVIMAGE_SOURCE must be provided by user,
170# otherwise it is optional because the default can be taken from U-Boot
171ifeq ($(BR2_TARGET_UBOOT),)
172ifeq ($(call qstrip,$(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE)),)
173$(error Please provide U-Boot environment file (BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE setting))
174endif
175endif #BR2_TARGET_UBOOT
176endif #BR_BUILDING
177
178define HOST_UBOOT_TOOLS_GENERATE_ENVIMAGE
179	$(HOST_UBOOT_TOOLS_GENERATE_ENV_DEFAULTS)
180	cat $(UBOOT_TOOLS_GENERATE_ENV_FILE) | \
181		$(@D)/tools/mkenvimage -s $(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE) \
182		$(if $(BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_REDUNDANT),-r) \
183		$(if $(filter "BIG",$(BR2_ENDIAN)),-b) \
184		-o $(@D)/tools/uboot-env.bin \
185		-
186endef
187define HOST_UBOOT_TOOLS_INSTALL_ENVIMAGE
188	$(INSTALL) -m 0755 -D $(@D)/tools/uboot-env.bin $(BINARIES_DIR)/uboot-env.bin
189endef
190endif #BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE
191
192ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT),y)
193ifeq ($(BR_BUILDING),y)
194ifeq ($(call qstrip,$(BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE)),)
195$(error Please define a source file for U-Boot boot script (BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE setting))
196endif
197endif #BR_BUILDING
198
199define HOST_UBOOT_TOOLS_GENERATE_BOOT_SCRIPT
200	$(@D)/tools/mkimage -C none -A $(MKIMAGE_ARCH) -T script \
201		-d $(call qstrip,$(BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE)) \
202		$(@D)/tools/boot.scr
203endef
204define HOST_UBOOT_TOOLS_INSTALL_BOOT_SCRIPT
205	$(INSTALL) -m 0755 -D $(@D)/tools/boot.scr $(BINARIES_DIR)/boot.scr
206endef
207endif #BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT
208
209define HOST_UBOOT_TOOLS_BUILD_CMDS
210	$(BR2_MAKE1) -C $(@D) $(HOST_UBOOT_TOOLS_MAKE_OPTS) tools-only
211	$(BR2_MAKE1) -C $(@D) $(HOST_UBOOT_TOOLS_MAKE_OPTS) envtools no-dot-config-targets=envtools
212	$(HOST_UBOOT_TOOLS_GENERATE_ENVIMAGE)
213	$(HOST_UBOOT_TOOLS_GENERATE_BOOT_SCRIPT)
214endef
215
216define HOST_UBOOT_TOOLS_INSTALL_CMDS
217	$(INSTALL) -m 0755 -D $(@D)/tools/mkimage $(HOST_DIR)/bin/mkimage
218	$(INSTALL) -m 0755 -D $(@D)/tools/mkeficapsule $(HOST_DIR)/bin/mkeficapsule
219	$(INSTALL) -m 0755 -D $(@D)/tools/mkenvimage $(HOST_DIR)/bin/mkenvimage
220	$(INSTALL) -m 0755 -D $(@D)/tools/dumpimage $(HOST_DIR)/bin/dumpimage
221	$(HOST_UBOOT_TOOLS_INSTALL_FIT_CHECK_SIGN)
222	$(INSTALL) -m 0755 -D $(@D)/tools/env/fw_printenv $(HOST_DIR)/bin/fw_printenv
223	ln -sf $(HOST_DIR)/bin/fw_printenv $(HOST_DIR)/bin/fw_setenv
224	$(HOST_UBOOT_TOOLS_INSTALL_ENVIMAGE)
225	$(HOST_UBOOT_TOOLS_INSTALL_BOOT_SCRIPT)
226endef
227
228$(eval $(generic-package))
229$(eval $(host-generic-package))
230
231# Convenience variables for other mk files that make use of mkimage
232
233MKIMAGE = $(HOST_DIR)/bin/mkimage
234
235# mkimage supports alpha arc arm arm64 blackfin ia64 invalid m68k microblaze mips mips64 nds32 nios2 or1k powerpc riscv s390 sandbox sh sparc sparc64 x86 x86_64 xtensa
236# NORMALIZED_ARCH can be arm64 arc arm blackfin m68k microblaze mips nios2 powerpc sh sparc i386 x86_64 xtensa
237# For i386, we need to convert
238# For openrisc, we need to convert
239# For others, we'll just keep NORMALIZED_ARCH
240ifeq ($(NORMALIZED_ARCH),i386)
241MKIMAGE_ARCH = x86
242else ifeq ($(NORMALIZED_ARCH),openrisc)
243MKIMAGE_ARCH = or1k
244else
245MKIMAGE_ARCH = $(NORMALIZED_ARCH)
246endif
247