diff options
author | Daniel Dragan <bulk88@hotmail.com> | 2013-11-19 16:25:51 -0500 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2013-11-20 16:18:37 +1100 |
commit | a48cc4c4277ae7875bbf28793177c100f1d5784c (patch) | |
tree | 543a599b558ffd0b01c83101a702418329c66cf0 /win32 | |
parent | 670de6d6a9c900cd23ea5f542b7d35bbd83f1084 (diff) | |
download | perl-a48cc4c4277ae7875bbf28793177c100f1d5784c.tar.gz |
add Intel C++ Compiler for Win32 support
-most fixes involve code detecting Perl on VC, and changing it to ICC
is another kind of VC, but ICC's version isn't this "other kind of VC"'s
version number, call the partner VC to find out the "VC version number"
of ICC
not yet done
-no Intel C specific optimization flags
-long doubles and C99
-ccversion behavior might not be ideal/rethink
Diffstat (limited to 'win32')
-rw-r--r-- | win32/Makefile | 18 | ||||
-rw-r--r-- | win32/config_sh.PL | 14 |
2 files changed, 30 insertions, 2 deletions
diff --git a/win32/Makefile b/win32/Makefile index c06b377206..bdefe90c83 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -132,6 +132,11 @@ CCTYPE = MSVC60 #CCTYPE = MSVC120FREE # +# If you are using Intel C++ Compiler uncomment this +# +#__ICC = define + +# # uncomment next line if you want debug version of perl (big,slow) # If not enabled, we automatically try to use maximum optimization # with all compilers that are known to have a working optimizer. @@ -417,8 +422,13 @@ INST_HTML = $(INST_TOP)$(INST_VER)\html # Programs to compile, build .lib files and link # +!IF "$(__ICC)" != "define" CC = cl LINK32 = link +!ELSE +CC = icl +LINK32 = xilink +!ENDIF LIB32 = $(LINK32) -lib RSC = rc @@ -488,6 +498,14 @@ LIBBASEFILES = \ netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \ version.lib odbc32.lib odbccp32.lib comctl32.lib +# Avoid __intel_new_proc_init link error for libircmt. +# libmmd is /MD equivelent, other variants exist. +# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99, +# and optimized C89 funcs +!IF "$(__ICC)" == "define" +LIBBASEFILES = $(LIBBASEFILES) libircmt.lib libmmd.lib +!ENDIF + # The 64 bit Windows Server 2003 SP1 SDK compilers link against MSVCRT.dll, which # doesn't include the buffer overrun verification code used by the /GS switch. # Since the code links against libraries that are compiled with /GS, this diff --git a/win32/config_sh.PL b/win32/config_sh.PL index d9bfd9922b..7553b59cac 100644 --- a/win32/config_sh.PL +++ b/win32/config_sh.PL @@ -93,7 +93,7 @@ else { if (exists $opt{cc}) { # cl version detection borrowed from Test::Smoke's configsmoke.pl - if ($opt{cc} =~ /\bcl/) { #MSVC can come as clarm.exe + if ($opt{cc} =~ /\b(?:cl|icl)/) { #MSVC can come as clarm.exe, icl=Intel C my $output = `$opt{cc} --version 2>&1`; $opt{ccversion} = $output =~ /^.*Version\s+([\d.]+)/ ? $1 : '?'; } @@ -115,7 +115,7 @@ $opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth}; $opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath}; my($int64, $int64f); -if ($opt{cc} =~ /\bcl/) { +if ($opt{cc} =~ /\b(?:cl|icl)/) { $int64 = '__int64'; $int64f = 'I64'; } @@ -205,6 +205,16 @@ if ($opt{cc} =~ /\bcl/ and $opt{ccversion} =~ /^(\d+)/) { $opt{ar} ='lib'; } } +#find out which MSVC this ICC is using +elsif ($opt{cc} =~ /\bicl/) { + my $output = `cl --version 2>&1`; + my $num_ver = $output =~ /^.*Version\s+([\d.]+)/ ? $1 : '?'; + if($num_ver =~ /^(\d+)/ && $1 >= 14) { + $opt{sGMTIME_max} = 32535291599; + $opt{sLOCALTIME_max} = 32535244799; + } + $opt{ar} ='xilib'; +} if ($opt{useithreads} eq 'define' && $opt{ccflags} =~ /-DPERL_IMPLICIT_SYS\b/) { $opt{d_pseudofork} = 'define'; |