Skip to content

Commit a6dd575

Browse files
committed
cmake:BLACS: modern C compilers need no-implicit flag to avoid error
1 parent d164fd7 commit a6dd575

File tree

7 files changed

+62
-56
lines changed

7 files changed

+62
-56
lines changed

.github/workflows/cmake.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,13 @@ jobs:
208208
- name: Checkout ScaLAPACK
209209
uses: actions/checkout@v3
210210

211-
- name: Setup MPI
212-
run: brew install open-mpi
211+
- name: Setup MPI, Ninja
212+
run: brew install open-mpi ninja
213213

214214
- name: CMake configuration
215215
run: >
216216
cmake -B build
217+
-G Ninja
217218
--install-prefix ${{ runner.temp }}
218219
-DBUILD_SINGLE=on -DBUILD_DOUBLE=off -DBUILD_COMPLEX=off -DBUILD_COMPLEX16=off
219220
-DMPIEXEC_PREFLAGS=${{ env.MPIEXEC_PREFLAGS }}

BLACS/TESTING/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ set(FTestObj
88
blacstest.f btprim.f tools.f)
99

1010
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
11-
set_source_files_properties(blacstest.f PROPERTIES COMPILE_FLAGS "-std=legacy")
11+
set_property(SOURCE blacstest.f PROPERTY COMPILE_FLAGS "-std=legacy")
1212
endif()
1313

1414
add_executable(xFbtest ${FTestObj})

CMakeLists.txt

+40-35
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ configure_file(
2626
# Add the CMake directory for custon CMake modules
2727
set(CMAKE_MODULE_PATH "${SCALAPACK_SOURCE_DIR}/CMAKE" ${CMAKE_MODULE_PATH})
2828

29-
if (UNIX)
30-
if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Intel")
31-
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fltconsistency -fp_port" )
32-
endif ()
33-
endif ()
29+
if(UNIX)
30+
if(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
31+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-fltconsistency;-fp_port>")
32+
endif()
33+
endif()
3434

3535
#
3636
# MPI
@@ -85,12 +85,6 @@ else()
8585
endif()
8686

8787

88-
if (UNIX)
89-
if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "Intel")
90-
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fltconsistency -fp_port" )
91-
endif ()
92-
endif ()
93-
9488
macro(SCALAPACK_install_library lib)
9589
install(TARGETS ${lib} EXPORT scalapack-targets
9690
ARCHIVE DESTINATION lib${LIB_SUFFIX}
@@ -114,18 +108,11 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${SCALAPACK_BINARY_DIR}/lib)
114108

115109
# --------------------------------------------------
116110
# By default static library
117-
function (invertBoolean varName varValue)
118-
if (${varValue})
119-
set(${varName} false PARENT_SCOPE)
120-
else ()
121-
set(${varName} true PARENT_SCOPE)
122-
endif ()
123-
endfunction ()
124111
option(BUILD_SHARED_LIBS "Build shared libraries" OFF )
125-
invertBoolean("BUILD_STATIC_LIBS" ${BUILD_SHARED_LIBS})
126-
if ((${BUILD_SHARED_LIBS} EQUAL ON) AND NOT CMAKE_POSITION_INDEPENDENT_CODE)
112+
set(BUILD_STATIC_LIBS $<NOT:BUILD_SHARED_LIBS>)
113+
if(BUILD_SHARED_LIBS)
127114
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
128-
endif ()
115+
endif()
129116

130117
# --------------------------------------------------
131118
# Check for any necessary platform specific compiler flags
@@ -166,13 +153,25 @@ IF(LAPACK_LIBRARIES)
166153
include(CheckFortranFunctionExists)
167154
message(STATUS "--> LAPACK supplied by user is ${LAPACK_LIBRARIES}.")
168155
set(CMAKE_REQUIRED_LIBRARIES ${LAPACK_LIBRARIES})
169-
CHECK_FORTRAN_FUNCTION_EXISTS("dgesv" LAPACK_FOUND)
156+
set(LAPACK_FOUND true)
157+
if(BUILD_SINGLE)
158+
check_fortran_function_exists("sgesv" LAPACK_s_FOUND)
159+
if(NOT LAPACK_s_FOUND)
160+
set(LAPACK_FOUND false)
161+
endif()
162+
endif()
163+
if(BUILD_DOUBLE)
164+
check_fortran_function_exists("dgesv" LAPACK_d_FOUND)
165+
if(NOT LAPACK_d_FOUND)
166+
set(LAPACK_FOUND false)
167+
endif()
168+
endif()
170169
unset( CMAKE_REQUIRED_LIBRARIES )
171-
message(STATUS "--> LAPACK routine dgesv is found: ${LAPACK_FOUND}.")
170+
message(STATUS "--> LAPACK routine gesv is found: ${LAPACK_FOUND}.")
172171
ENDIF()
173172

174173
if(LAPACK_FOUND)
175-
message(STATUS "--> LAPACK supplied by user is WORKING, will use ${LAPACK_LIBRARIES}.")
174+
message(STATUS "--> LAPACK supplied by user is WORKING, will use ${LAPACK_LIBRARIES}.")
176175
else(LAPACK_FOUND)
177176
if(USE_OPTIMIZED_LAPACK_BLAS)
178177
message(STATUS "--> Searching for optimized LAPACK and BLAS libraries on your machine.")
@@ -258,27 +257,33 @@ append_subdir_files(src-C "SRC")
258257

259258
if (NOT MSVC)
260259
add_library(scalapack ${blacs} ${tools} ${tools-C} ${extra_lapack} ${pblas} ${pblas-F} ${ptzblas} ${ptools} ${pbblas} ${redist} ${src} ${src-C})
261-
set_target_properties(scalapack PROPERTIES
262-
VERSION ${SCALAPACK_VERSION}
263-
SOVERSION ${SCALAPACK_VERSION_MAJOR}.${SCALAPACK_VERSION_MINOR})
264-
target_link_libraries( scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} MPI::MPI_C)
265-
scalapack_install_library(scalapack)
266260
else () # Need to separate Fortran and C Code
267261
OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON )
268262
add_library(scalapack ${blacs} ${tools-C} ${pblas} ${ptools} ${redist} ${src-C})
269-
set_target_properties(scalapack PROPERTIES
270-
VERSION ${SCALAPACK_VERSION}
271-
SOVERSION ${SCALAPACK_VERSION_MAJOR}.${SCALAPACK_VERSION_MINOR})
272-
target_link_libraries( scalapack ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} MPI::MPI_C)
273263
add_library(scalapack-F ${pblas-F} ${pbblas} ${ptzblas} ${tools} ${src} ${extra_lapack} )
274264
set_target_properties(scalapack-F PROPERTIES
275265
VERSION ${SCALAPACK_VERSION}
276266
SOVERSION ${SCALAPACK_VERSION_MAJOR}.${SCALAPACK_VERSION_MINOR})
277-
target_link_libraries( scalapack-F ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} MPI::MPI_Fortran)
278-
scalapack_install_library(scalapack)
267+
target_link_libraries( scalapack-F PRIVATE ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} MPI::MPI_Fortran)
279268
scalapack_install_library(scalapack-F)
280269
endif ()
281270

271+
include(CheckCCompilerFlag)
272+
# C99+ default compilers such as Clang error without this
273+
# test the non-no form, otherwise always succeeds
274+
check_c_compiler_flag(-Wimplicit-function-declaration HAS_IMPLICIT_FUNC_FLAG)
275+
if(HAS_IMPLICIT_FUNC_FLAG)
276+
target_compile_options(scalapack PRIVATE $<$<COMPILE_LANGUAGE:C>:-Wno-implicit-function-declaration>)
277+
endif()
278+
279+
target_link_libraries(scalapack PRIVATE ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} MPI::MPI_C)
280+
281+
set_target_properties(scalapack PROPERTIES
282+
VERSION ${SCALAPACK_VERSION}
283+
SOVERSION ${SCALAPACK_VERSION_MAJOR}.${SCALAPACK_VERSION_MINOR})
284+
285+
scalapack_install_library(scalapack)
286+
282287
if(TARGET lapack)
283288
add_dependencies(scalapack lapack)
284289
endif()

PBLAS/TESTING/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
2+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch;-std=legacy>")
3+
endif()
4+
15
file(COPY ../SRC/PTOOLS/PB_Cwarn.c DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
26
file(COPY ../SRC/PTOOLS/PB_Cabort.c DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
37

@@ -44,7 +48,3 @@ if(BUILD_SINGLE AND BUILD_COMPLEX16)
4448
_pblas_test(zpb2tst "pzblas2tst.f;${zpbtcom}")
4549
_pblas_test(zpb3tst "pzblas3tst.f;${zpbtcom}")
4650
endif()
47-
48-
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
49-
add_compile_options($<$<COMPILE_LANGUAGE:Fortran>:-std=legacy>) # local to this directory
50-
endif()

PBLAS/TIMING/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
2+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch;-std=legacy>")
3+
endif()
4+
15
file(COPY ../SRC/PTOOLS/PB_Cwarn.c DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
26
file(COPY ../SRC/PTOOLS/PB_Cabort.c DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
37

@@ -44,7 +48,3 @@ if(BUILD_SINGLE AND BUILD_COMPLEX16)
4448
_pblas_test(zpb2tim "pzblas2tim.f;${zpbtcom}")
4549
_pblas_test(zpb3tim "pzblas3tim.f;${zpbtcom}")
4650
endif()
47-
48-
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
49-
add_compile_options($<$<COMPILE_LANGUAGE:Fortran>:-std=legacy>) # local to this directory
50-
endif()

TESTING/EIG/CMakeLists.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
2+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch;-std=legacy>")
3+
endif()
4+
5+
16
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
27

38
set (smatgen psmatgen.f pmatgeninc.f)
@@ -57,8 +62,3 @@ if(BUILD_SINGLE AND BUILD_COMPLEX16)
5762
_eig_test(xzevc "pzevcdriver.f;pzevcinfo.f;pzget22.f;${zmatgen}" 2)
5863
_eig_test(xzheevr "pzlasizesepr.f;pzlasizeheevr.f;pzseprdriver.f;pzseprreq.f;pzseprsubtst.f;pzsepchk.f;pzsepqtq.f;pzlatms.f;pzseprtst.f;pdsepinfo.f;pzlagsy.f;pzlasizesep.f;${zmatgen}" 4)
5964
endif()
60-
61-
62-
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
63-
add_compile_options($<$<COMPILE_LANGUAGE:Fortran>:-std=legacy>) # local to this directory
64-
endif()

TESTING/LIN/CMakeLists.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
2+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-fallow-argument-mismatch;-std=legacy>")
3+
endif()
4+
5+
16
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
27

38
set (smatgen psmatgen.f pmatgeninc.f)
@@ -70,8 +75,3 @@ if(BUILD_SINGLE AND BUILD_COMPLEX16)
7075
_lin_test(xzqr "pzqrdriver.f;pzqrinfo.f;pzgeqrrv.f;pzgeqlrv.f;pzgelqrv.f;pzgerqrv.f;pztzrzrv.f;pzlafchk.f;${zmatgen}")
7176
_lin_test(xzls "pzlsdriver.f;pzlsinfo.f;pzqrt13.f;pzqrt14.f;pzqrt16.f;pzqrt17.f;${zmatgen}")
7277
endif()
73-
74-
75-
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
76-
add_compile_options($<$<COMPILE_LANGUAGE:Fortran>:-std=legacy>) # local to this directory
77-
endif()

0 commit comments

Comments
 (0)