Hi all,
Just check outputs for each architecture, the FV cannot be generated if we use this method:
[Defines.X64]
OUTPUT_DIRECTORY = Build/UefiPayloadPkgX64
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf

If we place FLASH_DEFINITION under the Defines section:
[Defines]
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf
We will meet "error F003: Module built under multiple ARCHs ['AARCH64', 'X64']. Not able to determine which output to put into flash for Module MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf !" issue again.

Still working in progress to figure out other solutions.

From: "Ajan Zhong"<ajan.zhong@newfw.com>
Date:  Wed, Jan 8, 2025, 3:29 PM
Subject:  Re: [EXTERNAL] [edk2-devel] Expansion of ARCH in .dsc files
To: "Leif Lindholm"<leif.lindholm@oss.qualcomm.com>
Thanks Leif and Joey. :)

As suggested, I used the following content in the DSC file to pass all the builds:

[Defines.IA32]
OUTPUT_DIRECTORY = Build/UefiPayloadPkgIA32
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf
[Defines.X64]
OUTPUT_DIRECTORY = Build/UefiPayloadPkgX64
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf
[Defines.AARCH64]
OUTPUT_DIRECTORY = Build/UefiPayloadPkgAARCH64
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf

I have tried following build commands, they all succeed to build corresponding binaries:
  1. build -p UefiPayloadPkg/UefiPayloadPkg.dsc -b DEBUG -a IA32 -a X64 -a AARCH64 -t GCC5
  2. python UefiPayloadPkg/UniversalPayloadBuild.py -t GCC5 -b DEBUG --FIT
  3. python UefiPayloadPkg/UniversalPayloadBuild.py -t GCC5 -a IA32 -b DEBUG --FIT
  4. python UefiPayloadPkg/UniversalPayloadBuild.py -t GCC5 -a AARCH -b DEBUG --FIT

Now I am creating a new draft PR to fix all github CI failures which are not generated in my local.

Thanks again for your help.
From: "Leif Lindholm"<leif.lindholm@oss.qualcomm.com>
Date:  Wed, Jan 8, 2025, 4:14 AM
Subject:  Re: [EXTERNAL] [edk2-devel] Expansion of ARCH in .dsc files
To: "Joey Vagedes"<joeyvagedes@microsoft.com>
Hi Joey, 

I appreciate the pointer. 
However, that's the .inf spec. 

The same language is not in the corresponding section of 

Regards, 

Leif 

On Tue, 7 Jan 2025 at 19:43, Joey Vagedes <joeyvagedes@microsoft.com> wrote: 
> Leif, 
> For your awareness, Section 3.4 of the INF specification states that architectural modifiers for the [Defines] section tag are not permitted. 
> So that you can Ctrl+F and to find the exact language, here is a quote: 
> "architectural modifiers for the [Defines] section tag are not permitted" 
> Thanks, 
> Joey 
> -----Original Message----- 
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Leif Lindholm via groups.io 
> Sent: Tuesday, January 7, 2025 11:05 AM 
> Cc: Ajan Zhong <ajan.zhong@newfw.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Kinney, Michael D <michael.d.kinney@intel.com
> Subject: [EXTERNAL] [edk2-devel] Expansion of ARCH in .dsc files 
> 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 (#120998) | | Mute This Topic | New Topic
Your Subscription | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_