So... I originally tripped over my misunderstanding of <subject> when writing https://github.com/tianocore/edk2/pull/6262 to get around something I wanted to test in UefiPayloadPkg.
Now Ajan has run into at least an adjacent problem when trying to rework https://github.com/tianocore/edk2/pull/6545 based on feedback I among others provided. Now, the thing I had misunderstood before is that when build is called with multiple -a options, the ARCH variable will expand to a space-separated list of *all* the specified architectures. A lot of Arm/AArch64 modules assume this variable only ever contains a single architecture. The thing is, I don't think this is clearly documented in the .dsc specification at all. And it is frequently used as a shorthand in there in a form that would only work if build was called with a single -a. Now, this also means that there are nearly no correct users of ARCH in edk2 or edk2-platforms. Because "the list of all architectures being built simultaneously" simply isn't very useful information build-time. There are two correct uses in edk2, in EmulatorPkg.dsc and in UefiPayloadPkg.dsc, using '!if "IA32" in "$ARCH"', which as far as I can tell is the only possible way to use the variable correctly. Slightly amusingly, EmulatorPkg.dsc also contains an incorrect use. I guess the behaviour is a direct result of how the build command is architected. I guess the one question I have is - is this the intended behaviour? Ard: I think we need to update some of our .dsc files... Ajan: one somewhat hacky workaround I can think of to separate the output images is to hardcode the output image name in arch-specific Defines sections, like so: diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 0bd8d85cab03..f07f2b91764e 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -12,12 +12,17 @@ # Defines Section - statements that will be processed to create a Makefile. # ################################################################################ +[Defines.ARM] + OUTPUT_DIRECTORY = Build/ArmVirtQemu-ARM + +[Defines.AARCH64] + OUTPUT_DIRECTORY = Build/ArmVirtQemu-AARCH64 + [Defines] PLATFORM_NAME = ArmVirtQemu PLATFORM_GUID = 37d7e986-f7e9-45c2-8067-e371421a626c PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 - OUTPUT_DIRECTORY = Build/ArmVirtQemu-$(ARCH) SUPPORTED_ARCHITECTURES = AARCH64|ARM BUILD_TARGETS = DEBUG|RELEASE|NOOPT SKUID_IDENTIFIER = DEFAULT -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#120967): https://edk2.groups.io/g/devel/message/120967 Mute This Topic: https://groups.io/mt/110483263/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-