Index: BaseTools/Conf/tools_def.template
===================================================================
--- BaseTools/Conf/tools_def.template	(revision 16190)
+++ BaseTools/Conf/tools_def.template	(working copy)
@@ -4815,6 +4815,99 @@
 
 ####################################################################################
 #
+# Mingw GCC And Intel ACPI Compiler
+#
+####################################################################################
+#   MINGW        - MINGW GCC
+#   ASL           - Intel ACPI Source Language Compiler (iasl.exe)
+*_MINGW_*_*_FAMILY             = GCC
+
+DEFINE MINGW_BINIA32          = ENV(MINGW32)\bin\
+DEFINE MINGW_BINX64           = ENV(MINGW64)\bin\
+
+*_MINGW_*_MAKE_PATH             = ENV(MS_MISC_BIN)\nmake.exe
+*_MINGW_*_ASL_PATH              = DEF(DEFAULT_WIN_ASL_BIN)
+*_MINGW_IA32_DLINK_FLAGS        = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _$(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map --image-base=0 --strip-all
+*_MINGW_X64_DLINK_FLAGS         = DEF(GCC_IA32_X64_DLINK_COMMON) --entry  $(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map --image-base=0 --strip-all
+*_MINGW_IA32_ASLDLINK_FLAGS     = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) --strip-all
+*_MINGW_X64_ASLDLINK_FLAGS      = DEF(GCC_IA32_X64_DLINK_COMMON) --entry  ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) --strip-all
+
+*_MINGW_*_MAKE_FLAGS            = /nologo
+*_MINGW_*_ASM_FLAGS             = DEF(GCC_ASM_FLAGS)
+*_MINGW_*_PP_FLAGS              = DEF(GCC_PP_FLAGS)
+*_MINGW_*_ASLPP_FLAGS           = DEF(GCC_ASLPP_FLAGS)
+*_MINGW_*_ASLCC_FLAGS           = DEF(GCC_ASLCC_FLAGS)
+*_MINGW_*_VFRPP_FLAGS           = DEF(GCC_VFRPP_FLAGS)
+*_MINGW_*_APP_FLAGS             =
+*_MINGW_*_ASL_FLAGS             = DEF(DEFAULT_WIN_ASL_FLAGS)
+*_MINGW_*_ASL_OUTFLAGS          = DEF(DEFAULT_WIN_ASL_OUTFLAGS)
+
+##################
+# IA32 definitions
+##################
+*_MINGW_IA32_CC_PATH            = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_SLINK_PATH         = DEF(MINGW_BINIA32)ar
+*_MINGW_IA32_DLINK_PATH         = DEF(MINGW_BINIA32)ld
+*_MINGW_IA32_ASM_PATH           = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_PP_PATH            = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_APP_PATH           = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_VFRPP_PATH         = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_ASLCC_PATH         = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_ASLPP_PATH         = DEF(MINGW_BINIA32)gcc
+*_MINGW_IA32_ASLDLINK_PATH      = DEF(MINGW_BINIA32)ld
+*_MINGW_IA32_RC_PATH            = ENV(MS_MISC_BIN)\rc.exe
+*_MINGW_IA32_OBJCOPY_PATH       = DEF(MINGW_BINIA32)objcopy
+
+###*_MINGW_*_SYMRENAME_PATH        = rem
+*_MINGW_IA32_SYMRENAME_PATH       = DEF(MINGW_BINIA32)objcopy
+
+*_MINGW_IA32_OBJCOPY_FLAGS      = --remove-section .idata --remove-section .edata
+*_MINGW_IA32_SYMRENAME_FLAGS    = --remove-section .idata --remove-section .edata
+
+*_MINGW_IA32_CC_FLAGS           = DEF(GCC_ALL_CC_FLAGS) -Os -m32 -malign-double -mno-stack-arg-probe -fomit-frame-pointer -Wno-error
+*_MINGW_IA32_RC_FLAGS           = DEF(GCC_IA32_RC_FLAGS)
+*_MINGW_IA32_NASM_FLAGS         = -f elf32
+
+##################
+# X64 definitions
+##################
+*_MINGW_X64_CC_PATH             = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_SLINK_PATH          = DEF(MINGW_BINX64)ar
+*_MINGW_X64_DLINK_PATH          = DEF(MINGW_BINX64)ld
+*_MINGW_X64_ASM_PATH            = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_PP_PATH             = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_APP_PATH            = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_VFRPP_PATH          = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_ASLCC_PATH          = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_ASLPP_PATH          = DEF(MINGW_BINX64)gcc
+*_MINGW_X64_ASLDLINK_PATH       = DEF(MINGW_BINX64)ld
+*_MINGW_IA32_RC_PATH            = ENV(MS_MISC_BIN)\rc.exe
+*_MINGW_X64_OBJCOPY_PATH        = DEF(MINGW_BINX64)objcopy
+
+*_MINGW_X64_CC_FLAGS            = DEF(GCC_X64_CC_FLAGS) -Wno-error
+*_MINGW_X64_RC_FLAGS            = DEF(GCC_X64_RC_FLAGS)
+*_MINGW_X64_OBJCOPY_FLAGS       = --remove-section .pdata --remove-section .xdata
+*_MINGW_X64_*_SYMRENAME_FLAGS   = --remove-section .pdata --remove-section .xdata
+*_MINGW_X64_NASM_FLAGS          = -f elf64
+
+##################
+# EBC definitions
+##################
+*_MINGW_EBC_*_FAMILY      = INTEL
+
+*_MINGW_EBC_PP_PATH       = DEF(EBC_BIN)\iec.exe
+*_MINGW_EBC_CC_PATH       = DEF(EBC_BIN)\iec.exe
+*_MINGW_EBC_DLINK_PATH    = DEF(EBC_BIN)\link.exe
+*_MINGW_EBC_SLINK_PATH    = DEF(EBC_BIN)\link.exe
+*_MINGW_EBC_VFRPP_PATH    = DEF(EBC_BIN)\iec.exe
+*_MINGW_EBC_RC_PATH       = ENV(MS_MISC_BIN)\rc.exe
+
+*_MINGW_EBC_CC_FLAGS           = /nologo /c /WX /W3 /FIAutoGen.h /D$(MODULE_ENTRY_POINT)=$(ARCH_ENTRY_POINT)
+*_MINGW_EBC_SLINK_FLAGS        = /lib /NOLOGO /MACHINE:EBC
+*_MINGW_EBC_DLINK_FLAGS        = "C:\Program Files\Intel\EBC\Lib\EbcLib.lib" /NOLOGO /NODEFAULTLIB /MACHINE:EBC /OPT:REF /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /ALIGN:32 /DRIVER
+
+####################################################################################
+#
 # Elf GCC - This configuration is used to compile on Linux boxes to produce elf
 #           binaries.
 #
Index: BaseTools/Source/Python/AutoGen/GenMake.py
===================================================================
--- BaseTools/Source/Python/AutoGen/GenMake.py	(revision 16190)
+++ BaseTools/Source/Python/AutoGen/GenMake.py	(working copy)
@@ -679,7 +679,11 @@
                     NewFile = self.PlaceMacro(str(F), self.Macros)
                     # In order to use file list macro as dependency
                     if T.GenListFile:
-                        self.ListFileMacros[T.ListFileMacro].append(str(F))
+                        # gnu tools need forward slash path separater, even on Windows
+                        if self.PlatformInfo.ToolChainFamily in ('GCC'):
+                            self.ListFileMacros[T.ListFileMacro].append(str(F).replace ('\\', '/'))
+                        else:
+                            self.ListFileMacros[T.ListFileMacro].append(str(F))
                         self.FileListMacros[T.FileListMacro].append(NewFile)
                     elif T.GenFileListMacro:
                         self.FileListMacros[T.FileListMacro].append(NewFile)
Index: MdePkg/Library/BaseLib/BaseLib.inf
===================================================================
--- MdePkg/Library/BaseLib/BaseLib.inf	(revision 16190)
+++ MdePkg/Library/BaseLib/BaseLib.inf	(working copy)
@@ -252,7 +252,7 @@
   Ia32/DisableCache.asm | INTEL
 
   Ia32/GccInline.c | GCC
-  Ia32/Thunk16.nasm | GCC 
+  Ia32/Thunk16.S | GCC 
   Ia32/EnableDisableInterrupts.S | GCC 
   Ia32/EnablePaging64.S | GCC 
   Ia32/DisablePaging32.S | GCC 
@@ -405,7 +405,7 @@
   X86DisablePaging64.c
   X86DisablePaging32.c
   X64/GccInline.c | GCC
-  X64/Thunk16.nasm | GCC 
+  X64/Thunk16.S | GCC 
   X64/SwitchStack.S | GCC 
   X64/SetJump.S | GCC 
   X64/LongJump.S | GCC 
Index: StdLib/EfiSocketLib/EfiSocketLib.inf
===================================================================
--- StdLib/EfiSocketLib/EfiSocketLib.inf	(revision 16190)
+++ StdLib/EfiSocketLib/EfiSocketLib.inf	(working copy)
@@ -68,3 +68,6 @@
   gEfiUdp6ServiceBindingProtocolGuid
   gEfiSocketProtocolGuid
   gEfiSocketServiceBindingProtocolGuid
+
+[BuildOptions]
+  GCC:*_MINGW_*_CC_FLAGS = -D__attribute__(weak)=
Index: StdLib/Include/X64/machine/limits.h
===================================================================
--- StdLib/Include/X64/machine/limits.h	(revision 16190)
+++ StdLib/Include/X64/machine/limits.h	(working copy)
@@ -2,7 +2,7 @@
 
 #define __POINTER_BIT   64
 
-#if defined(__GNUC__)
+#if defined(__GNUC__) && !defined(_WIN32)
 #if __GNUC_PREREQ__(4,4)
   #define __LONG_BIT      64
 
