Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit 5376adc

Browse files
steve-m-hayrurban
authored andcommitted
Update gmake for VS 2017
Update GNUmakefile as per: fe7ba59 Fix dmake build breakage when using Visual C++ 82cad14 Update dmake for VS 2017 74102a8 Fix up CCINCDIR/CCLIBDIR for VC++ 14.1 (and VC++ 8.0-14.0 too!) (cherry picked from commit 88b1365)
1 parent ccf7005 commit 5376adc

File tree

2 files changed

+85
-33
lines changed

2 files changed

+85
-33
lines changed

pod/perlcdelta.pod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,11 @@ L<[perl #131337]|https://rt.perl.org/Public/Bug/Display.html?id=131337>
329329

330330
=item *
331331

332+
Support for compiling perl on Windows using Microsoft Visual Studio 2017
333+
(containing Visual C++ 14.1) has been added.
334+
335+
=item *
336+
332337
Building XS modules with GCC 6 in a 64-bit build of Perl failed due to
333338
incorrect mapping of C<strtoll> and C<strtoull>. This has now been fixed.
334339
L<[perl #131726]|https://rt.perl.org/Public/Bug/Display.html?id=131726>

win32/GNUmakefile

Lines changed: 80 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ DEFAULT_INC_EXCLUDES_DOT := define
189189
#CCTYPE := MSVC140
190190
# Visual C++ 2015 Express Edition (aka Visual C++ 14.0) (free version)
191191
#CCTYPE := MSVC140FREE
192+
# Visual C++ 2017 (aka Visual C++ 14.1) (all versions)
193+
#CCTYPE := MSVC141
192194
# MinGW or mingw-w64 with gcc-3.4.5 or later
193195
#CCTYPE := GCC
194196

@@ -248,11 +250,9 @@ DEFAULT_INC_EXCLUDES_DOT := define
248250
#ALL_STATIC := define
249251

250252
#
251-
# set the install locations of the compiler include/libraries
252-
# Running VCVARS32.BAT is *required* when using Visual C.
253-
# Some versions of Visual C don't define MSVCDIR in the environment,
254-
# so you may have to set CCHOME explicitly (spaces in the path name should
255-
# not be quoted)
253+
# set the install locations of the compiler
254+
# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
255+
# Visual C++.
256256
#
257257
#CCHOME := C:\MinGW
258258

@@ -368,31 +368,27 @@ CCTYPE := MSVC$(MSVCVER)0
368368
endif
369369
endif
370370

371+
# Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
372+
# define $(VCINSTALLDIR) instead, but for VC++ 14.1 we need the subfolder given
373+
# by $(VCToolsInstallDir).
371374
ifeq ($(CCHOME),)
372375
ifeq ($(CCTYPE),GCC)
373376
# C:\MinGW only for 32bit, strawberry has a better abstraction and is easier to setup
374377
CCHOME := C:\strawberry\c
378+
#CCHOME := C:\MinGW
379+
else ifeq ($(CCTYPE),MSVC60)
380+
CCHOME := $(MSVCDir)
381+
else ifeq ($(CCTYPE),MSVC70)
382+
CCHOME := $(MSVCDir)
383+
else ifeq ($(CCTYPE),MSVC70FREE)
384+
CCHOME := $(MSVCDir)
385+
else ifeq ($(CCTYPE),MSVC141)
386+
CCHOME := $(VCToolsInstallDir)
375387
else
376-
CCHOME := $(MSVCDIR)
388+
CCHOME := $(VCINSTALLDIR)
377389
endif
378390
endif
379391

380-
#
381-
# Following sets $Config{incpath} and $Config{libpth}
382-
#
383-
384-
ifneq ($(GCCCROSS),)
385-
CCINCDIR := $(CCHOME)\$(GCCCROSS)\include
386-
CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib
387-
CCDLLDIR := $(CCLIBDIR)
388-
ARCHPREFIX := $(GCCCROSS)-
389-
else
390-
CCINCDIR := $(CCHOME)\include
391-
CCLIBDIR := $(CCHOME)\lib
392-
CCDLLDIR := $(CCHOME)\bin
393-
ARCHPREFIX :=
394-
endif
395-
396392
ifeq ($(CCTYPE),GCC)
397393
ifeq ($(GCCTARGET),x86_64-w64-mingw32)
398394
WIN64 := define
@@ -485,6 +481,35 @@ ifeq ($(USE_LONG_DOUBLE),define)
485481
ARCHNAME := $(ARCHNAME)-ld
486482
endif
487483

484+
# Set the install location of the compiler headers/libraries.
485+
# These are saved into $Config{incpath} and $Config{libpth}.
486+
ifneq ($(GCCCROSS),)
487+
CCINCDIR := $(CCHOME)\$(GCCCROSS)\include
488+
CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib
489+
ARCHPREFIX := $(GCCCROSS)-
490+
else
491+
CCINCDIR := $(CCHOME)\include
492+
ifeq ($(CCTYPE),MSVC141)
493+
ifeq ($(WIN64),define)
494+
CCLIBDIR := $(CCHOME)\lib\x64
495+
else
496+
CCLIBDIR := $(CCHOME)\lib\x86
497+
endif
498+
else
499+
CCLIBDIR := $(CCHOME)\lib
500+
endif
501+
ARCHPREFIX :=
502+
endif
503+
504+
# Set DLL location for GCC compilers.
505+
ifeq ($(CCTYPE),GCC)
506+
ifneq ($(GCCCROSS),)
507+
CCDLLDIR := $(CCLIBDIR)
508+
else
509+
CCDLLDIR := $(CCHOME)\bin
510+
endif
511+
endif
512+
488513
ARCHDIR = ..\lib\$(ARCHNAME)
489514
COREDIR = ..\lib\CORE
490515
AUTODIR = ..\lib\auto
@@ -495,7 +520,6 @@ CPANDIR = ..\cpan
495520
PODDIR = ..\pod
496521
HTMLDIR = .\html
497522

498-
#
499523
INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
500524
INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
501525
INST_LIB = $(INST_TOP)$(INST_VER)\lib
@@ -649,6 +673,8 @@ ifeq ($(CCTYPE),MSVC140)
649673
LIBC = ucrt.lib
650674
else ifeq ($(CCTYPE),MSVC140FREE)
651675
LIBC = ucrt.lib
676+
else ifeq ($(CCTYPE),MSVC141)
677+
LIBC = ucrt.lib
652678
else
653679
LIBC = msvcrt.lib
654680
endif
@@ -664,6 +690,8 @@ ifeq ($(CCTYPE),MSVC140)
664690
LIBC = ucrtd.lib
665691
else ifeq ($(CCTYPE),MSVC140FREE)
666692
LIBC = ucrtd.lib
693+
else ifeq ($(CCTYPE),MSVC141)
694+
LIBC = ucrtd.lib
667695
else
668696
LIBC = msvcrtd.lib
669697
endif
@@ -701,9 +729,11 @@ endif
701729

702730
# Likewise for deprecated Winsock APIs in VC++ 14.0 for now.
703731
ifeq ($(CCTYPE),MSVC140)
704-
DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
732+
DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
705733
else ifeq ($(CCTYPE),MSVC140FREE)
706-
DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
734+
DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
735+
else ifeq ($(CCTYPE),MSVC141)
736+
DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
707737
endif
708738

709739
# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
@@ -737,6 +767,12 @@ LIBBASEFILES += msvcrtd.lib vcruntimed.lib
737767
else
738768
LIBBASEFILES += msvcrt.lib vcruntime.lib
739769
endif
770+
else ifeq ($(CCTYPE),MSVC141)
771+
ifeq ($(CFG),DebugFull)
772+
LIBBASEFILES += msvcrtd.lib vcruntimed.lib
773+
else
774+
LIBBASEFILES += msvcrt.lib vcruntime.lib
775+
endif
740776
endif
741777

742778
# Avoid __intel_new_proc_init link error for libircmt.
@@ -786,6 +822,7 @@ else
786822
RSC_FLAGS = -DINCLUDE_MANIFEST
787823
endif
788824

825+
# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
789826

790827
# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
791828
# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
@@ -1314,20 +1351,30 @@ ifeq ($(CCTYPE),MSVC140)
13141351
echo #undef FILE_cnt&& \
13151352
echo #undef FILE_base&& \
13161353
echo #undef FILE_bufsiz&& \
1317-
echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1318-
echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1319-
echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1320-
echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \
1354+
echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1355+
echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1356+
echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1357+
echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
13211358
echo #define I_STDBOOL)>> config.h
13221359
else ifeq ($(CCTYPE),MSVC140FREE)
13231360
@(echo #undef FILE_ptr&& \
13241361
echo #undef FILE_cnt&& \
13251362
echo #undef FILE_base&& \
13261363
echo #undef FILE_bufsiz&& \
1327-
echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1328-
echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1329-
echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1330-
echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \
1364+
echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1365+
echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1366+
echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1367+
echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
1368+
echo #define I_STDBOOL)>> config.h
1369+
else ifeq ($(CCTYPE),MSVC141)
1370+
@(echo #undef FILE_ptr&& \
1371+
echo #undef FILE_cnt&& \
1372+
echo #undef FILE_base&& \
1373+
echo #undef FILE_bufsiz&& \
1374+
echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1375+
echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1376+
echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1377+
echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
13311378
echo #define I_STDBOOL)>> config.h
13321379
endif
13331380
ifeq ($(USE_LARGE_FILES),define)

0 commit comments

Comments
 (0)