forked from xiaoyeli/superlu_mt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
126 lines (107 loc) · 3.7 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
cmake_minimum_required (VERSION 3.13)
# Project Version
project(SuperLU_MT C)
set(VERSION_MAJOR "4")
set(VERSION_MINOR "0")
set(VERSION_BugFix "0")
set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BugFix})
# Compatiblitly to xSDK standard
# (Extreme-scale Scientific Software Development Kit)
set(USE_XSDK_DEFAULTS TRUE)
# The XSDK standard does not allow using internally built BLAS
if (NOT "${enable_internal_blaslib}" STREQUAL "")
if (USE_XSDK_DEFAULTS)
set(enable_blaslib_xSDK OFF)
else()
set(enable_blaslib_xSDK ON)
endif()
else()
set(enable_blaslib_xSDK ${enable_internal_blaslib})
endif()
if (NOT "${enable_fortran}" STREQUAL "")
if (XSDK_ENABLE_Fortran)
set(enable_fortran_xSDK ON)
else()
set(enable_fortran_xSDK OFF)
endif()
else()
set(enable_fortran_xSDK ${enable_fortran})
endif()
set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
# set up options
option(enable_internal_blaslib "Build the CBLAS library" ${enable_blaslib_xSDK})
option(enable_single "Enable single precision library" ON)
option(enable_double "Enable double precision library" ON)
option(enable_complex "Enable complex precision library" ON)
option(enable_complex16 "Enable complex16 precision library" ON)
option(enable_matlabmex "Build the Matlab mex library" OFF)
option(enable_doc "Add target 'doc' to build Doxygen documentation" OFF)
option(enable_examples "Build examples" ON)
option(enable_fortran "Build Fortran interface" ${enable_fortran_xSDK})
option(enable_tests "Build tests" ON)
option (BUILD_SHARED_LIBS "shared/static" OFF)
include (GNUInstallDirs)
include (CheckLibraryExists)
check_library_exists(m sin "" HAVE_LIB_M)
######################################################################
#
# Find packages
#
######################################################################
#
###find_package (BLAS REQUIRED)
#-- BLAS
option(TPL_ENABLE_INTERNAL_BLASLIB "Build the CBLAS library" ${enable_internal_blaslib})
option(TPL_BLAS_LIBRARIES "List of absolute paths to blas libraries [].")
if(NOT enable_internal_blaslib)
if (TPL_BLAS_LIBRARIES)
set(BLAS_FOUND TRUE)
else()
find_package(BLAS)
if (BLAS_FOUND)
set(TPL_BLAS_LIBRARIES "${BLAS_LIBRARIES}" CACHE FILEPATH
"Set from FindBLAS.cmake BLAS_LIBRARIES." FORCE)
endif()
endif()
endif()
if(BLAS_FOUND)
message("-- Using TPL_BLAS_LIBRARIES='${TPL_BLAS_LIBRARIES}'")
set(CMAKE_C_FLAGS "-DUSE_VENDOR_BLAS ${CMAKE_C_FLAGS}")
set(BLAS_LIB ${TPL_BLAS_LIBRARIES})
# fix up BLAS library name
string (REPLACE ";" " " BLAS_LIB_STR "${BLAS_LIB}")
set(BLAS_LIB_EXPORT ${BLAS_LIB_STR})
else()
message("-- Did not find or specify BLAS so configure to build internal CBLAS ...")
add_subdirectory(CBLAS)
set(BLAS_LIB blas)
if (BUILD_SHARED_LIBS) # export to be referenced by downstream makefile
set(BLAS_LIB_EXPORT ${CMAKE_INSTALL_PREFIX}/CBLAS/libblas.so)
else()
set(BLAS_LIB_EXPORT ${CMAKE_INSTALL_PREFIX}/CBLAS/libblas.a)
endif()
endif()
set (PLAT "_PTHREAD" CACHE STRING "threading flavor _PTHREAD/_OPENMP")
if (PLAT STREQUAL "_PTHREAD")
find_package (Threads REQUIRED)
elseif (PLAT STREQUAL "_OPENMP")
find_package (OpenMP REQUIRED)
else ()
message (SEND_ERROR "invalid PLAT setting")
endif ()
option (LONGINT "use 64-bit integers for indexing sparse matrices (default is 32-bit)" OFF)
enable_language(C)
if (enable_fortran)
enable_language(Fortran)
endif()
set(SUPERLU_MT_VERSION "${PROJECT_VERSION}")
set (SUPERLUMT_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/superlu_mt CACHE STRING "include dir")
add_subdirectory(SRC)
add_subdirectory(EXAMPLE)
if(enable_tests)
enable_testing()
add_subdirectory(TESTING)
endif()
if (enable_doc)
add_subdirectory(DOC)
endif()