edk2.mk 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. ################################################################################
  2. #
  3. # edk2
  4. #
  5. ################################################################################
  6. EDK2_VERSION = edk2-stable202308
  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 relase 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 or DeveloperBox) EDK2 will package
  45. # the ATF images within its own build system. In such cases, intermediary
  46. # "EDK2 packages" will be built in $(EDK2_BUILD_PACKAGES) in order for EDK2
  47. # 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_SOCIONEXT_DEVELOPERBOX),y)
  87. EDK2_ARCH = AARCH64
  88. EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware
  89. EDK2_PACKAGE_NAME = Platform/Socionext/DeveloperBox
  90. EDK2_PLATFORM_NAME = DeveloperBox
  91. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  92. EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
  93. EDK2_BUILD_OPTS += -D DO_X86EMU=TRUE
  94. EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
  95. define EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
  96. mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox
  97. $(ARM_TRUSTED_FIRMWARE_DIR)/tools/fiptool/fiptool create \
  98. --tb-fw $(BINARIES_DIR)/bl31.bin \
  99. --soc-fw $(BINARIES_DIR)/bl31.bin \
  100. --scp-fw $(BINARIES_DIR)/bl31.bin \
  101. $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox/fip_all_arm_tf.bin
  102. endef
  103. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOLIDRUN_ARMADA80X0MCBIN),y)
  104. EDK2_ARCH = AARCH64
  105. EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware edk2-non-osi
  106. EDK2_PACKAGE_NAME = Platform/SolidRun/Armada80x0McBin
  107. EDK2_PLATFORM_NAME = Armada80x0McBin
  108. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  109. EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
  110. EDK2_BUILD_OPTS += -D INCLUDE_TFTP_COMMAND
  111. EDK2_PACKAGES_PATHS += $(STAGING_DIR)/usr/share/edk2-non-osi
  112. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_QEMU_SBSA),y)
  113. EDK2_ARCH = AARCH64
  114. EDK2_DEPENDENCIES += arm-trusted-firmware
  115. EDK2_PACKAGE_NAME = Platform/Qemu/SbsaQemu
  116. EDK2_PLATFORM_NAME = SbsaQemu
  117. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  118. EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_QEMU_SBSA
  119. define EDK2_PRE_BUILD_QEMU_SBSA
  120. mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa
  121. ln -srf $(BINARIES_DIR)/{bl1.bin,fip.bin} $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa/
  122. endef
  123. endif
  124. EDK2_BASETOOLS_OPTS = \
  125. EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \
  126. EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)"
  127. EDK2_PACKAGES_PATH = $(subst $(space),:,$(strip $(EDK2_PACKAGES_PATHS)))
  128. EDK2_BUILD_ENV += \
  129. WORKSPACE=$(@D) \
  130. PACKAGES_PATH=$(EDK2_PACKAGES_PATH) \
  131. PYTHON_COMMAND=$(HOST_DIR)/bin/python3 \
  132. IASL_PREFIX=$(HOST_DIR)/bin/ \
  133. NASM_PREFIX=$(HOST_DIR)/bin/ \
  134. GCC5_$(EDK2_ARCH)_PREFIX=$(TARGET_CROSS)
  135. EDK2_BUILD_OPTS += \
  136. -t GCC5 \
  137. -n $(BR2_JLEVEL) \
  138. -a $(EDK2_ARCH) \
  139. -b $(EDK2_BUILD_TYPE) \
  140. -p $(EDK2_PACKAGE_NAME)/$(EDK2_PLATFORM_NAME).dsc
  141. define EDK2_BUILD_CMDS
  142. mkdir -p $(EDK2_BUILD_PACKAGES)
  143. export $(EDK2_BUILD_ENV) && \
  144. unset ARCH && \
  145. source $(@D)/edksetup.sh && \
  146. $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/BaseTools $(EDK2_BASETOOLS_OPTS) && \
  147. build $(EDK2_BUILD_OPTS) all
  148. endef
  149. define EDK2_INSTALL_IMAGES_CMDS
  150. cp -f $(@D)/Build/$(EDK2_BUILD_DIR)/$(EDK2_BUILD_TYPE)_GCC5/FV/*.fd $(BINARIES_DIR)
  151. endef
  152. $(eval $(generic-package))