VirtualBox

Changeset 99476 in vbox


Ignore:
Timestamp:
Apr 20, 2023 7:31:21 AM (18 months ago)
Author:
vboxsync
Message:

Devices/EFI/Firmware: Add ability to build AArch32 and AArch64 firmware images, bugref:10400

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware/Makefile.kmk

    r99404 r99476  
    124124        $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt
    125125
     126ifdef VBOX_WITH_VIRT_ARMV8
     127 VBoxEfiFirmware_SOURCES += \
     128        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/QEMU_EFI.fd=>VBoxEFIAArch32.fd \
     129        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/QEMU_EFI.fd=>VBoxEFIAArch64.fd
     130 VBoxEfiFirmware_BLDDIRS += \
     131        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/ \
     132        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/ \
     133        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/ \
     134        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/
     135 VBoxEfiFirmware_CLEAN += \
     136        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/target.txt \
     137        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/build_rule.txt \
     138        $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/tools_def.txt \
     139        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/target.txt \
     140        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/build_rule.txt \
     141        $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/tools_def.txt
     142endif
     143
    126144# Install the debug info.
    127145INSTALLS += VBoxEfiFirmwareDbg32
     
    147165endif
    148166
     167ifdef VBOX_WITH_VIRT_ARMV8
     168 INSTALLS += VBoxEfiFirmwareDbgAarch32
     169 VBoxEfiFirmwareDbgAarch32_INST = $(INST_VBOXDBG_SYMS)aarch32/
     170 VBoxEfiFirmwareDbgAarch32_MODE = 0644
     171 if1of ($(KBUILD_HOST), win)
     172  VBoxEfiFirmwareDbgAarch32_SOURCES = \
     173        $(foreach mod,$(VBOX_EFI_MODULES),$(VBoxEfiFirmware_0_OUTDIR)/aarch32/$(VBOX_EFI_OUTPUT_SUBDIR)/ARM/$(mod).pdb)
     174 else
     175  VBoxEfiFirmwareDbgAarch32_SOURCES = \
     176        $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(VBoxEfiFirmware_0_OUTDIR)/aarch32/$(VBOX_EFI_OUTPUT_SUBDIR)/ARM/$(mod).debug)
     177 endif
     178
     179 INSTALLS += VBoxEfiFirmwareDbgAarch64
     180 VBoxEfiFirmwareDbgAarch64_INST = $(INST_VBOXDBG_SYMS)aarch64/
     181 VBoxEfiFirmwareDbgAarch64_MODE = 0644
     182 if1of ($(KBUILD_HOST), win)
     183  VBoxEfiFirmwareDbgAarch64_SOURCES = \
     184        $(foreach mod,$(VBOX_EFI_MODULES),$(VBoxEfiFirmware_0_OUTDIR)/aarch64/$(VBOX_EFI_OUTPUT_SUBDIR)/AARCH64/$(mod).pdb)
     185 else
     186  VBoxEfiFirmwareDbgAarch64_SOURCES = \
     187        $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(VBoxEfiFirmware_0_OUTDIR)/aarch64/$(VBOX_EFI_OUTPUT_SUBDIR)/AARCH64/$(mod).debug)
     188 endif
     189endif
     190
    149191
    150192#
     
    155197        $(if $(VBoxEfiFirmware_0_OUTDIR),,exit 1)
    156198        $(RM) -Rf -- "$(VBoxEfiFirmware_0_OUTDIR)/amd64/" "$(VBoxEfiFirmware_0_OUTDIR)/x86/"
     199        $(if $(VBOX_WITH_VIRT_ARMV8),$(RM) -Rf -- "$(VBoxEfiFirmware_0_OUTDIR)/aarch64/" "$(VBoxEfiFirmware_0_OUTDIR)/aarch32/",)
    157200.PHONY: VBoxEfiFirmwareCleanup
    158201
     
    173216                $(foreach mod,$(VBOX_EFI_MODULES_FLAT),amd64/$(mod)$(VBOX_EFI_DBG_SUFF)) \
    174217                $(foreach mod,$(VBOX_EFI_MODULES_FLAT),x86/$(mod)$(VBOX_EFI_DBG_SUFF))
     218
     219ifdef VBOX_WITH_VIRT_ARMV8
     220 VBoxEfiFirmware-armv8.zip: $(PATH_STAGE)/VBoxEfiFirmware-armv8.zip
     221 $(PATH_STAGE)/VBoxEfiFirmware-armv8.zip:
     222        $(REDIRECT) -C "$(PATH_STAGE_BIN)" -- $(TOOL_ZIP_PACK) $(TOOL_ZIP_PACKFLAGS) -9X $@ \
     223                VBoxEFIAArch32.fd \
     224                VBoxEFIAArch64.fd
     225        $(REDIRECT) -C "$(PATH_STAGE)/$(INST_VBOXDBG_SYMS)" -- $(TOOL_ZIP_PACK) $(TOOL_ZIP_PACKFLAGS) -9X $@ \
     226                $(foreach mod,$(VBOX_EFI_MODULES_FLAT),aarch64/$(mod)$(VBOX_EFI_DBG_SUFF)) \
     227                $(foreach mod,$(VBOX_EFI_MODULES_FLAT),aarch32/$(mod)$(VBOX_EFI_DBG_SUFF))
     228endif
    175229
    176230#
     
    236290        -D "VBOX_PATH_ROOT=$(PATH_ROOT)" \
    237291        -D "FD_SIZE_4MB=1" \
     292        -D "FD_SIZE_IN_MB=3" \
    238293        $(if $(VBOX_OSE),-D "VBOX_OSE=1") \
    239294        $(if-expr "$(KBUILD_VERBOSE)" != "",$(if-expr "$(KBUILD_VERBOSE)" >= 3,-v,),--silent --quiet) \
     
    264319 endif
    265320endif
     321
     322#
     323# @todo This is temporary and shoud be changed to use proper tools depending
     324#       on the build environment
     325ifdef VBOX_WITH_VIRT_ARMV8
     326 ifeq ($(KBUILD_HOST),darwin)
     327  VBOX_PATH_PREFIX_GCC_AARCH64 ?= aarch64-elf-
     328  VBOX_PATH_PREFIX_GCC_ARM     ?= arm-none-eabi-
     329 else
     330  VBOX_PATH_PREFIX_GCC_AARCH64 ?=
     331  VBOX_PATH_PREFIX_GCC_ARM     ?=
     332 endif
     333else
     334 VBOX_PATH_PREFIX_GCC_AARCH64 ?=
     335 VBOX_PATH_PREFIX_GCC_ARM     ?=
     336endif
     337
    266338$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
    267 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt: \
     339$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt \
     340$(if $(VBOX_WITH_VIRT_ARMV8),$(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/tools_def.txt) \
     341$(if $(VBOX_WITH_VIRT_ARMV8),$(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/tools_def.txt): \
    268342                $(VBOX_PATH_EFI_FIRMWARE)/vbox-tools_def.txt \
    269343                $(MAKEFILE) | $$(dir $$@)
     
    277351                -e 's,@VBOX_PATH_PREFIX_GCC32@,$(PATH_TOOL_$(VBOX_GCC_TOOL)),' \
    278352                -e 's,@VBOX_PATH_PREFIX_GCC64@,$(PATH_TOOL_$(VBOX_GCC_TOOL)),' \
     353                -e 's,@VBOX_PATH_PREFIX_GCC_AARCH64@,$(VBOX_PATH_PREFIX_GCC_AARCH64),' \
     354                -e 's,@VBOX_PATH_PREFIX_GCC_ARM@,$(VBOX_PATH_PREFIX_GCC_ARM),' \
    279355               \
    280356                -e 's,@PATH_VS2010@,$(PATH_TOOL_$(VBOX_VCC_TOOL)),' \
     
    290366
    291367$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/build_rule.txt \
    292 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/build_rule.txt: \
     368$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/build_rule.txt \
     369$(if $(VBOX_WITH_VIRT_ARMV8),$(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/build_rule.txt) \
     370$(if $(VBOX_WITH_VIRT_ARMV8),$(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/build_rule.txt): \
    293371                $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Conf/build_rule.template \
    294372                $(MAKEFILE) | $$(dir $$@)
     
    359437                --platform OvmfPkg/OvmfPkgX64.dsc
    360438
     439ifdef VBOX_WITH_VIRT_ARMV8
     440 #
     441 # VBoxEFIAArch32
     442 #
     443 $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/target.txt: $(MAKEFILE) | $$(dir $$@) $(VBOX_EFI_BLDPROGS)
     444        $(APPEND) -tn "$@" \
     445                "# Automatically generated, do not edit" \
     446                "" \
     447                "# These variables cannot be overriden by the build.py command line." \
     448                "TOOL_CHAIN_CONF = $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/tools_def.txt" \
     449                "BUILD_RULE_CONF = $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Conf/build_rule.template" \
     450                "" \
     451                "# These variables are overridden and this is just for show." \
     452                "ACTIVE_PLATFORM = ArmVirtPkg/ArmVirtQemu.dsc" \
     453                "TARGET          = $(VBOX_EFI_BUILD_TARGET)" \
     454                "TARGET_ARCH     = ARM" \
     455                "TOOL_CHAIN_TAG  = $(VBOX_EFI_TOOL_CHAIN)" \
     456                "MAX_CONCURRENT_THREAD_NUMBER = $(VBOX_EFI_MAX_THREADS)"
     457
     458 $(VBoxEfiFirmware_0_OUTDIR)/aarch32/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/QEMU_EFI.fd \
     459 + $(VBoxEfiFirmwareDbgAarch32_SOURCES): \
     460                $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/target.txt \
     461                $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/tools_def.txt \
     462                $(VBoxEfiFirmware_0_OUTDIR)/aarch32/Conf/build_rule.txt \
     463                $(VBOX_EFI_DEPENDENCIES) \
     464                $(VBOX_PATH_EFI_FIRMWARE)/ArmVirtPkg/ArmVirtQemu.dsc \
     465                $(VBOX_PATH_EFI_FIRMWARE)/ArmVirtPkg/ArmVirtQemu.fdf
     466        + $(VBOX_EFI_BUILD_CMD) \
     467                --arch ARM \
     468                --platform ArmVirtPkg/ArmVirtQemu.dsc
     469
     470 #
     471 # VBoxEFIAArch64
     472 #
     473 $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/target.txt: $(MAKEFILE) | $$(dir $$@) $(VBOX_EFI_BLDPROGS)
     474        $(APPEND) -tn "$@" \
     475                "# Automatically generated, do not edit" \
     476                "" \
     477                "# These variables cannot be overriden by the build.py command line." \
     478                "TOOL_CHAIN_CONF = $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/tools_def.txt" \
     479                "BUILD_RULE_CONF = $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Conf/build_rule.template" \
     480                "" \
     481                "# These variables are overridden and this is just for show." \
     482                "ACTIVE_PLATFORM = ArmVirtPkg/ArmVirtQemu.dsc" \
     483                "TARGET          = $(VBOX_EFI_BUILD_TARGET)" \
     484                "TARGET_ARCH     = AARCH64" \
     485                "TOOL_CHAIN_TAG  = $(VBOX_EFI_TOOL_CHAIN)" \
     486                "MAX_CONCURRENT_THREAD_NUMBER = $(VBOX_EFI_MAX_THREADS)"
     487
     488 $(VBoxEfiFirmware_0_OUTDIR)/aarch64/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/QEMU_EFI.fd \
     489 + $(VBoxEfiFirmwareDbgAarch64_SOURCES): \
     490                $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/target.txt \
     491                $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/tools_def.txt \
     492                $(VBoxEfiFirmware_0_OUTDIR)/aarch64/Conf/build_rule.txt \
     493                $(VBOX_EFI_DEPENDENCIES) \
     494                $(VBOX_PATH_EFI_FIRMWARE)/ArmVirtPkg/ArmVirtQemu.dsc \
     495                $(VBOX_PATH_EFI_FIRMWARE)/ArmVirtPkg/ArmVirtQemu.fdf
     496        + $(VBOX_EFI_BUILD_CMD) \
     497                --arch AARCH64 \
     498                --platform ArmVirtPkg/ArmVirtQemu.dsc
     499endif
     500
     501
    361502#
    362503# Some aliases.
     
    365506build-efi-amd64: $$(filter %VBoxEFI64.fd,$$(VBoxEfiFirmware_2_STAGE_TARGETS))
    366507
     508ifdef VBOX_WITH_VIRT_ARMV8
     509 build-efi-aarch32: $$(filter %VBoxEFIAArch32.fd,$$(VBoxEfiFirmware_2_STAGE_TARGETS))
     510 build-efi-aarch64: $$(filter %VBoxEFIAArch64.fd,$$(VBoxEfiFirmware_2_STAGE_TARGETS))
     511endif
     512
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette