Re: [edk2] How to define macro's via command line

Subject: Re: [edk2] How to define macro's via command line

From: Andrew Fish <afish@apple.com>

To: edk2-devel@lists.sourceforge.net

Date: 2011-10-10 22:30:18

Sorry,

build -D only makes it visible to .DSC and .FDF files. So you can use that to decide what to build or not on a module level. 

If you have #ifdef in C code. Then you may want to try adding the following section to your project .DSC (should also work for an INF file)

[BuildOptions]
  GCC:*_*_*_CC_FLAGS = -D XYZ

Example:
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/BeagleBoardPkg/BeagleBoardPkg.dsc

Note the example uses ==, which means replace the value of the macro, and I would not recommend that with CC_FLAGS, us = which means append.
The GCC prefix allows different flags to be send to different toolchain families. So for example you could also have
MSFT:*_*_*_CC_FLAGS = /D XYZ in the BuildOptions section. 

Andrew Fish





On Oct 10, 2011, at 2:17 PM, romil shah wrote:

Hi Andrew,

Thanks and sorry for the late reply.

I had tried build -D MACRO, but this does not pass the MACRO definition to GCC.

In order to pass the -D Macro flag to GCC, I had to modify the tools_def.txt:

DEFINE GCC_X64_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-a\
ddress -mno-stack-arg-probe -D NO_ERRNO_H

Is there a better way to do this?

Regards,
--
Romil
 

On Tue, Oct 4, 2011 at 2:56 PM, Andrew Fish <afish@apple.com> wrote:
Looks like -D MACRO or --define=MACRO

>build --help
Usage: build.exe [options] [all|fds|genc|genmake|clean|cleanall|cleanlib|modules|libraries|run]

Copyright (c) 2007 - 2010, Intel Corporation  All rights reserved.

Options:
 --version             show program's version number and exit
 -h, --help            show this help message and exit
 -a TARGETARCH, --arch=TARGETARCH
                       ARCHS is one of list: IA32, X64, IPF, ARM or EBC,
                       which overrides target.txt's TARGET_ARCH definition.
                       To specify more archs, please repeat this option.
 -p PLATFORMFILE, --platform=PLATFORMFILE
                       Build the platform specified by the DSC file name
                       argument, overriding target.txt's ACTIVE_PLATFORM
                       definition.
 -m MODULEFILE, --module=MODULEFILE
                       Build the module specified by the INF file name
                       argument.
 -b BUILDTARGET, --buildtarget=BUILDTARGET
                       BuildTarget is one of list: DEBUG, RELEASE, NOOPT,
                       which overrides target.txt's TARGET definition. To
                       specify more TARGET, please repeat this option.
 -t TOOLCHAIN, --tagname=TOOLCHAIN
                       Using the Tool Chain Tagname to build the platform,
                       overriding target.txt's TOOL_CHAIN_TAG definition.
 -x SKUID, --sku-id=SKUID
                       Using this name of SKU ID to build the platform,
                       overriding SKUID_IDENTIFIER in DSC file.
 -n THREADNUMBER       Build the platform using multi-threaded compiler. The
                       value overrides target.txt's
                       MAX_CONCURRENT_THREAD_NUMBER. Less than 2 will disable
                       multi-thread builds.
 -f FDFFILE, --fdf=FDFFILE
                       The name of the FDF file to use, which overrides the
                       setting in the DSC file.
 -r ROMIMAGE, --rom-image=ROMIMAGE
                       The name of FD to be generated. The name must be from
                       [FD] section in FDF file.
 -i FVIMAGE, --fv-image=FVIMAGE
                       The name of FV to be generated. The name must be from
                       [FV] section in FDF file.
 -C CAPNAME, --capsule-image=CAPNAME
                       The name of Capsule to be generated. The name must be
                       from [Capsule] section in FDF file.
 -u, --skip-autogen    Skip AutoGen step.
 -e, --re-parse        Re-parse all meta-data files.
 -c, --case-insensitive
                       Don't check case of file name.
 -w, --warning-as-error
                       Treat warning in tools as error.
 -j LOGFILE, --log=LOGFILE
                       Put log in specified file as well as on console.
 -s, --silent          Make use of silent mode of (n)make.
 -q, --quiet           Disable all messages except FATAL ERRORS.
 -v, --verbose         Turn on verbose output with informational messages
                       printed, including library instances selected, final
                       dependency expression, and warning messages, etc.
 -d DEBUG, --debug=DEBUG
                       Enable debug messages at specified level.
 -D MACROS, --define=MACROS
                       Macro: "Name [= Value]".
 -y REPORTFILE, --report-file=REPORTFILE
                       Create/overwrite the report to the specified filename.
 -Y REPORTTYPE, --report-type=REPORTTYPE
                       Flags that control the type of build report to
                       generate.  Must be one of: [PCD, LIBRARY, FLASH,
                       DEPEX, BUILD_FLAGS, FIXED_ADDRESS, EXECUTION_ORDER].
                       To specify more than one flag, repeat this option on
                       the command line and the default flag set is [PCD,
                       LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS]
 -F FLAG, --flag=FLAG  Specify the specific option to parse EDK UNI file.
                       Must be one of: [-c, -s]. -c is for EDK framework UNI
                       file, and -s is for EDK UEFI UNI file. This option can
                       also be specified by setting *_*_*_BUILD_FLAGS in
                       [BuildOptions] section of platform DSC. If they are
                       both specified, this value will override the setting
                       in [BuildOptions] section of platform DSC.

Andrew Fish





On Oct 4, 2011, at 2:50 PM, romil shah wrote:

> Hello experts,
>
> How can i define a macro via the 'build' command line for conditional compile? The only way I could get it to work was by modifying tools_def.txt.
>
> Regards,
> --
> Romil
>
>
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2dcopy1_______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel