Skip to content

Commit 85fd3c4

Browse files
authored
Support compilation with the Cray C and Fortran compilers (#3712)
* Add support for the Cray Fortran compiler
1 parent 096ae6f commit 85fd3c4

File tree

5 files changed

+54
-10
lines changed

5 files changed

+54
-10
lines changed

Makefile.system

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,6 @@ FCOMMON_OPT += -i8
11901190
endif
11911191
endif
11921192
endif
1193-
11941193
ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
11951194
ifndef BINARY64
11961195
FCOMMON_OPT += -n32
@@ -1200,27 +1199,23 @@ endif
12001199
ifeq ($(CORE), LOONGSON3R3)
12011200
FCOMMON_OPT += -loongson3 -static
12021201
endif
1203-
12041202
ifeq ($(CORE), LOONGSON3R4)
12051203
FCOMMON_OPT += -loongson3 -static
12061204
endif
1207-
12081205
else
12091206
ifndef BINARY64
12101207
FCOMMON_OPT += -m32
12111208
else
12121209
FCOMMON_OPT += -m64
12131210
endif
12141211
endif
1215-
12161212
ifeq ($(USE_OPENMP), 1)
12171213
FEXTRALIB += -lstdc++
12181214
FCOMMON_OPT += -mp
12191215
endif
12201216
endif
12211217

12221218
ifeq ($(C_COMPILER), OPEN64)
1223-
12241219
ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
12251220
ifndef BINARY64
12261221
CCOMMON_OPT += -n32
@@ -1230,13 +1225,10 @@ endif
12301225
ifeq ($(CORE), LOONGSON3R3)
12311226
CCOMMON_OPT += -loongson3 -static
12321227
endif
1233-
12341228
ifeq ($(CORE), LOONGSON3R4)
12351229
CCOMMON_OPT += -loongson3 -static
12361230
endif
1237-
12381231
else
1239-
12401232
ifndef BINARY64
12411233
CCOMMON_OPT += -m32
12421234
else
@@ -1282,6 +1274,19 @@ FCOMMON_OPT += -openmp
12821274
endif
12831275
endif
12841276

1277+
ifeq ($(F_COMPILER), CRAY)
1278+
CCOMMON_OPT += -DF_INTERFACE_INTEL
1279+
FCOMMON_OPT += -hnopattern
1280+
ifdef INTERFACE64
1281+
ifneq ($(INTERFACE64), 0)
1282+
FCOMMON_OPT += -s integer64
1283+
endif
1284+
endif
1285+
ifneq ($(USE_OPENMP), 1)
1286+
FCOMMON_OPT += -O noomp
1287+
endif
1288+
endif
1289+
12851290
ifdef BINARY64
12861291
ifdef INTERFACE64
12871292
ifneq ($(INTERFACE64), 0)
@@ -1565,6 +1570,11 @@ endif
15651570

15661571
ifeq ($(F_COMPILER),NAG)
15671572
LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
1573+
FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
1574+
endif
1575+
ifeq ($(F_COMPILER),CRAY)
1576+
LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
1577+
FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
15681578
endif
15691579

15701580
LAPACK_CFLAGS = $(CFLAGS)

cmake/fc.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,17 @@ if (${F_COMPILER} STREQUAL "COMPAQ")
222222
endif ()
223223
endif ()
224224

225+
if (${F_COMPILER} STREQUAL "CRAY")
226+
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_INTEL")
227+
set(FCOMMON_OPT "${FCOMMON_OPT} -hnopattern")
228+
if (INTERFACE64)
229+
set (FCOMMON_OPT "${FCOMMON_OPT} -s integer64")
230+
endif ()
231+
if (NOT USE_OPENMP)
232+
set(FCOMMON_OPT "${FCOMMON_OPT} -O noomp")
233+
endif ()
234+
endif ()
235+
225236
# from the root Makefile - this is for lapack-netlib to compile the correct secnd file.
226237
if (${F_COMPILER} STREQUAL "GFORTRAN")
227238
set(TIMER "INT_ETIME")

cmake/system.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,14 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
559559
endforeach ()
560560
endif ()
561561

562+
if ("${F_COMPILER}" STREQUAL "NAG" OR "${F_COMPILER}" STREQUAL "CRAY")
563+
set(FILTER_FLAGS "-msse3;-mssse3;-msse4.1;-mavx;-mavx2,-mskylake-avx512")
564+
foreach (FILTER_FLAG ${FILTER_FLAGS})
565+
string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS})
566+
string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS})
567+
endforeach ()
568+
endif ()
569+
562570
if ("${F_COMPILER}" STREQUAL "GFORTRAN")
563571
# lapack-netlib is rife with uninitialized warnings -hpa
564572
set(LAPACK_FFLAGS "${LAPACK_FFLAGS} -Wno-maybe-uninitialized")

f_check

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ if [ -z "$compiler" ]; then
4545
pathf90 pathf95
4646
pgf95 pgf90 pgf77 pgfortran nvfortran
4747
flang egfortran
48-
ifort nagfor ifx"
48+
ifort nagfor ifx ftn crayftn"
4949

5050
for list in $lists; do
5151
for p in $path; do
@@ -82,6 +82,10 @@ else
8282
vendor=FUJITSU
8383
openmp='-Kopenmp'
8484
;;
85+
*Cray*)
86+
vendor=CRAY
87+
openmp='-fopenmp'
88+
;;
8589
*GNU*|*GCC*)
8690

8791
v="${data#*GCC: *\) }"
@@ -295,6 +299,9 @@ fi
295299
if [ "$vendor" = "NAG" ]; then
296300
link=`$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`
297301
fi
302+
if [ "$vendor" = "CRAY" ]; then
303+
link=`$compiler $openmp -hnopattern ftest2.f 2>&1 && rm -f a.out a.exe`
304+
fi
298305
linker_L=""
299306
linker_l=""
300307
linker_a=""

f_check.pl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"pathf90", "pathf95",
3535
"pgf95", "pgf90", "pgf77", "pgfortran", "nvfortran",
3636
"flang", "egfortran",
37-
"ifort", "nagfor", "ifx");
37+
"ifort", "nagfor", "ifx", "ftn", "crayftn");
3838

3939
OUTER:
4040
foreach $lists (@lists) {
@@ -76,6 +76,11 @@
7676
$vendor = FUJITSU;
7777
$openmp = "-Kopenmp";
7878

79+
} elsif ($data =~ /Cray/) {
80+
81+
$vendor = CRAY;
82+
$openmp = "-fopenmp";
83+
7984
} elsif ($data =~ /GNU/ || $data =~ /GCC/ ) {
8085

8186
$data =~ s/\(+.*?\)+//g;
@@ -309,6 +314,9 @@
309314
if ( $vendor eq "NAG") {
310315
$link = `$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`;
311316
}
317+
if ( $vendor eq "CRAY") {
318+
$link = `$compiler $openmp -hnopattern ftest2.f 2>&1 && rm -f a.out a.exe`;
319+
}
312320
$linker_L = "";
313321
$linker_l = "";
314322
$linker_a = "";

0 commit comments

Comments
 (0)