summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsisyphus <sisyphus@cpan.org>2021-01-10 15:31:59 +1100
committerKarl Williamson <khw@cpan.org>2021-01-10 17:08:05 -0700
commitebc271eaf774c515e66806a9128307e76eaf6edc (patch)
tree0b87e3c7c413e91cdd669864a0930a338debaf5b
parente7392fc268568686a791c32bc31682f5fa68fbfd (diff)
downloadperl-ebc271eaf774c515e66806a9128307e76eaf6edc.tar.gz
win32/makefile.mk - enable USE_QUADMATH builds (mingw compilers only) on MS Windows
-rw-r--r--win32/makefile.mk61
1 files changed, 61 insertions, 0 deletions
diff --git a/win32/makefile.mk b/win32/makefile.mk
index 26c824dca5..1e2a39c13c 100644
--- a/win32/makefile.mk
+++ b/win32/makefile.mk
@@ -101,6 +101,13 @@ USE_IMP_SYS *= define
#USE_LONG_DOUBLE *= define
#
+# Uncomment this if you want to support the use of __float128s in GCC builds.
+# This option is not supported for MSVC builds.
+#
+#USE_QUADMATH *= define
+#I_QUADMATH *= define
+
+#
# Comment this out if you want to build perl without __USE_MINGW_ANSI_STDIO defined.
# (If you're building perl with USE_LONG_DOUBLE defined then
# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.)
@@ -303,6 +310,8 @@ USE_ITHREADS *= undef
USE_IMP_SYS *= undef
USE_64_BIT_INT *= undef
USE_LONG_DOUBLE *= undef
+USE_QUADMATH *= undef
+I_QUADMATH *= undef
DEFAULT_INC_EXCLUDES_DOT *= undef
USE_NO_REGISTRY *= undef
@@ -425,6 +434,13 @@ USE_64_BIT_INT = define
USE_LONG_DOUBLE != undef
.ENDIF
+# Disable the __foat128 option for MSVC builds since that compiler
+# does not support it.
+.IF "$(CCTYPE)" != "GCC"
+USE_QUADMATH != undef
+I_QUADMATH != undef
+.ENDIF
+
ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
.IF "$(ARCHITECTURE)" == "AMD64"
ARCHITECTURE = x64
@@ -453,6 +469,10 @@ ARCHNAME !:= $(ARCHNAME)-64int
ARCHNAME !:= $(ARCHNAME)-ld
.ENDIF
+.IF "$(USE_QUADMATH)" == "define"
+ARCHNAME !:= $(ARCHNAME)-quadmath
+.ENDIF
+
# Set the install location of the compiler headers/libraries.
# These are saved into $Config{incpath} and $Config{libpth}.
.IF "$(GCCCROSS)" == "define"
@@ -569,6 +589,10 @@ LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
-lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \
-luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
+.IF "$(USE_QUADMATH)" == "define"
+LIBFILES += -lquadmath
+.ENDIF
+
.IF "$(CFG)" == "Debug"
OPTIMIZE = -g -O2
LINK_DBG = -g
@@ -1136,6 +1160,7 @@ CFG_VARS = \
d_mymalloc=$(PERL_MALLOC) ~ \
libs=$(LIBFILES:f) ~ \
incpath=$(CCINCDIR) ~ \
+ iquadmath=$(I_QUADMATH) ~ \
libperl=$(PERLIMPLIB:f) ~ \
libpth=$(CCLIBDIR);$(EXTRALIBDIRS) ~ \
libc=$(LIBC) ~ \
@@ -1150,6 +1175,7 @@ CFG_VARS = \
usemultiplicity=$(USE_MULTI) ~ \
use64bitint=$(USE_64_BIT_INT) ~ \
uselongdouble=$(USE_LONG_DOUBLE) ~ \
+ usequadmath=$(USE_QUADMATH) ~ \
usesitecustomize=$(USE_SITECUST) ~ \
default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT) ~ \
LINK_FLAGS=$(LINK_FLAGS) ~ \
@@ -1297,6 +1323,7 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
echo #undef HAS_MODFL_PROTO&& \
echo #undef HAS_SQRTL&& \
echo #undef HAS_STRTOLD&& \
+ echo #undef I_QUADMATH&& \
echo #undef PERL_PRIfldbl&& \
echo #undef PERL_PRIgldbl&& \
echo #undef PERL_PRIeldbl&& \
@@ -1309,6 +1336,7 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
echo #undef NVff&& \
echo #undef NVgf&& \
echo #undef USE_LONG_DOUBLE&& \
+ echo #undef USE_QUADMATH&& \
echo #undef USE_CPLUSPLUS)>> config.h
.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
@(echo #undef FILE_ptr&& \
@@ -1355,9 +1383,14 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
@(echo #define NV_PRESERVES_UV&& \
echo #define NV_PRESERVES_UV_BITS 64)>> config.h
.ELSE
+.IF "$(USE_QUADMATH)"=="define"
+ @(echo #define NV_PRESERVES_UV&& \
+ echo #define NV_PRESERVES_UV_BITS 64)>> config.h
+.ELSE
@(echo #undef NV_PRESERVES_UV&& \
echo #define NV_PRESERVES_UV_BITS 53)>> config.h
.ENDIF
+.ENDIF
@(echo #define IVdf "I64d"&& \
echo #define UVuf "I64u"&& \
echo #define UVof "I64o"&& \
@@ -1396,8 +1429,32 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
echo #define NVef "Le"&& \
echo #define NVff "Lf"&& \
echo #define NVgf "Lg"&& \
+ echo #undef I_QUADMATH&& \
+ echo #undef USE_QUADMATH&& \
echo #define USE_LONG_DOUBLE)>> config.h
.ELSE
+.IF "$(USE_QUADMATH)"=="define"
+ @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \
+ echo #define HAS_FREXPL&& \
+ echo #define HAS_ISNANL&& \
+ echo #define HAS_MODFL&& \
+ echo #define HAS_MODFL_PROTO&& \
+ echo #define HAS_SQRTL&& \
+ echo #define HAS_STRTOLD&& \
+ echo #define PERL_PRIfldbl "Lf"&& \
+ echo #define PERL_PRIgldbl "Lg"&& \
+ echo #define PERL_PRIeldbl "Le"&& \
+ echo #define PERL_SCNfldbl "Lf"&& \
+ echo #define NVTYPE __float128&& \
+ echo #define NVSIZE 16&& \
+ echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0&& \
+ echo #define NVef "Qe"&& \
+ echo #define NVff "Qf"&& \
+ echo #define NVgf "Qg"&& \
+ echo #undef USE_LONG_DOUBLE&& \
+ echo #define I_QUADMATH&& \
+ echo #define USE_QUADMATH)>> config.h
+.ELSE
@(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%.*g",^(n^),^(x^)^)&& \
echo #undef HAS_FREXPL&& \
echo #undef HAS_ISNANL&& \
@@ -1415,8 +1472,11 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
echo #define NVef "e"&& \
echo #define NVff "f"&& \
echo #define NVgf "g"&& \
+ echo #undef I_QUADMATH&& \
+ echo #undef USE_QUADMATH&& \
echo #undef USE_LONG_DOUBLE)>> config.h
.ENDIF
+.ENDIF
.IF "$(USE_CPLUSPLUS)"=="define"
@(echo #define USE_CPLUSPLUS&& \
echo #endif)>> config.h
@@ -1817,6 +1877,7 @@ test-prep-gcc :
if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL)
+ if exist $(CCDLLDIR)\libquadmath-0.dll $(XCOPY) $(CCDLLDIR)\libquadmath-0.dll ..\t\$(NULL)
.ENDIF