WINGCC EDK2 toolchain enables building EDK2 with GCC toolchain
on Windows host machine.
It currently only supports ARM and AARCH64 architectures.

Change-Id: I49eb3103137e5dd73c24a9596d25d4899ca76cfc
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.mar...@arm.com>
---
 BaseTools/Conf/build_rule.template | 10 ++--
 BaseTools/Conf/tools_def.template  | 97 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 5 deletions(-)

diff --git a/BaseTools/Conf/build_rule.template 
b/BaseTools/Conf/build_rule.template
index 1259251..b2fb32e 100644
--- a/BaseTools/Conf/build_rule.template
+++ b/BaseTools/Conf/build_rule.template
@@ -133,7 +133,7 @@
         "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}
         "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst}
 
-    <Command.ARMGCC, Command.ARMLINUXGCC>
+    <Command.ARMGCC, Command.ARMLINUXGCC, Command.WINGCC>
         "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}
 
 
@@ -219,7 +219,7 @@
     <Command.RVCT>
         "$(SLINK)" $(SLINK_FLAGS) ${dst} --via $(OBJECT_FILES_LIST)
     
-    <Command.RVCTCYGWIN, Command.ARMGCC, Command.ARMLINUXGCC>
+    <Command.RVCTCYGWIN, Command.ARMGCC, Command.ARMLINUXGCC, Command.WINGCC>
         # $(OBJECT_FILES_LIST) has wrong paths for cygwin
         "$(SLINK)" $(SLINK_FLAGS) ${dst} $(OBJECT_FILES)
 
@@ -243,7 +243,7 @@
         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH) 
@$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)
         "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
 
-    <Command.ARMGCC, Command.ARMLINUXGCC>
+    <Command.ARMGCC, Command.ARMLINUXGCC, Command.WINGCC>
         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH) 
$(STATIC_LIBRARY_FILES) --end-group $(DLINK2_FLAGS)
 
     <Command.RVCT>
@@ -273,7 +273,7 @@
     <Command.GCC>
         "$(DLINK)" $(DLINK_FLAGS) --start-group $(DLINK_SPATH) 
@$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)
 
-    <Command.ARMGCC, Command.ARMLINUXGCC>
+    <Command.ARMGCC, Command.ARMLINUXGCC, Command.WINGCC>
         "$(DLINK)" $(DLINK_FLAGS) --start-group $(DLINK_SPATH) 
$(STATIC_LIBRARY_FILES) --end-group $(DLINK2_FLAGS)
 
     <Command.RVCT>
@@ -294,7 +294,7 @@
     <OutputFile>
         $(DEBUG_DIR)(+)$(MODULE_NAME).efi
 
-    <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC, 
Command.ARMLINUXGCC>  
+    <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC, 
Command.ARMLINUXGCC, Command.WINGCC>
         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)
         $(CP) ${dst} $(OUTPUT_DIR)
         $(CP) ${dst} $(BIN_DIR)
diff --git a/BaseTools/Conf/tools_def.template 
b/BaseTools/Conf/tools_def.template
index 8f5507d..02d728f 100644
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -594,6 +594,12 @@ DEFINE SOURCERY_CYGWIN_TOOLS = /cygdrive/c/Program 
Files/CodeSourcery/Sourcery G
 #                             Required to build platforms or ACPI tables:
 #                               Intel(r) ACPI Compiler v20101013 from
 #                               
http://www.acpica.org/downloads/previous_releases.php
+#   WINGCC      -win64-  Requires:
+#                             Windows GNU GCC toolchain, 4.8.0
+#                        Optional:
+#                             Required to build platforms or ACPI tables:
+#                               Intel(r) ACPI Compiler (iasl.exe) v20101013 
from
+#                               
http://www.acpica.org/downloads/previous_releases.php
 # * Commented out - All versions of VS2005 use the same standard install 
directory
 #
 
####################################################################################
@@ -5908,6 +5914,97 @@ RELEASE_ARMLINUXGCC_AARCH64_ASM_FLAGS   = 
$(ARCHASM_FLAGS) $(PLATFORM_FLAGS)
   DEBUG_ARMLINUXGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_AARCH64_CC_FLAGS) -Wno-address -O0
 RELEASE_ARMLINUXGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_AARCH64_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable
 
+####################################################################################
+#
+# GCC for Windows host
+#
+####################################################################################
+*_WINGCC_*_*_FAMILY          = GCC
+*_WINGCC_*_*_BUILDRULEFAMILY = WINGCC
+
+*_WINGCC_*_MAKE_PATH         = make
+*_WINGCC_*_MAKE_FLAGS        = --no-print-directory
+
+##################
+# ASL definitions
+##################
+*_WINGCC_*_ASL_PATH           = DEF(WIN_IASL_BIN)
+*_WINGCC_*_ASL_FLAGS          = -tc -li
+*_WINGCC_*_ASL_OUTFLAGS       = DEF(DEFAULT_WIN_ASL_OUTFLAGS)
+*_WINGCC_*_ASLPP_FLAGS        = $(ARCHCC_FLAGS)
+*_WINGCC_*_ASLCC_FLAGS        = $(ARCHCC_FLAGS)
+
+##################
+# ARM definitions
+##################
+
+*_WINGCC_ARM_CC_PATH         = ENV(WINGCC_ARM_PREFIX)gcc
+*_WINGCC_ARM_SLINK_PATH      = ENV(WINGCC_ARM_PREFIX)ar
+*_WINGCC_ARM_DLINK_PATH      = ENV(WINGCC_ARM_PREFIX)ld
+*_WINGCC_ARM_ASM_PATH        = ENV(WINGCC_ARM_PREFIX)as
+*_WINGCC_ARM_PP_PATH         = ENV(WINGCC_ARM_PREFIX)gcc
+*_WINGCC_ARM_VFRPP_PATH      = ENV(WINGCC_ARM_PREFIX)gcc
+*_WINGCC_ARM_ASLCC_PATH      = ENV(WINGCC_ARM_PREFIX)gcc
+*_WINGCC_ARM_ASLDLINK_PATH   = ENV(WINGCC_ARM_PREFIX)ld
+*_WINGCC_ARM_ASLPP_PATH      = ENV(WINGCC_ARM_PREFIX)gcc
+
+#
+# Use default values, or override in DSC file
+#
+*_WINGCC_ARM_ARCHCC_FLAGS    = -mthumb
+*_WINGCC_ARM_ARCHASM_FLAGS   =
+*_WINGCC_ARM_ARCHDLINK_FLAGS =
+*_WINGCC_ARM_PLATFORM_FLAGS  = -march=armv7-a
+*_WINGCC_ARM_PP_FLAGS        = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -x 
assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h
+*_WINGCC_ARM_RC_FLAGS        = DEF(GCC_ARM_RC_FLAGS)
+*_WINGCC_ARM_VFRPP_FLAGS     = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_VFRPP_FLAGS)
+*_WINGCC_ARM_SLINK_FLAGS     = -cr
+*_WINGCC_ARM_DLINK_FLAGS     =  $(ARCHDLINK_FLAGS) 
DEF(GCC_ARM_AARCH64_DLINK_COMMON) --oformat=elf32-littlearm
+*_WINGCC_ARM_ASLDLINK_FLAGS  = DEF(GCC_ARM_AARCH64_DLINK_COMMON) 
--oformat=elf32-littlearm
+
+  DEBUG_WINGCC_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) 
-mlittle-endian -g
+RELEASE_WINGCC_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) 
-mlittle-endian
+
+  DEBUG_WINGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_ARM_CC_FLAGS) -fno-stack-protector -O0 -mno-unaligned-access
+RELEASE_WINGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_ARM_CC_FLAGS) -fno-stack-protector -Wno-unused-but-set-variable 
-mno-unaligned-access
+
+######################
+# AArch64 definitions
+######################
+# AARCH64 64bit ARM GNU/Linux GCC (ARM Architecture 64)
+
+*_WINGCC_AARCH64_CC_PATH         = ENV(WINGCC_AARCH64_PREFIX)gcc
+*_WINGCC_AARCH64_SLINK_PATH      = ENV(WINGCC_AARCH64_PREFIX)ar
+*_WINGCC_AARCH64_DLINK_PATH      = ENV(WINGCC_AARCH64_PREFIX)ld
+*_WINGCC_AARCH64_ASM_PATH        = ENV(WINGCC_AARCH64_PREFIX)as
+*_WINGCC_AARCH64_PP_PATH         = ENV(WINGCC_AARCH64_PREFIX)gcc
+*_WINGCC_AARCH64_VFRPP_PATH      = ENV(WINGCC_AARCH64_PREFIX)gcc
+*_WINGCC_AARCH64_ASLCC_PATH      = ENV(WINGCC_AARCH64_PREFIX)gcc
+*_WINGCC_AARCH64_ASLDLINK_PATH   = ENV(WINGCC_AARCH64_PREFIX)ld
+*_WINGCC_AARCH64_ASLPP_PATH      = ENV(WINGCC_AARCH64_PREFIX)gcc
+
+#
+# Use default values, or override in DSC file
+#
+*_WINGCC_AARCH64_ARCHCC_FLAGS    =
+*_WINGCC_AARCH64_ARCHASM_FLAGS   =
+*_WINGCC_AARCH64_ARCHDLINK_FLAGS =
+*_WINGCC_AARCH64_PLATFORM_FLAGS  =
+*_WINGCC_AARCH64_PP_FLAGS        = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -x 
assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h
+*_WINGCC_AARCH64_RC_FLAGS        = DEF(GCC_ARM_RC_FLAGS)
+*_WINGCC_AARCH64_VFRPP_FLAGS     = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_VFRPP_FLAGS)
+*_WINGCC_AARCH64_SLINK_FLAGS     = -cr
+*_WINGCC_AARCH64_DLINK_FLAGS     =  $(ARCHDLINK_FLAGS) 
DEF(GCC_ARM_AARCH64_DLINK_COMMON) --oformat=elf64-littleaarch64
+*_WINGCC_AARCH64_ASLDLINK_FLAGS  = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS)
+
+  DEBUG_WINGCC_AARCH64_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) 
-mlittle-endian -g
+RELEASE_WINGCC_AARCH64_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) 
-mlittle-endian
+
+  DEBUG_WINGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_AARCH64_CC_FLAGS) -O0
+RELEASE_WINGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) 
DEF(GCC_AARCH64_CC_FLAGS) -Wno-unused-but-set-variable
+
+
+
 #################
 # ASM 16 linker defintions
 #################
-- 
1.8.5


------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to