Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 35571)
+++ /trunk/Config.kmk	(revision 35572)
@@ -3045,11 +3045,9 @@
 	-current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
 	-compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
-ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
- ifn1of ($(KBUILD_TARGET), darwin win)
-  TEMPLATE_VBOXR3_DEFS                 = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
-  TEMPLATE_VBOXR3_CFLAGS               = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
-  TEMPLATE_VBOXR3_CXXFLAGS             = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
-  TEMPLATE_VBOXR3_LDFLAGS              = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
- endif
+ifn1of ($(KBUILD_TARGET), darwin win os2)
+ TEMPLATE_VBOXR3_DEFS                  = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
+ TEMPLATE_VBOXR3_CFLAGS                = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
+ TEMPLATE_VBOXR3_CXXFLAGS              = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
+ TEMPLATE_VBOXR3_LDFLAGS               = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
 endif
 
@@ -3067,4 +3065,35 @@
  TEMPLATE_VBoxR3Dll_CFLAGS            += $(VBOX_GCC_WERR)
  TEMPLATE_VBoxR3Dll_CXXFLAGS          += $(VBOX_GCC_WERR)
+endif
+
+#
+# Template for building performance critical stuff with warnings-as-errors.
+#				       -
+TEMPLATE_VBoxR3DllNoPic                = VBox ring-3 SO/DLLs without PIC, without warnings.
+TEMPLATE_VBoxR3DllNoPic_EXTENDS        = VBOXR3
+if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
+ TEMPLATE_VBoxR3DllNoPic_DEFS          = $(TEMPLATE_VBOXR3EXE_DEFS)
+ TEMPLATE_VBoxR3DllNoPic_CFLAGS        = $(TEMPLATE_VBOXR3EXE_CFLAGS)   $(VBOX_GCC_WERR)
+ TEMPLATE_VBoxR3DllNoPic_CXXFLAGS      = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
+ TEMPLATE_VBoxR3DllNoPic_LDFLAGS       = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
+else ifeq ($(KBUILD_TARGET),win)
+ TEMPLATE_VBoxR3DllNoPic_CFLAGS        = $(TEMPLATE_VBOXR3_CFLAGS)   $(VBOX_VCC_WERR)
+ TEMPLATE_VBoxR3DllNoPic_CXXFLAGS      = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_VCC_WERR)
+ TEMPLATE_VBoxR3DllNoPic_LDFLAGS       = $(TEMPLATE_VBOXR3_LDFLAGS)  $(VBOX_VCC_LD_WERR)
+else
+ TEMPLATE_VBoxR3DllNoPic_CFLAGS        = $(TEMPLATE_VBOXR3_CFLAGS)   $(VBOX_GCC_WERR)
+ TEMPLATE_VBoxR3DllNoPic_CXXFLAGS      = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_GCC_WERR)
+endif
+
+#
+# Template for building performance critical stuff without warnings-as-errors.
+#				       -
+TEMPLATE_VBoxR3DllWarnNoPic                = VBox ring-3 SO/DLLs without PIC, with warnings.
+TEMPLATE_VBoxR3DllWarnNoPic_EXTENDS        = VBOXR3
+if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
+ TEMPLATE_VBoxR3DllWarnNoPic_DEFS          = $(TEMPLATE_VBOXR3EXE_DEFS)
+ TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS        = $(TEMPLATE_VBOXR3EXE_CFLAGS)
+ TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS      = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
+ TEMPLATE_VBoxR3DllWarnNoPic_LDFLAGS       = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
 endif
 
@@ -3527,12 +3556,9 @@
 TEMPLATE_VBOXMAINDLL  = VBox Main Component (shared library)
 TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
-
-ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
- ifn1of ($(KBUILD_TARGET), darwin win)
-  TEMPLATE_VBOXMAINDLL_DEFS     = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
-  TEMPLATE_VBOXMAINDLL_CFLAGS   = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
-  TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
-  TEMPLATE_VBOXMAINDLL_LDFLAGS  = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
- endif
+ifn1of ($(KBUILD_TARGET), darwin os2 win)
+ TEMPLATE_VBOXMAINDLL_DEFS     = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
+ TEMPLATE_VBOXMAINDLL_CFLAGS   = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
+ TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
+ TEMPLATE_VBOXMAINDLL_LDFLAGS  = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
 endif
 TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
@@ -3611,11 +3637,9 @@
 TEMPLATE_VBOXMAINCLIENTDLL              = VBox MAIN Client (shared library)
 TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS      = VBOXMAINCLIENTEXE
-ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
- ifneq ($(KBUILD_TARGET),win)
-  TEMPLATE_VBOXMAINCLIENTDLL_DEFS       = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
-  TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS     = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
-  TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS   = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
-  TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS    = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
- endif
+ifn1of ($(KBUILD_TARGET), darwin os2 win)
+ TEMPLATE_VBOXMAINCLIENTDLL_DEFS        = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
+ TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS      = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
+ TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS    = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
+ TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS     = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
 endif
 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
@@ -3665,22 +3689,4 @@
   	$(LIB_RUNTIME) \
   	$(LIB_VMM)
- endif
- if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.x86 linux.x86) # Undo the PIC avoidance in VBOXR3DLLNOXCPT/VBOXR3
-  TEMPLATE_VBoxR3ExtPack_DEFS      += PIC
-  ifdef TEMPLATE_VBoxR3ExtPack_CXXFLAGS
-   TEMPLATE_VBoxR3ExtPack_CFLAGS   += -fPIC
-  else
-   TEMPLATE_VBoxR3ExtPack_CFLAGS   += $(TEMPLATE_$(TEMPLATE_VBoxR3ExtPack_EXTENDS)_CFLAGS) -fPIC
-  endif
-  ifdef TEMPLATE_VBoxR3ExtPack_CXXFLAGS
-   TEMPLATE_VBoxR3ExtPack_CXXFLAGS += -fPIC
-  else
-   TEMPLATE_VBoxR3ExtPack_CXXFLAGS += $(TEMPLATE_$(TEMPLATE_VBoxR3ExtPack_EXTENDS)_CXXFLAGS) -fPIC
-  endif
-  ifdef TEMPLATE_VBoxR3ExtPack_LDFLAGS
-   TEMPLATE_VBoxR3ExtPack_LDFLAGS  += -fPIC
-  else
-  TEMPLATE_VBoxR3ExtPack_CFLAGS     = $(TEMPLATE_$(TEMPLATE_VBoxR3ExtPack_EXTENDS)_LDFLAGS) -fPIC
-  endif
  endif
 
@@ -3975,11 +3981,9 @@
 	-compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
  endif
- ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
-  ifneq ($(KBUILD_TARGET),win)
+ ifn1of ($(KBUILD_TARGET), darwin os2 win)
    TEMPLATE_VBOXQT4GUI_DEFS     = PIC $(TEMPLATE_VBOXQT4GUIEXE_DEFS)
    TEMPLATE_VBOXQT4GUI_CFLAGS   = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CFLAGS)
    TEMPLATE_VBOXQT4GUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS)
    TEMPLATE_VBOXQT4GUI_LDFLAGS  = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS)
-  endif
  endif
 
@@ -4258,5 +4262,5 @@
 TEMPLATE_VBOXGUESTR3DLL_EXTENDS   = VBOXGUESTR3EXE
 ## @todo add a INSTFUN that separates dlls and libs.
-ifn1of ($(KBUILD_TARGET), os2 win)
+ifn1of ($(KBUILD_TARGET), darwin os2 win)
  TEMPLATE_VBOXGUESTR3DLL_DEFS     = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
  TEMPLATE_VBOXGUESTR3DLL_CFLAGS   = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
@@ -4293,5 +4297,5 @@
 TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS   = VBOXGUESTR3NPEXE
 ## @todo add a INSTFUN that separates dlls and libs.
-ifn1of ($(KBUILD_TARGET), os2 win)
+ifn1of ($(KBUILD_TARGET), darwin os2 win)
  TEMPLATE_VBOXGUESTR3NPDLL_DEFS     = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
  TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS   = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
@@ -4307,6 +4311,6 @@
 TEMPLATE_VBOXGUESTR3NPLIB_INST      = $(INST_ADDITIONS_LIB)
 ## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
-ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
- ifn1of ($(KBUILD_TARGET), darwin win)
+ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: Remove these checks!
+ ifn1of ($(KBUILD_TARGET), darwin os2 win)
   TEMPLATE_VBOXGUESTR3NPLIB_DEFS     = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
   TEMPLATE_VBOXGUESTR3NPLIB_CFLAGS   = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
Index: /trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Makefile.kmk	(revision 35571)
+++ /trunk/src/VBox/Devices/Makefile.kmk	(revision 35572)
@@ -48,5 +48,5 @@
  # VBoxDDU (shared object)
  #
- VBoxDDU_TEMPLATE         = VBOXR3
+ VBoxDDU_TEMPLATE         = VBoxR3DllWarnNoPic
  VBoxDDU_NAME             = $(basename $(notdir $(LIB_DDU)))
  VBoxDDU_INST.darwin      = $(INST_DLL) $(INST_TESTCASE)
@@ -113,5 +113,5 @@
  # VBoxDD (shared object)
  #
- VBoxDD_TEMPLATE         = VBOXR3
+ VBoxDD_TEMPLATE         = VBoxR3DllWarnNoPic
  VBoxDD_SDKS.win         = WINPSDK DXSDK W2K3DDK VBOX_NTDLL
  VBoxDD_INCS             = build
@@ -223,5 +223,5 @@
  # VBoxDD2 (shared object)
  #
- VBoxDD2_TEMPLATE        = VBOXR3
+ VBoxDD2_TEMPLATE        = VBoxR3DllWarnNoPic
  VBoxDD2_DEFS            = IN_VBOXDD2
  VBoxDD2_INCS           := \
@@ -255,5 +255,5 @@
  # DevicesR3 (library)
  #
- DevicesR3_TEMPLATE      = VBOXR3
+ DevicesR3_TEMPLATE      = VBoxR3DllWarnNoPic
  DevicesR3_SDKS.win      = WINPSDK W2K3DDK
  DevicesR3_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE
@@ -777,5 +777,5 @@
  Drivers_TEMPLATE   = VBOXR3NP
  else
- Drivers_TEMPLATE   = VBOXR3
+ Drivers_TEMPLATE   = VBoxR3DllWarnNoPic
  endif
  Drivers_SDKS.win   = WINPSDK W2K3DDK
Index: /trunk/src/VBox/Runtime/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Runtime/Makefile.kmk	(revision 35571)
+++ /trunk/src/VBox/Runtime/Makefile.kmk	(revision 35572)
@@ -1160,5 +1160,5 @@
 # VBoxRT - Shared Object / DLL version.
 #
-VBoxRT_TEMPLATE                = VBoxR3Dll
+VBoxRT_TEMPLATE                = VBoxR3DllNoPic
 VBoxRT_SDKS                    = VBOX_OPENSSL VBOX_LIBXML2 VBOX_BOOST
 ifdef VBOX_WITH_LIBCURL
Index: /trunk/src/VBox/VMM/Makefile.kmk
===================================================================
--- /trunk/src/VBox/VMM/Makefile.kmk	(revision 35571)
+++ /trunk/src/VBox/VMM/Makefile.kmk	(revision 35572)
@@ -52,5 +52,5 @@
 endif
 
-VMMR3_TEMPLATE  = VBoxR3Dll
+VMMR3_TEMPLATE  = VBoxR3DllNoPic
 
 VMMR3_DEFS      = IN_VMM_R3 IN_DIS IN_GMM_R3 IN_DBG $(VMM_COMMON_DEFS) VBOX_SVN_REV=$(VBOX_SVN_REV)
@@ -216,5 +216,5 @@
 DLLS += VBoxVMM
 endif
-VBoxVMM_TEMPLATE = VBoxR3Dll
+VBoxVMM_TEMPLATE = VBoxR3DllNoPic
 VBoxVMM_DEFS = $(VMMR3_DEFS)
 VBoxVMM_DEFS.$(KBUILD_TARGET) = $(VMMR3_DEFS.$(KBUILD_TARGET))
Index: /trunk/src/recompiler/Makefile-old.kmk
===================================================================
--- /trunk/src/recompiler/Makefile-old.kmk	(revision 35571)
+++ /trunk/src/recompiler/Makefile-old.kmk	(revision 35572)
@@ -202,5 +202,5 @@
 #
 DLLS += VBoxREMWrapper
-VBoxREMWrapper_TEMPLATE    = VBOXR3
+VBoxREMWrapper_TEMPLATE    = VBoxR3DllWarnNoPic
 VBoxREMWrapper_NAME        = VBoxREM
 VBoxREMWrapper_DEFS        = IN_REM_R3
@@ -257,5 +257,5 @@
 #
 IMPORT_LIBS += VBoxREMImp
-VBoxREMImp_TEMPLATE        = VBOXR3
+VBoxREMImp_TEMPLATE        = VBoxR3Dll
  ifn1of ($(KBUILD_TARGET), os2 win)
 VBoxREMImp_NAME            = VBoxREM
Index: /trunk/src/recompiler/Makefile.kmk
===================================================================
--- /trunk/src/recompiler/Makefile.kmk	(revision 35571)
+++ /trunk/src/recompiler/Makefile.kmk	(revision 35572)
@@ -178,5 +178,5 @@
  #
  DLLS += VBoxREMWrapper
- VBoxREMWrapper_TEMPLATE   = VBOXR3
+ VBoxREMWrapper_TEMPLATE   = VBoxR3DllWarnNoPic
  VBoxREMWrapper_NAME       = VBoxREM
  VBoxREMWrapper_DEFS       = IN_REM_R3
@@ -213,5 +213,5 @@
 #
 IMPORT_LIBS += VBoxREMImp
-VBoxREMImp_TEMPLATE        = VBOXR3
+VBoxREMImp_TEMPLATE        = VBoxR3Dll
  ifn1of ($(KBUILD_TARGET), os2 win)
 VBoxREMImp_NAME            = VBoxREM
