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/Applicat
ion/HelloWorld/HelloWorld/DEBUG/HelloWorld.dll -nostdlib --shared --entry
_ModuleEntryPoint -u _ModuleEntryPoint -Map
/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Applicat
ion/HelloWorld/HelloWorld/DEBUG/HelloWorld.map -\(
@/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Applica
tion/HelloWorld/HelloWorld/OUTPUT/static_library_files.lst -\)

/usr/bin/ld:
/tmp/tianocore-elfgcc/Build/MdeModule/DEBUG_ELFGCC/X64/MdeModulePkg/Applicat
ion/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/Applicat
ion/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/Libr
ary/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib/OUTPUT/./BaseDeb
ugPrintErrorLevelLib.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/BaseDebugPr
intErrorLevelLib.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/BaseD
ebugPrintErrorLevelLib/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/BaseL
ib/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/Li
brary/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

Attachment: 0001-BaseTools-Added-support-for-a-CROSS_COMPILE-ELFGCC.patch
Description: Binary data

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
edk2-buildtools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel

Reply via email to