Add support for compilation with the NAG Fortran compilertags/v0.3.14^2
| @@ -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) | ||||
| @@ -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) | ||||