Merge pull request #3138 from martin-frbg/nagfor
Add support for compilation with the NAG Fortran compiler
This commit is contained in:
commit
d30b943251
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
38
f_check
|
@ -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$/;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue