@@ -26,11 +26,11 @@ configure_file(
2626# Add the CMake directory for custon CMake modules
2727set (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()
8585endif ()
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-
9488macro (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 ()
124111option (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} ." )
172171ENDIF ()
173172
174173if (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} ." )
176175else (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
259258if (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)
266260else () # 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)
280269endif ()
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+
282287if (TARGET lapack)
283288 add_dependencies (scalapack lapack)
284289endif ()
0 commit comments