edk2.mk 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. ################################################################################
  2. #
  3. # edk2
  4. #
  5. ################################################################################
  6. EDK2_VERSION = edk2-stable202102
  7. EDK2_SITE = https://github.com/tianocore/edk2
  8. EDK2_SITE_METHOD = git
  9. EDK2_LICENSE = BSD-2-Clause
  10. EDK2_LICENSE_FILE = 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. else
  18. EDK2_BUILD_TYPE = RELEASE
  19. endif
  20. # Build system notes.
  21. #
  22. # The EDK2 build system is rather unique, so here are a few useful notes.
  23. #
  24. # First, builds rely heavily on Git submodules to fetch various dependencies
  25. # into specific directory structures. It might be possible to work around this
  26. # and rely on Buildroot's infrastructure, but using Git submodules greatly
  27. # simplifies this already complicated build system.
  28. #
  29. # Second, the build system is spread across various commands and stages.
  30. # Therefore, all build variables needs to be exported to be available
  31. # accordingly. The first stage will build $(@D)/BaseTools which contains
  32. # various tools and scripts for the host.
  33. #
  34. # Third, where applicable, the dependency direction between EDK2 and
  35. # ARM Trusted Firmware (ATF) will go in different direction for different
  36. # platforms. Most commonly, ATF will depend on EDK2 via the BL33 payload.
  37. # But for some platforms (e.g. QEMU SBSA or DeveloperBox) EDK2 will package
  38. # the ATF images within its own build system. In such cases, intermediary
  39. # "EDK2 packages" will be built in $(EDK2_BUILD_PACKAGES) in order for EDK2
  40. # to be able to use them in subsequent build stages.
  41. #
  42. # For more information about the build setup:
  43. # https://edk2-docs.gitbook.io/edk-ii-build-specification/4_edk_ii_build_process_overview
  44. EDK2_GIT_SUBMODULES = YES
  45. EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot
  46. EDK2_PACKAGES_PATH = $(@D):$(EDK2_BUILD_PACKAGES):$(STAGING_DIR)/usr/share/edk2-platforms
  47. ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y)
  48. EDK2_ARCH = IA32
  49. EDK2_DEPENDENCIES += host-nasm
  50. EDK2_PACKAGE_NAME = OvmfPkg
  51. EDK2_PLATFORM_NAME = OvmfPkgIa32
  52. EDK2_BUILD_DIR = OvmfIa32
  53. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y)
  54. EDK2_ARCH = X64
  55. EDK2_DEPENDENCIES += host-nasm
  56. EDK2_PACKAGE_NAME = OvmfPkg
  57. EDK2_PLATFORM_NAME = OvmfPkgX64
  58. EDK2_BUILD_DIR = OvmfX64
  59. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU),y)
  60. EDK2_ARCH = AARCH64
  61. EDK2_PACKAGE_NAME = ArmVirtPkg
  62. EDK2_PLATFORM_NAME = ArmVirtQemu
  63. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  64. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL),y)
  65. EDK2_ARCH = AARCH64
  66. EDK2_PACKAGE_NAME = ArmVirtPkg
  67. EDK2_PLATFORM_NAME = ArmVirtQemuKernel
  68. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  69. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_ARM_VEXPRESS_FVP_AARCH64),y)
  70. EDK2_ARCH = AARCH64
  71. EDK2_PACKAGE_NAME = Platform/ARM/VExpressPkg
  72. EDK2_PLATFORM_NAME = ArmVExpress-FVP-AArch64
  73. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  74. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOCIONEXT_DEVELOPERBOX),y)
  75. EDK2_ARCH = AARCH64
  76. EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware
  77. EDK2_PACKAGE_NAME = Platform/Socionext/DeveloperBox
  78. EDK2_PLATFORM_NAME = DeveloperBox
  79. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  80. EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
  81. EDK2_BUILD_OPTS += -D DO_X86EMU=TRUE
  82. EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
  83. define EDK2_PRE_BUILD_SOCIONEXT_DEVELOPERBOX
  84. mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox
  85. $(ARM_TRUSTED_FIRMWARE_DIR)/tools/fiptool/fiptool create \
  86. --tb-fw $(BINARIES_DIR)/bl31.bin \
  87. --soc-fw $(BINARIES_DIR)/bl31.bin \
  88. --scp-fw $(BINARIES_DIR)/bl31.bin \
  89. $(EDK2_BUILD_PACKAGES)/Platform/Socionext/DeveloperBox/fip_all_arm_tf.bin
  90. endef
  91. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_SOLIDRUN_ARMADA80X0MCBIN),y)
  92. EDK2_ARCH = AARCH64
  93. EDK2_DEPENDENCIES += host-dtc arm-trusted-firmware
  94. EDK2_PACKAGE_NAME = Platform/SolidRun/Armada80x0McBin
  95. EDK2_PLATFORM_NAME = Armada80x0McBin
  96. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)-$(EDK2_ARCH)
  97. EDK2_BUILD_ENV += DTC_PREFIX=$(HOST_DIR)/bin/
  98. EDK2_BUILD_OPTS += -D INCLUDE_TFTP_COMMAND
  99. else ifeq ($(BR2_TARGET_EDK2_PLATFORM_QEMU_SBSA),y)
  100. EDK2_ARCH = AARCH64
  101. EDK2_DEPENDENCIES += arm-trusted-firmware
  102. EDK2_PACKAGE_NAME = Platform/Qemu/SbsaQemu
  103. EDK2_PLATFORM_NAME = SbsaQemu
  104. EDK2_BUILD_DIR = $(EDK2_PLATFORM_NAME)
  105. EDK2_PRE_BUILD_HOOKS += EDK2_PRE_BUILD_QEMU_SBSA
  106. define EDK2_PRE_BUILD_QEMU_SBSA
  107. mkdir -p $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa
  108. ln -srf $(BINARIES_DIR)/{bl1.bin,fip.bin} $(EDK2_BUILD_PACKAGES)/Platform/Qemu/Sbsa/
  109. endef
  110. endif
  111. EDK2_BASETOOLS_OPTS = \
  112. EXTRA_LDFLAGS="$(HOST_LDFLAGS)" \
  113. EXTRA_OPTFLAGS="$(HOST_CPPFLAGS)"
  114. EDK2_BUILD_ENV += \
  115. WORKSPACE=$(@D) \
  116. PACKAGES_PATH=$(EDK2_PACKAGES_PATH) \
  117. PYTHON_COMMAND=$(HOST_DIR)/bin/python3 \
  118. IASL_PREFIX=$(HOST_DIR)/bin/ \
  119. NASM_PREFIX=$(HOST_DIR)/bin/ \
  120. GCC5_$(EDK2_ARCH)_PREFIX=$(TARGET_CROSS)
  121. EDK2_BUILD_OPTS += \
  122. -t GCC5 \
  123. -n $(BR2_JLEVEL) \
  124. -a $(EDK2_ARCH) \
  125. -b $(EDK2_BUILD_TYPE) \
  126. -p $(EDK2_PACKAGE_NAME)/$(EDK2_PLATFORM_NAME).dsc
  127. define EDK2_BUILD_CMDS
  128. mkdir -p $(EDK2_BUILD_PACKAGES)
  129. export $(EDK2_BUILD_ENV) && \
  130. unset ARCH && \
  131. source $(@D)/edksetup.sh && \
  132. $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/BaseTools $(EDK2_BASETOOLS_OPTS) && \
  133. build $(EDK2_BUILD_OPTS) all
  134. endef
  135. define EDK2_INSTALL_IMAGES_CMDS
  136. cp -f $(@D)/Build/$(EDK2_BUILD_DIR)/$(EDK2_BUILD_TYPE)_GCC5/FV/*.fd $(BINARIES_DIR)
  137. endef
  138. $(eval $(generic-package))