Skip to content

Commit efa72a6

Browse files
authored
Merge pull request #17 from xianyi/develop
rebase
2 parents b1215f2 + 30d8351 commit efa72a6

File tree

14 files changed

+305
-156
lines changed

14 files changed

+305
-156
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ build.*
8989
*.swp
9090
benchmark/*.goto
9191
benchmark/smallscaling
92+
.vscode
9293
CMakeCache.txt
9394
CMakeFiles/*
9495
.vscode

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ include(GNUInstallDirs)
1414

1515
include(CMakePackageConfigHelpers)
1616

17+
if(MSVC AND NOT DEFINED NOFORTRAN)
18+
set(NOFORTRAN ON)
19+
endif()
1720

1821
#######
1922
if(MSVC)
@@ -229,7 +232,7 @@ if (NOT NO_CBLAS)
229232
add_subdirectory(utest)
230233
endif()
231234

232-
if (NOT MSVC AND NOT NOFORTRAN)
235+
if (NOT NOFORTRAN)
233236
# Build test and ctest
234237
add_subdirectory(test)
235238
if(NOT NO_CBLAS)

Makefile.arm64

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,110 @@
11
ifneq ($(C_COMPILER), PGI)
22
ifeq ($(CORE), ARMV8)
33
CCOMMON_OPT += -march=armv8-a
4+
ifneq ($(F_COMPILER), NAG)
45
FCOMMON_OPT += -march=armv8-a
56
endif
7+
endif
68

79
ifeq ($(CORE), CORTEXA53)
810
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a53
11+
ifneq ($(F_COMPILER), NAG)
912
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a53
1013
endif
14+
endif
1115

1216
ifeq ($(CORE), CORTEXA57)
1317
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a57
18+
ifneq ($(F_COMPILER), NAG)
1419
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a57
1520
endif
21+
endif
1622

1723
ifeq ($(CORE), CORTEXA72)
1824
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a72
25+
ifneq ($(F_COMPILER), NAG)
1926
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a72
2027
endif
28+
endif
2129

2230
ifeq ($(CORE), CORTEXA73)
2331
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a73
32+
ifneq ($(F_COMPILER), NAG)
2433
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a73
2534
endif
35+
endif
2636

2737
# Use a72 tunings because Neoverse-N1 is only available
2838
# in GCC>=9
2939
ifeq ($(CORE), NEOVERSEN1)
3040
ifeq ($(GCCVERSIONGTEQ7), 1)
3141
ifeq ($(GCCVERSIONGTEQ9), 1)
3242
CCOMMON_OPT += -march=armv8.2-a -mtune=neoverse-n1
43+
ifneq ($(F_COMPILER), NAG)
3344
FCOMMON_OPT += -march=armv8.2-a -mtune=neoverse-n1
45+
endif
3446
else
3547
CCOMMON_OPT += -march=armv8.2-a -mtune=cortex-a72
48+
ifneq ($(F_COMPILER), NAG)
3649
FCOMMON_OPT += -march=armv8.2-a -mtune=cortex-a72
3750
endif
51+
endif
3852
else
3953
CCOMMON_OPT += -march=armv8-a -mtune=cortex-a72
54+
ifneq ($(F_COMPILER), NAG)
4055
FCOMMON_OPT += -march=armv8-a -mtune=cortex-a72
4156
endif
4257
endif
58+
endif
4359

4460
ifeq ($(CORE), THUNDERX)
4561
CCOMMON_OPT += -march=armv8-a -mtune=thunderx
62+
ifneq ($(F_COMPILER), NAG)
4663
FCOMMON_OPT += -march=armv8-a -mtune=thunderx
4764
endif
65+
endif
4866

4967
ifeq ($(CORE), FALKOR)
5068
CCOMMON_OPT += -march=armv8-a -mtune=falkor
69+
ifneq ($(F_COMPILER), NAG)
5170
FCOMMON_OPT += -march=armv8-a -mtune=falkor
5271
endif
72+
endif
5373

5474
ifeq ($(CORE), THUNDERX2T99)
5575
CCOMMON_OPT += -march=armv8.1-a -mtune=thunderx2t99
76+
ifneq ($(F_COMPILER), NAG)
5677
FCOMMON_OPT += -march=armv8.1-a -mtune=thunderx2t99
5778
endif
79+
endif
5880

5981
ifeq ($(CORE), THUNDERX3T110)
6082
ifeq ($(GCCVERSIONGTEQ10), 1)
6183
CCOMMON_OPT += -march=armv8.3-a -mtune=thunderx3t110
84+
ifneq ($(F_COMPILER), NAG)
6285
FCOMMON_OPT += -march=armv8.3-a -mtune=thunderx3t110
86+
endif
6387
else
6488
CCOMMON_OPT += -march=armv8.1-a -mtune=thunderx2t99
89+
ifneq ($(F_COMPILER), NAG)
6590
FCOMMON_OPT += -march=armv8.1-a -mtune=thunderx2t99
6691
endif
6792
endif
93+
endif
6894

6995
ifeq ($(CORE), VORTEX)
7096
CCOMMON_OPT += -march=armv8.3-a
97+
ifneq ($(F_COMPILER), NAG)
7198
FCOMMON_OPT += -march=armv8.3-a
7299
endif
100+
endif
73101

74102
ifeq ($(GCCVERSIONGTEQ9), 1)
75103
ifeq ($(CORE), TSV110)
76104
CCOMMON_OPT += -march=armv8.2-a -mtune=tsv110
105+
ifneq ($(F_COMPILER), NAG)
77106
FCOMMON_OPT += -march=armv8.2-a -mtune=tsv110
78107
endif
79108
endif
80109
endif
110+
endif

Makefile.system

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,18 @@ endif
899899
# Fortran Compiler dependent settings
900900
#
901901

902+
ifeq ($(F_COMPILER), NAG)
903+
FCOMMON_OPT += -dcfuns -recursive -ieee=full -w=obs -thread_safe
904+
ifdef INTERFACE64
905+
ifneq ($(INTERFACE64), 0)
906+
FCOMMON_OPT += -i8
907+
endif
908+
endif
909+
ifeq ($(USE_OPENMP), 1)
910+
FCOMMON_OPT += -openmp
911+
endif
912+
endif
913+
902914
ifeq ($(F_COMPILER), FLANG)
903915
CCOMMON_OPT += -DF_INTERFACE_FLANG
904916
FCOMMON_OPT += -Mrecursive -Kieee
@@ -1207,6 +1219,8 @@ CCOMMON_OPT += -fPIC
12071219
endif
12081220
ifeq ($(F_COMPILER), SUN)
12091221
FCOMMON_OPT += -pic
1222+
else ifeq ($(F_COMPILER), NAG)
1223+
FCOMMON_OPT += -PIC
12101224
else
12111225
FCOMMON_OPT += -fPIC
12121226
endif
@@ -1465,6 +1479,10 @@ LAPACK_FFLAGS := $(FFLAGS)
14651479
LAPACK_FPFLAGS := $(FPFLAGS)
14661480
endif
14671481

1482+
ifeq ($(F_COMPILER),NAG)
1483+
LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS))
1484+
endif
1485+
14681486
LAPACK_CFLAGS = $(CFLAGS)
14691487
LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
14701488
ifdef INTERFACE64

Makefile.x86_64

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,46 @@ endif
1010

1111
ifdef HAVE_SSE3
1212
CCOMMON_OPT += -msse3
13+
ifneq ($(F_COMPILER), NAG)
1314
FCOMMON_OPT += -msse3
1415
endif
16+
endif
1517
ifdef HAVE_SSSE3
1618
CCOMMON_OPT += -mssse3
19+
ifneq ($(F_COMPILER), NAG)
1720
FCOMMON_OPT += -mssse3
1821
endif
22+
endif
1923
ifdef HAVE_SSE4_1
2024
CCOMMON_OPT += -msse4.1
25+
ifneq ($(F_COMPILER), NAG)
2126
FCOMMON_OPT += -msse4.1
2227
endif
28+
endif
2329
ifndef OLDGCC
2430
ifdef HAVE_AVX
2531
CCOMMON_OPT += -mavx
32+
ifneq ($(F_COMPILER), NAG)
2633
FCOMMON_OPT += -mavx
2734
endif
2835
endif
36+
endif
2937
ifndef NO_AVX2
3038
ifdef HAVE_AVX2
3139
CCOMMON_OPT += -mavx2
40+
ifneq ($(F_COMPILER), NAG)
3241
FCOMMON_OPT += -mavx2
3342
endif
3443
endif
44+
endif
3545

3646
ifeq ($(CORE), SKYLAKEX)
3747
ifndef DYNAMIC_ARCH
3848
ifndef NO_AVX512
3949
CCOMMON_OPT += -march=skylake-avx512
50+
ifneq ($(F_COMPILER), NAG)
4051
FCOMMON_OPT += -march=skylake-avx512
52+
endif
4153
ifeq ($(OSNAME), CYGWIN_NT)
4254
CCOMMON_OPT += -fno-asynchronous-unwind-tables
4355
FCOMMON_OPT += -fno-asynchronous-unwind-tables
@@ -59,9 +71,11 @@ ifeq ($(C_COMPILER), GCC)
5971
# cooperlake support was added in 10.1
6072
ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
6173
CCOMMON_OPT += -march=cooperlake
74+
ifneq ($(F_COMPILER), NAG)
6275
FCOMMON_OPT += -march=cooperlake
6376
endif
6477
endif
78+
endif
6579
ifeq ($(OSNAME), CYGWIN_NT)
6680
CCOMMON_OPT += -fno-asynchronous-unwind-tables
6781
FCOMMON_OPT += -fno-asynchronous-unwind-tables

appveyor.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,5 @@ build_script:
7373
- cmake --build .
7474

7575
test_script:
76-
- echo Running Test
77-
- cd utest
78-
- openblas_utest
76+
- ctest -j2
7977

ctest/CMakeLists.txt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@ enable_language(Fortran)
55

66
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DADD${BU} -DCBLAS")
77

8+
if(WIN32)
9+
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.ps1
10+
"$ErrorActionPreference = \"Stop\"\n"
11+
"Get-Content $args[1] | & $args[0]\n"
12+
)
13+
set(test_helper powershell -ExecutionPolicy Bypass "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.ps1")
14+
else()
815
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh
916
"$1 < $2\n"
1017
)
18+
set(test_helper sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh")
19+
endif()
1120

1221
foreach(float_type ${FLOAT_TYPES})
1322
string(SUBSTRING ${float_type} 0 1 float_char_upper)
@@ -21,7 +30,7 @@ foreach(float_type ${FLOAT_TYPES})
2130
c_${float_char}blas1.c)
2231
target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME})
2332
add_test(NAME "x${float_char}cblat1"
24-
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat1")
33+
COMMAND $<TARGET_FILE:x${float_char}cblat1>)
2534

2635
#level2
2736
add_executable(x${float_char}cblat2
@@ -33,7 +42,7 @@ foreach(float_type ${FLOAT_TYPES})
3342
constant.c)
3443
target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME})
3544
add_test(NAME "x${float_char}cblat2"
36-
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat2" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in2")
45+
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat2> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in2")
3746

3847
#level3
3948
add_executable(x${float_char}cblat3
@@ -45,6 +54,6 @@ foreach(float_type ${FLOAT_TYPES})
4554
constant.c)
4655
target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME})
4756
add_test(NAME "x${float_char}cblat3"
48-
COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat3" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
57+
COMMAND ${test_helper} $<TARGET_FILE:x${float_char}cblat3> "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3")
4958

5059
endforeach()

ctest/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,9 @@ ifeq ($(C_COMPILER), CLANG)
212212
CEXTRALIB = -lomp
213213
endif
214214
endif
215+
ifeq ($(F_COMPILER), NAG)
216+
CEXTRALIB = -lgomp
217+
endif
215218
endif
216219

217220
ifeq ($(BUILD_SINGLE),1)

f_check

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ if ($compiler eq "") {
3434
"pathf90", "pathf95",
3535
"pgf95", "pgf90", "pgf77", "pgfortran", "nvfortran",
3636
"flang", "egfortran",
37-
"ifort");
37+
"ifort", "nagfor");
3838

3939
OUTER:
4040
foreach $lists (@lists) {
@@ -64,6 +64,9 @@ if ($compiler eq "") {
6464
if (!$?) {
6565

6666
$data = `$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.s && rm -f ftest.s`;
67+
if ($data eq "") {
68+
$data = `$compiler -O2 -S ftest.f > /dev/null 2>&1 && cat ftest.c && rm -f ftest.c`;
69+
}
6770
if ($data =~ /zhoge_/) {
6871
$bu = "_";
6972
}
@@ -133,8 +136,16 @@ if ($compiler eq "") {
133136
$openmp = "-openmp";
134137
}
135138

139+
if ($data =~ /NAG/) {
140+
$vendor = NAG;
141+
$openmp = "-openmp";
142+
}
143+
136144
# for embedded underscore name, e.g. zho_ge, it may append 2 underscores.
137145
$data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.s && rm -f ftest3.s`;
146+
if ($data eq "") {
147+
$data = `$compiler -O2 -S ftest3.f > /dev/null 2>&1 && cat ftest3.c && rm -f ftest3.c`;
148+
}
138149
if ($data =~ / zho_ge__/) {
139150
$need2bu = 1;
140151
}
@@ -222,6 +233,12 @@ if ($compiler eq "") {
222233
$openmp = "-fopenmp";
223234
}
224235

236+
if ($compiler =~ /nagfor/) {
237+
$vendor = NAG;
238+
$bu = "_";
239+
$openmp = "-openmp";
240+
}
241+
225242
if ($vendor eq "") {
226243
$nofortran = 1;
227244
$compiler = "gfortran";
@@ -275,14 +292,20 @@ if (!$?) {
275292
if ($?) {
276293
$link = `$compiler $openmp -mabi=64 -v ftest2.f 2>&1 && rm -f a.out a.exe`;
277294
}
295+
#For nagfor
296+
if ($?) {
297+
$link = `$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`;
298+
}
278299
$binary = "" if ($?);
279300
}
280-
281301
if ($binary eq "") {
282302
$link = `$compiler $openmp -v ftest2.f 2>&1 && rm -f a.out a.exe`;
283303
}
284304
}
285305

306+
if ( $vendor eq "NAG") {
307+
$link = `$compiler $openmp -dryrun ftest2.f 2>&1 && rm -f a.out a.exe`;
308+
}
286309
$linker_L = "";
287310
$linker_l = "";
288311
$linker_a = "";
@@ -336,6 +359,7 @@ if ($link ne "") {
336359

337360
if (
338361
($flags =~ /^\-l/)
362+
&& ($flags !~ /ibrary/)
339363
&& ($flags !~ /gfortranbegin/)
340364
&& ($flags !~ /frtbegin/)
341365
&& ($flags !~ /pathfstart/)
@@ -352,6 +376,16 @@ if ($link ne "") {
352376
$linker_l .= $flags . " ";
353377
}
354378

379+
if ( $flags =~ /quickfit.o/ && $vendor == NAG) {
380+
$linker_l .= $flags . " ";
381+
}
382+
if ( $flags =~ /safefit.o/ && $vendor == NAG) {
383+
$linker_l .= $flags . " ";
384+
}
385+
if ( $flags =~ /thsafe.o/ && $vendor == NAG) {
386+
$linker_l .= $flags . " ";
387+
}
388+
355389
$linker_a .= $flags . " " if $flags =~ /\.a$/;
356390
}
357391

0 commit comments

Comments
 (0)