"...rpmd/platforms/opencl/include/OpenCLRpmdKernelFactory.h" did not exist on "e561a67824a1a0ac544547ff4c08baa4853d1b5f"
lapack.cmake 3.99 KB
Newer Older
yuguo960516yuguo's avatar
yuguo960516yuguo committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include(ExternalProject)

set(LAPACK_PREFIX_DIR ${THIRD_PARTY_PATH}/lapack)
“yuguo”'s avatar
2.5  
“yuguo” committed
18
19
set(LAPACK_DOWNLOAD_DIR
    ${PADDLE_SOURCE_DIR}/third_party/lapack/${CMAKE_SYSTEM_NAME})
yuguo960516yuguo's avatar
yuguo960516yuguo committed
20
21
22
23
24
25
set(LAPACK_INSTALL_DIR ${THIRD_PARTY_PATH}/install/lapack)
set(LAPACK_LIB_DIR ${LAPACK_INSTALL_DIR}/lib)

# Note(zhouwei): lapack need fortan compiler which many machines don't have, so use precompiled library.
# use lapack tag v3.10.0 on 06/28/2021 https://github.com/Reference-LAPACK/lapack
if(LINUX)
“yuguo”'s avatar
2.5  
“yuguo” committed
26
27
  set(LAPACK_FILE
      "lapack_lnx_v3.10.0.20210628.tar.gz"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
28
29
      CACHE STRING "" FORCE)
  set(LAPACK_URL
“yuguo”'s avatar
2.5  
“yuguo” committed
30
      "https://paddlepaddledeps.bj.bcebos.com/${LAPACK_FILE}"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
31
32
33
34
35
36
37
38
      CACHE STRING "" FORCE)
  set(LAPACK_URL_MD5 71f8cc8237a8571692f3e07f9a4f25f6)
  set(GNU_RT_LIB_1 "${LAPACK_LIB_DIR}/libquadmath.so.0")
  set(GFORTRAN_LIB "${LAPACK_LIB_DIR}/libgfortran.so.3")
  set(BLAS_LIB "${LAPACK_LIB_DIR}/libblas.so.3")
  set(LAPACK_LIB "${LAPACK_LIB_DIR}/liblapack.so.3")
elseif(WIN32)
  # Refer to [lapack-for-windows] http://icl.cs.utk.edu/lapack-for-windows/lapack/#lapacke
“yuguo”'s avatar
2.5  
“yuguo” committed
39
40
  set(LAPACK_FILE
      "lapack_win_v3.10.0.20210628.zip"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
41
42
      CACHE STRING "" FORCE)
  set(LAPACK_URL
“yuguo”'s avatar
2.5  
“yuguo” committed
43
      "https://paddlepaddledeps.bj.bcebos.com/${LAPACK_FILE}"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
44
45
46
47
48
49
50
51
      CACHE STRING "" FORCE)
  set(LAPACK_URL_MD5 590d080392dcd5abbd5dca767a50b63a)
  set(GNU_RT_LIB_1 "${LAPACK_LIB_DIR}/libquadmath-0.dll")
  set(GNU_RT_LIB_2 "${LAPACK_LIB_DIR}/libgcc_s_seh-1.dll")
  set(GFORTRAN_LIB "${LAPACK_LIB_DIR}/libgfortran-3.dll")
  set(BLAS_LIB "${LAPACK_LIB_DIR}/libblas.dll")
  set(LAPACK_LIB "${LAPACK_LIB_DIR}/liblapack.dll")
else()
“yuguo”'s avatar
2.5  
“yuguo” committed
52
53
  set(LAPACK_FILE
      "lapack_mac_v3.10.0.20210628.tar.gz"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
54
55
      CACHE STRING "" FORCE)
  set(LAPACK_URL
“yuguo”'s avatar
2.5  
“yuguo” committed
56
      "https://paddlepaddledeps.bj.bcebos.com/${LAPACK_FILE}"
yuguo960516yuguo's avatar
yuguo960516yuguo committed
57
58
59
60
61
62
63
64
65
      CACHE STRING "" FORCE)
  set(LAPACK_URL_MD5 427aecf8dee8523de3566ca8e47944d7)
  set(GNU_RT_LIB_1 "${LAPACK_LIB_DIR}/libquadmath.0.dylib")
  set(GNU_RT_LIB_2 "${LAPACK_LIB_DIR}/libgcc_s.1.dylib")
  set(GFORTRAN_LIB "${LAPACK_LIB_DIR}/libgfortran.5.dylib")
  set(BLAS_LIB "${LAPACK_LIB_DIR}/libblas.3.dylib")
  set(LAPACK_LIB "${LAPACK_LIB_DIR}/liblapack.3.dylib")
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
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
function(download_lapack)
  message(
    STATUS "Downloading ${LAPACK_URL} to ${LAPACK_DOWNLOAD_DIR}/${LAPACK_FILE}")
  # NOTE: If the version is updated, consider emptying the folder; maybe add timeout
  file(
    DOWNLOAD ${LAPACK_URL} ${LAPACK_DOWNLOAD_DIR}/${LAPACK_FILE}
    EXPECTED_MD5 ${LAPACK_URL_MD5}
    STATUS ERR)
  if(ERR EQUAL 0)
    message(STATUS "Download ${LAPACK_FILE} success")
  else()
    message(
      FATAL_ERROR
        "Download failed, error: ${ERR}\n You can try downloading ${LAPACK_FILE} again"
    )
  endif()
endfunction()

# Download and check lapack.
if(EXISTS ${LAPACK_DOWNLOAD_DIR}/${LAPACK_FILE})
  file(MD5 ${LAPACK_DOWNLOAD_DIR}/${LAPACK_FILE} LAPACK_MD5)
  if(NOT LAPACK_MD5 STREQUAL LAPACK_URL_MD5)
    # clean build file
    file(REMOVE_RECURSE ${LAPACK_PREFIX_DIR})
    file(REMOVE_RECURSE ${LAPACK_INSTALL_DIR})
    download_lapack()
  endif()
else()
  download_lapack()
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
97
98
99
ExternalProject_Add(
  extern_lapack
  ${EXTERNAL_PROJECT_LOG_ARGS}
“yuguo”'s avatar
2.5  
“yuguo” committed
100
  URL ${LAPACK_DOWNLOAD_DIR}/${LAPACK_FILE}
yuguo960516yuguo's avatar
yuguo960516yuguo committed
101
  URL_MD5 ${LAPACK_URL_MD5}
“yuguo”'s avatar
2.5  
“yuguo” committed
102
103
  DOWNLOAD_DIR ${LAPACK_DOWNLOAD_DIR}
  SOURCE_DIR ${LAPACK_LIB_DIR}
yuguo960516yuguo's avatar
yuguo960516yuguo committed
104
105
106
107
108
109
  PREFIX ${LAPACK_PREFIX_DIR}
  DOWNLOAD_NO_PROGRESS 1
  PATCH_COMMAND ""
  UPDATE_COMMAND ""
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
“yuguo”'s avatar
2.5  
“yuguo” committed
110
  INSTALL_COMMAND ""
yuguo960516yuguo's avatar
yuguo960516yuguo committed
111
112
  BUILD_BYPRODUCTS ${BLAS_LIB}
  BUILD_BYPRODUCTS ${LAPACK_LIB})