edk2.mk 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. ################################################################################
  2. #
  3. # edk2
  4. #
  5. ################################################################################
  6. EDK2_VERSION = edk2-stable202505
  7. EDK2_SITE = https://github.com/tianocore/edk2
  8. EDK2_SITE_METHOD = git
  9. EDK2_LICENSE = BSD-2-Clause-Patent
  10. EDK2_LICENSE_FILES = License.txt
  11. EDK2_CPE_ID_VENDOR = tianocore
  12. EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux
  13. EDK2_INSTALL_TARGET = NO
  14. EDK2_INSTALL_IMAGES = YES
  15. ifeq ($(BR2_ENABLE_DEBUG),y)
  16. EDK2_BUILD_TYPE = DEBUG
  17. ifeq ($(BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL),y)
  18. # DEBUG_ON_SERIAL_PORT is only tested to be set, so don't disable it, as
  19. # it would still be set.
  20. EDK2_BUILD_OPTS += -DDEBUG_ON_SERIAL_PORT
  21. endif
  22. else
  23. EDK2_BUILD_TYPE = RELEASE
  24. # DEBUG_ON_SERIAL_PORT is only valid in debug builds, so useless to set
  25. # it (enabled or disabled) on a release build.
  26. endif
  27. # Build system notes.
  28. #
  29. # The EDK2 build system is rather unique, so here are a few useful notes.
  30. #
  31. # First, builds rely heavily on Git submodules to fetch various dependencies
  32. # into specific directory structures. It might be possible to work around this
  33. # and rely on Buildroot's infrastructure, but using Git submodules greatly
  34. # simplifies this already complicated build system.
  35. #
  36. # Second, the build system is spread across various commands and stages.
  37. # Therefore, all build variables needs to be exported to be available
  38. # accordingly. The first stage will build $(@D)/BaseTools which contains
  39. # various tools and scripts for the host.
  40. #
  41. # Third, where applicable, the dependency direction between EDK2 and
  42. # ARM Trusted Firmware (ATF) will go in different direction for different
  43. # platforms. Most commonly, ATF will depend on EDK2 via the BL33 payload.
  44. # But for some platforms (e.g. QEMU SBSA) EDK2 will package the ATF
  45. # images within its own build system. In such cases, intermediary
  46. # "EDK2 packages" will be built in $(EDK2_BUILD_PACKAGES) in order for
  47. # EDK2 to be able to use them in subsequent build stages.
  48. #
  49. # For more information about the build setup:
  50. # https://edk2-docs.gitbook.io/edk-ii-build-specification/4_edk_ii_build_process_overview
  51. EDK2_GIT_SUBMODULES = YES
  52. EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot
  53. EDK2_PACKAGES_PATHS = $(@D) $(EDK2_BUILD_PACKAGES) $(STAGING_DIR)/usr/share/edk2-platforms
  54. ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y)
  55. EDK2_ARCH = IA32
  56. EDK2_DEPENDENCIES += host-nasm
  57. EDK2_PACKAGE_NAME = OvmfPkg
  58. EDK2_PLATFORM_NAME = OvmfPkgIa32
  59. EDK2_BUILD_DIR = OvmfIa32
  60. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y)
  61. EDK2_ARCH = X64
  62. EDK2_DEPENDENCIES += host-nasm
  63. EDK2_PACKAGE_NAME = OvmfPkg
  64. EDK2_PLATFORM_NAME = OvmfPkgX64
  65. EDK2_BUILD_DIR = OvmfX64
  66. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU),y)
  67. EDK2_ARCH = AARCH64
  68. EDK2_PACKAGE_NAME = ArmVirtPkg
  69. EDK2_PLATFORM_NAME = ArmVirtQemu
  70. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  71. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL),y)
  72. EDK2_ARCH = AARCH64
  73. EDK2_PACKAGE_NAME = ArmVirtPkg
  74. EDK2_PLATFORM_NAME = ArmVirtQemuKernel
  75. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  76. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_SGI575),y)
  77. EDK2_ARCH = AARCH64
  78. EDK2_PACKAGE_NAME = Platform/ARM/SgiPkg/Sgi575
  79. EDK2_PLATFORM_NAME = Sgi575
  80. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  81. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VEXPRESS_FVP_AARCH64),y)
  82. EDK2_ARCH = AARCH64
  83. EDK2_PACKAGE_NAME = Platform/ARM/VExpressPkg
  84. EDK2_PLATFORM_NAME = ArmVExpress-FVP-AArch64
  85. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  86. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOLIDRUN_ARMADA80X0MCBIN),y)
  87. EDK2_ARCH = AARCH64
  88. EDK2_DEPENDENCIES += host-dtc edk2-non-osi
  89. EDK2_PACKAGE_NAME = Platform/SolidRun/Armada80x0McBin
  90. EDK2_PLATFORM_NAME = Armada80x0McBin
  91. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  92. EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
  93. EDK2_BUILD_OPTS += -D INCLUDE_TFTP_COMMAND
  94. EDK2_PACKAGES_PATHS += $(STAGING_DIR)/usr/share/edk2-non-osi
  95. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_QEMU_SBSA),y)
  96. EDK2_ARCH = AARCH64
  97. EDK2_DEPENDENCIES += arm-trusted-firmware
  98. EDK2_PACKAGE_NAME = Platform/Qemu/SbsaQemu
  99. EDK2_PLATFORM_NAME = SbsaQemu
  100. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  101. EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_QEMU_SBSA
  102. define EDK2_PRE_BUILD_QEMU_SBSA
  103. mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa
  104. ln -srf $(BINARIES_DIR)/{bl1.bin,fip.bin} $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa/
  105. endef
  106. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_RISCV),y)
  107. EDK2_ARCH = RISCV64
  108. EDK2_PACKAGE_NAME = OvmfPkg/RiscVVirt
  109. EDK2_PLATFORM_NAME = RiscVVirtQemu
  110. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  111. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_LOONGARCH64),y)
  112. EDK2_ARCH = LOONGARCH64
  113. EDK2_PACKAGE_NAME = OvmfPkg/LoongArchVirt
  114. EDK2_PLATFORM_NAME = LoongArchVirtQemu
  115. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  116. endif
  117. EDK2_BASETOOLS_OPTS = \
  118. EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \
  119. EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)"
  120. EDK2_PACKAGES_PATH = $(subst $(space),:,$(strip $(EDK2_PACKAGES_PATHS)))
  121. # EDK2 "build" script internally uses and calls "make", which controls
  122. # its own flags. It is mainly tested while not being a sub-make. In
  123. # order to stay in that configuration, we avoid leaking top-level
  124. # Buildroot make flags into EDK2 build by clearing the MAKEFLAGS
  125. # environment variable.
  126. EDK2_BUILD_ENV += \
  127. MAKEFLAGS= \
  128. WORKSPACE=$(@D) \
  129. PACKAGES_PATH=$(EDK2_PACKAGES_PATH) \
  130. PYTHON_COMMAND=$(HOST_DIR)/bin/python3 \
  131. IASL_PREFIX=$(HOST_DIR)/bin/ \
  132. NASM_PREFIX=$(HOST_DIR)/bin/ \
  133. GCC5_$(EDK2_ARCH)_PREFIX=$(TARGET_CROSS)
  134. EDK2_BUILD_OPTS += \
  135. -t GCC5 \
  136. -n $(BR2_JLEVEL) \
  137. -a $(EDK2_ARCH) \
  138. -b $(EDK2_BUILD_TYPE) \
  139. -p $(EDK2_PACKAGE_NAME)/$(EDK2_PLATFORM_NAME).dsc
  140. define EDK2_BUILD_CMDS
  141. mkdir -p $(EDK2_BUILD_PACKAGES)
  142. export $(EDK2_BUILD_ENV) && \
  143. unset ARCH && \
  144. source $(@D)/edksetup.sh && \
  145. $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/BaseTools $(EDK2_BASETOOLS_OPTS) && \
  146. build $(EDK2_BUILD_OPTS) all
  147. endef
  148. define EDK2_INSTALL_IMAGES_CMDS
  149. cp -f $(@D)/Build/$(EDK2_BUILD_DIR)/$(EDK2_BUILD_TYPE)_GCC5/FV/*.fd $(BINARIES_DIR)
  150. endef
  151. $(eval $(generic-package))