uboot-tools.mk 8.8 KB

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