enable LTO/LTCG/WPO for most Visual Cs
authorDaniel Dragan <bulk88@hotmail.com>
Mon, 28 Oct 2013 05:28:41 +0000 (01:28 -0400)
committerSteve Hay <steve.m.hay@googlemail.com>
Tue, 29 Oct 2013 21:23:42 +0000 (21:23 +0000)
All Win32 Visual C compilers except for VC 6/_MSC_VER == 1200 support LTCG.
LTCG generates slightly smaller and slightly faster binaries.

win32/Makefile
win32/config.vc
win32/config_sh.PL
win32/makefile.mk

index fe72408..c49b250 100644 (file)
@@ -449,10 +449,11 @@ LINK_DBG  = -debug -opt:ref,icf
 # installed to get better stack traces from just the PDB symbols, so we
 # avoid the bloat of COFF symbols by default.
 #LINK_DBG      = $(LINK_DBG) -debugtype:both
-!  IF "$(WIN64)" == "define"
+!  IF "$(CCTYPE)" != "MSVC60"
 # enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
 OPTIMIZE       = $(OPTIMIZE) -GL
 LINK_DBG       = $(LINK_DBG) -ltcg
+LIB_FLAGS      = -ltcg
 !  ENDIF
 !ENDIF
 
@@ -504,7 +505,7 @@ CFLAGS              = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
 LINK_FLAGS     = -nologo -nodefaultlib $(LINK_DBG) \
                -libpath:"$(INST_COREDIR)" \
                -machine:$(PROCESSOR_ARCHITECTURE)
-LIB_FLAGS      = -nologo
+LIB_FLAGS      = $(LIB_FLAGS) -nologo
 OBJOUT_FLAG    = -Fo
 EXEOUT_FLAG    = -Fe
 
index d133b58..8f2803f 100644 (file)
@@ -22,7 +22,7 @@ api_revision='~PERL_API_REVISION~'
 api_subversion='~PERL_API_SUBVERSION~'
 api_version='~PERL_API_VERSION~'
 api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='lib'
+ar='lib -ltcg'
 archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
 archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
 archname64=''
index f3fdf07..d9bfd99 100644 (file)
@@ -201,12 +201,17 @@ if ($opt{cc} =~ /\bcl/ and $opt{ccversion} =~ /^(\d+)/) {
        $opt{sGMTIME_max} = 32535291599;
        $opt{sLOCALTIME_max} = 32535244799;
     }
+    if($ccversion < 13) { #VC6
+       $opt{ar} ='lib';
+    }
 }
 
 if ($opt{useithreads} eq 'define' && $opt{ccflags} =~ /-DPERL_IMPLICIT_SYS\b/) {
     $opt{d_pseudofork} = 'define';
 }
 
+#if the fields above are defined, they override the defaults in the premade
+#config file
 while (<>) {
     s/~([\w_]+)~/exists $opt{$1} ? $opt{$1} : ''/eg;
     if (/^([\w_]+)=(.*)$/) {
index 9a4b9f6..8a8a5c2 100644 (file)
@@ -519,10 +519,11 @@ LINK_DBG  = -debug -opt:ref,icf
 # installed to get better stack traces from just the PDB symbols, so we
 # avoid the bloat of COFF symbols by default.
 #LINK_DBG      = $(LINK_DBG) -debugtype:both
-.IF "$(WIN64)" == "define"
+.IF "$(CCTYPE)" != "MSVC60"
 # enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
 OPTIMIZE       += -GL
 LINK_DBG       += -ltcg
+LIB_FLAGS      = -ltcg
 .ENDIF
 .ENDIF
 
@@ -573,7 +574,7 @@ CFLAGS              = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
 LINK_FLAGS     = -nologo -nodefaultlib $(LINK_DBG) \
                -libpath:"$(INST_COREDIR)" \
                -machine:$(PROCESSOR_ARCHITECTURE)
-LIB_FLAGS      = -nologo
+LIB_FLAGS      = $(LIB_FLAGS) -nologo
 OBJOUT_FLAG    = -Fo
 EXEOUT_FLAG    = -Fe
 LIBOUT_FLAG    = /out: