Merge pull request #3138 from martin-frbg/nagfor

Add support for compilation with the NAG Fortran compiler
This commit is contained in:
Martin Kroeker 2021-03-12 12:46:19 +01:00 committed by GitHub
commit d30b943251
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 74 additions and 2 deletions

View File

@ -899,6 +899,18 @@ endif
# Fortran Compiler dependent settings # Fortran Compiler dependent settings
# #
ifeq ($(F_COMPILER), NAG)
FCOMMON_OPT += -dcfuns -recursive -ieee=full -w=obs -thread_safe
ifdef INTERFACE64
ifneq ($(INTERFACE64), 0)
FCOMMON_OPT += -i8
endif
endif
ifeq ($(USE_OPENMP), 1)
FCOMMON_OPT += -openmp
endif
endif
ifeq ($(F_COMPILER), FLANG) ifeq ($(F_COMPILER), FLANG)
CCOMMON_OPT += -DF_INTERFACE_FLANG CCOMMON_OPT += -DF_INTERFACE_FLANG
FCOMMON_OPT += -Mrecursive -Kieee FCOMMON_OPT += -Mrecursive -Kieee
@ -1207,6 +1219,8 @@ CCOMMON_OPT += -fPIC
endif endif
ifeq ($(F_COMPILER), SUN) ifeq ($(F_COMPILER), SUN)
FCOMMON_OPT += -pic FCOMMON_OPT += -pic
else ifeq ($(F_COMPILER), NAG)
FCOMMON_OPT += -PIC
else else
FCOMMON_OPT += -fPIC FCOMMON_OPT += -fPIC
endif endif
@ -1465,6 +1479,10 @@ LAPACK_FFLAGS := $(FFLAGS)
LAPACK_FPFLAGS := $(FPFLAGS) LAPACK_FPFLAGS := $(FPFLAGS)
endif endif
ifeq ($(F_COMPILER),NAG)
LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
endif
LAPACK_CFLAGS = $(CFLAGS) LAPACK_CFLAGS = $(CFLAGS)
LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
ifdef INTERFACE64 ifdef INTERFACE64

View File

@ -10,34 +10,46 @@ endif
ifdef HAVE_SSE3 ifdef HAVE_SSE3
CCOMMON_OPT += -msse3 CCOMMON_OPT += -msse3
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -msse3 FCOMMON_OPT += -msse3
endif endif
endif
ifdef HAVE_SSSE3 ifdef HAVE_SSSE3
CCOMMON_OPT += -mssse3 CCOMMON_OPT += -mssse3
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -mssse3 FCOMMON_OPT += -mssse3
endif endif
endif
ifdef HAVE_SSE4_1 ifdef HAVE_SSE4_1
CCOMMON_OPT += -msse4.1 CCOMMON_OPT += -msse4.1
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -msse4.1 FCOMMON_OPT += -msse4.1
endif endif
endif
ifndef OLDGCC ifndef OLDGCC
ifdef HAVE_AVX ifdef HAVE_AVX
CCOMMON_OPT += -mavx CCOMMON_OPT += -mavx
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -mavx FCOMMON_OPT += -mavx
endif endif
endif endif
endif
ifndef NO_AVX2 ifndef NO_AVX2
ifdef HAVE_AVX2 ifdef HAVE_AVX2
CCOMMON_OPT += -mavx2 CCOMMON_OPT += -mavx2
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -mavx2 FCOMMON_OPT += -mavx2
endif endif
endif endif
endif
ifeq ($(CORE), SKYLAKEX) ifeq ($(CORE), SKYLAKEX)
ifndef DYNAMIC_ARCH ifndef DYNAMIC_ARCH
ifndef NO_AVX512 ifndef NO_AVX512
CCOMMON_OPT += -march=skylake-avx512 CCOMMON_OPT += -march=skylake-avx512
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -march=skylake-avx512 FCOMMON_OPT += -march=skylake-avx512
endif
ifeq ($(OSNAME), CYGWIN_NT) ifeq ($(OSNAME), CYGWIN_NT)
CCOMMON_OPT += -fno-asynchronous-unwind-tables CCOMMON_OPT += -fno-asynchronous-unwind-tables
FCOMMON_OPT += -fno-asynchronous-unwind-tables FCOMMON_OPT += -fno-asynchronous-unwind-tables
@ -59,9 +71,11 @@ ifeq ($(C_COMPILER), GCC)
# cooperlake support was added in 10.1 # cooperlake support was added in 10.1
ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11) ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
CCOMMON_OPT += -march=cooperlake CCOMMON_OPT += -march=cooperlake
ifneq ($(F_COMPILER), NAG)
FCOMMON_OPT += -march=cooperlake FCOMMON_OPT += -march=cooperlake
endif endif
endif endif
endif
ifeq ($(OSNAME), CYGWIN_NT) ifeq ($(OSNAME), CYGWIN_NT)
CCOMMON_OPT += -fno-asynchronous-unwind-tables CCOMMON_OPT += -fno-asynchronous-unwind-tables
FCOMMON_OPT += -fno-asynchronous-unwind-tables FCOMMON_OPT += -fno-asynchronous-unwind-tables

View File

@ -212,6 +212,9 @@ ifeq ($(C_COMPILER), CLANG)
CEXTRALIB = -lomp CEXTRALIB = -lomp
endif endif
endif endif
ifeq ($(F_COMPILER), NAG)
CEXTRALIB = -lgomp
endif
endif endif
ifeq ($(BUILD_SINGLE),1) ifeq ($(BUILD_SINGLE),1)

38
f_check
View File

@ -34,7 +34,7 @@ if ($compiler eq "") {
"pathf90", "pathf95", "pathf90", "pathf95",
"pgf95", "pgf90", "pgf77", "pgfortran", "nvfortran", "pgf95", "pgf90", "pgf77", "pgfortran", "nvfortran",
"flang", "egfortran", "flang", "egfortran",
"ifort"); "ifort", "nagfor");
OUTER: OUTER:
foreach $lists (@lists) { foreach $lists (@lists) {
@ -64,6 +64,9 @@ if ($compiler eq "") {
if (!$?) { if (!$?) {
$data = `$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.s && rm -f ftest.s`; $data = `$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.s && rm -f ftest.s`;
if ($data eq "") {
$data = `$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.c && rm -f ftest.c`;
}
if ($data =~ /zhoge_/) { if ($data =~ /zhoge_/) {
$bu = "_"; $bu = "_";
} }
@ -133,8 +136,16 @@ if ($compiler eq "") {
$openmp = "-openmp"; $openmp = "-openmp";
} }
if ($data =~ /NAG/) {
$vendor = NAG;
$openmp = "-openmp";
}
# for embedded underscore name, e.g. zho_ge, it may append 2 underscores. # for embedded underscore name, e.g. zho_ge, it may append 2 underscores.
$data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`; $data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`;
if ($data eq "") {
$data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.c && rm -f ftest3.c`;
}
if ($data =~ / zho_ge__/) { if ($data =~ / zho_ge__/) {
$need2bu = 1; $need2bu = 1;
} }
@ -222,6 +233,12 @@ if ($compiler eq "") {
$openmp = "-fopenmp"; $openmp = "-fopenmp";
} }
if ($compiler =~ /nagfor/) {
$vendor = NAG;
$bu = "_";
$openmp = "-openmp";
}
if ($vendor eq "") { if ($vendor eq "") {
$nofortran = 1; $nofortran = 1;
$compiler = "gfortran"; $compiler = "gfortran";
@ -275,14 +292,20 @@ if (!$?) {
if ($?) { if ($?) {
$link = `$compiler $openmp -mabi=64 -v ftest2.f 2>&1 && rm -f a.out a.exe`; $link = `$compiler $openmp -mabi=64 -v ftest2.f 2>&1 && rm -f a.out a.exe`;
} }
#For nagfor
if ($?) {
$link = `$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`;
}
$binary = "" if ($?); $binary = "" if ($?);
} }
if ($binary eq "") { if ($binary eq "") {
$link = `$compiler $openmp -v ftest2.f 2>&1 && rm -f a.out a.exe`; $link = `$compiler $openmp -v ftest2.f 2>&1 && rm -f a.out a.exe`;
} }
} }
if ( $vendor eq "NAG") {
$link = `$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`;
}
$linker_L = ""; $linker_L = "";
$linker_l = ""; $linker_l = "";
$linker_a = ""; $linker_a = "";
@ -336,6 +359,7 @@ if ($link ne "") {
if ( if (
($flags =~ /^\-l/) ($flags =~ /^\-l/)
&& ($flags !~ /ibrary/)
&& ($flags !~ /gfortranbegin/) && ($flags !~ /gfortranbegin/)
&& ($flags !~ /frtbegin/) && ($flags !~ /frtbegin/)
&& ($flags !~ /pathfstart/) && ($flags !~ /pathfstart/)
@ -352,6 +376,16 @@ if ($link ne "") {
$linker_l .= $flags . " "; $linker_l .= $flags . " ";
} }
if ( $flags =~ /quickfit.o/ && $vendor == NAG) {
$linker_l .= $flags . " ";
}
if ( $flags =~ /safefit.o/ && $vendor == NAG) {
$linker_l .= $flags . " ";
}
if ( $flags =~ /thsafe.o/ && $vendor == NAG) {
$linker_l .= $flags . " ";
}
$linker_a .= $flags . " " if $flags =~ /\.a$/; $linker_a .= $flags . " " if $flags =~ /\.a$/;
} }

View File

@ -270,6 +270,9 @@ ifeq ($(C_COMPILER), CLANG)
CEXTRALIB = -lomp CEXTRALIB = -lomp
endif endif
endif endif
ifeq ($(F_COMPILER), NAG)
CEXTRALIB = -lgomp
endif
endif endif
ifeq ($(BUILD_SINGLE),1) ifeq ($(BUILD_SINGLE),1)