On Tue, May 28, 2013 at 10:30 AM, Olivier Martin <olivier.mar...@arm.com> wrote: > Any feedback on this change? Or is everyone happy by this CROSS_COMPILE > ELFGCC support?
I think ELFGCC was pretty much deprecated for IA32/X64 usage. It was used only for UnixPkg. EmulatorPkg does not rely on ELFGCC, and therefore ELFGCC really has no relevant uses that I know of. I think ELFGCC was a good name for this toolchain, because it built ELF images for UnixPkg. But, I don't think ELFGCC is a good name for a toolchain that actually supports UEFI images, since they will be PE/COFF images. -Jordan > Again, this change should avoid duplication and bring flexibility for the > GCC toolchain in tools_def file. > > > > > > From: Olivier Martin [mailto:olivier.mar...@arm.com] > Sent: 10 May 2013 19:01 > To: edk2-buildtools-de...@lists.sourceforge.net > Cc: 'edk2-devel@lists.sourceforge.net' > Subject: [PATCH] BaseTools: Add support for a CROSS_COMPILE ELFGCC > > > > Dear BaseTools Maintainers, > > > > Please find the attached path that converts the current ELFGCC toolchain > into a toolchain that support cross toolchain (using the environment > variable CROSS_COMPILE). > > The way to call the toolchain for IA32 and X64 has not changed. > > > > For ARM, you would do something similar to (similar to build a Linux > kernel): > > CROSS_COMPILE=arm-linux-gnueabi- build –a ARM –p > MdeModulePkg/MdeModulePkg.dsc –t ELFGCC > > > > My plan after this patch is approved is to remove ARMGCC and ARMLINUXGCC > support from tools_def to only keep ELFGCC. > > > > Another benefit of this patch is that it cleans the IA32 and X64 and IPF > support in ELFGCC to share common flags. > > > > I also built MdeModulePkg/MdeModulePkg.dsc for IA32, X64 and ARM to confirm > these changes did not break the builds. MdeModulePkg.dsc build was broken > for X64 and this change does not fix it neither: > > ---- > > "/usr/bin/ld" -o > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/DEBUG/HelloWorld.dll > -nostdlib --shared --entry _ModuleEntryPoint -u _ModuleEntryPoint -Map > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/DEBUG/HelloWorld.map > -\( > @/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/OUTPUT/static_library_files.lst > -\) > > /usr/bin/ld: > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/OUTPUT/HelloWorld.lib(AutoGen.obj): > relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making > a shared object; recompile with -fPIC > > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Application/HelloWorld/HelloWorld/OUTPUT/HelloWorld.lib: > could not read symbols: Bad value > > ---- > > > > I also made an analysis of the compilation flags before and after applying > the patch. Additional cleaning can be made. > > > > # C Compiler > > > > Common arguments: > > -o > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_$(TOOLCHAIN)/$(ARHC)/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib/OUTPUT/./BaseDebugPrintErrorLevelLib.obj > -I/tmp/tianocore-elfgcc/MdePkg/Library/BaseDebugPrintErrorLevelLib > -I/tmp/tianocore-elfgcc/MdePkg/Include/$(ARCH) > -I/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/$(ARCH)/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib/DEBUG > -I/tmp/tianocore-elfgcc/MdePkg/Include -I/tmp/tianocore-elfgcc/MdePkg > /tmp/tianocore-elfgcc/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.c > > -c -g -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces > -Wno-array-bounds > > > > IA32: > > before: '-Werror -Wno-missing-braces -Wno-array-bounds' were not present > > before/after common: -m32 -malign-double -include > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/IA32/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib/DEBUG/AutoGen.h > -DSTRING_ARRAY_NAME=BaseDebugPrintErrorLevelLibStrings > > after adds "-Os -include AutoGen.h -freorder-blocks > -freorder-blocks-and-partition -O2 -mno-stack-arg-probe -O0" > > > > X64: > > before/after common: -Os -Wno-address -include AutoGen.h -D_EFI_P64 > > before: '-g' was not present > > after adds: -mno-red-zone -mno-stack-arg-probe -O0 > > > > ARM > > before/after common: -mthumb -march=armv7-a -Wno-address -Os -include > AutoGen.h -mword-relocations -mlittle-endian -mabi=aapcs -mapcs > -fno-short-enums -save-temps -fsigned-char -ffunction-sections > -fdata-sections -fomit-frame-pointer -O0 > > after adds '-fno-stack-protector' > > > > # ASM Compiler > > > > Common arguments: > > -c -x assembler -imacros > /tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/IA32/MdePkg/Library/BaseLib/BaseLib/DEBUG/AutoGen.h > -I/tmp/tianocore-elfgcc/MdePkg/Library/BaseLib/$(ARCH) > -I/tmp/tianocore-elfgcc/MdePkg/Library/BaseLib > -I/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_$(TOOLCHAIN)/$(ARCH)/MdePkg/Library/BaseLib/BaseLib/DEBUG > -I/tmp/tianocore-elfgcc/MdePkg/Include/$(ARCH) > > > > after: add '-g' (Generate debugging information for each assembler source > line using whichever debug format is preferred by the target) > > > > IA32: before/after: Same command line > > X64: before/after: Same command line > > > > ARM > > - before: '-I/tmp/tianocore-elfgcc/MdePkg/Include > -I/tmp/tianocore-elfgcc/MdePkg ' was not present > > - before/after: Similar command line expect ‘before’ was using > "arm-linux-gnueabi-as" while 'after' uses "arm-linux-gnueabi-gcc -c -x > assembler" > > > > # SLINK > > > > IA32: before/after: Same command line > > X64: before/after: Same command line > > ARM: before/after: Same command line > > > > # DLINK: > > > > IA32: before/after: Same command line > > X64: before/after: Same command line > > ARM: before/after: Same command line > > > > > > Thanks, > > Olivier > > > ------------------------------------------------------------------------------ > Try New Relic Now & We'll Send You this Cool Shirt > New Relic is the only SaaS-based application performance monitoring service > that delivers powerful full stack analytics. Optimize and monitor your > browser, app, & servers with just a few lines of code. Try New Relic > and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may > _______________________________________________ > edk2-buildtools-devel mailing list > edk2-buildtools-de...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel > ------------------------------------------------------------------------------ Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET Get 100% visibility into your production application - at no cost. Code-level diagnostics for performance bottlenecks with <2% overhead Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel