130 lines
4.0 KiB
CMake
130 lines
4.0 KiB
CMake
# Copyright (c) 2025 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(MAGMA_PREFIX_DIR ${THIRD_PARTY_PATH}/magma)
|
|
set(MAGMA_DOWNLOAD_DIR
|
|
${PADDLE_SOURCE_DIR}/third_party/magma/${CMAKE_SYSTEM_NAME})
|
|
set(MAGMA_INSTALL_DIR ${THIRD_PARTY_PATH}/install/magma)
|
|
set(MAGMA_LIB_DIR ${MAGMA_INSTALL_DIR}/lib)
|
|
|
|
# Note(zhouwei): magma need fortran compiler which many machines don't have, so use precompiled library.
|
|
# use magma tag v2.9.0 on 07/28/2025 https://github.com/icl-utk-edu/magma/tree/v2.9.0
|
|
if(LINUX)
|
|
if(WITH_GPU)
|
|
execute_process(
|
|
COMMAND ${CMAKE_CUDA_COMPILER} --list-gpu-arch
|
|
OUTPUT_VARIABLE CUDA_ARCH_LIST
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
message(STATUS "Detected CUDA architectures: ${CUDA_ARCH_LIST}")
|
|
|
|
set(MAGMA_ARCH "sm_70")
|
|
set(MAGMA_URL_MD5 "649b886f9df75face6aa98015ccb1885")
|
|
|
|
if(CUDA_ARCH_LIST MATCHES "compute_80")
|
|
set(MAGMA_ARCH "sm_80")
|
|
set(MAGMA_URL_MD5 "c16079b2eaf48f5af741d979c5090667")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND nvcc -V
|
|
OUTPUT_VARIABLE NVCC_VERSION_RAW
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
string(REGEX MATCH "release ([0-9]+)\\.([0-9]+)" _ ${NVCC_VERSION_RAW})
|
|
set(CUDA_MAJOR ${CMAKE_MATCH_1})
|
|
set(CUDA_MINOR ${CMAKE_MATCH_2})
|
|
if(CUDA_MAJOR EQUAL 12 AND CUDA_MINOR EQUAL 0)
|
|
set(MAGMA_ARCH "cuda120")
|
|
set(MAGMA_URL_MD5 "a00f89aeb81f0373aac34684695847ab")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_XPU)
|
|
set(MAGMA_ARCH "xpu")
|
|
set(MAGMA_URL_MD5 "889f990bfd4a24c98831cfda0243674a")
|
|
endif()
|
|
|
|
if(WITH_ROCM)
|
|
set(MAGMA_ARCH "hip")
|
|
set(MAGMA_URL_MD5 "f4fbe46c665819f6ae86d1aa447d07b5")
|
|
endif()
|
|
|
|
message(STATUS "Selected MAGMA architecture: ${MAGMA_ARCH}")
|
|
message(STATUS "Selected MAGMA URL MD5: ${MAGMA_URL_MD5}")
|
|
|
|
set(MAGMA_FILE
|
|
"magma_lnx_${MAGMA_ARCH}_v2.9.0.20250728.tar.gz"
|
|
CACHE STRING "" FORCE)
|
|
set(MAGMA_URL
|
|
"https://paddlepaddledeps.bj.bcebos.com/${MAGMA_FILE}"
|
|
CACHE STRING "" FORCE)
|
|
set(MAGMA_LIB "${MAGMA_LIB_DIR}/libmagma.so")
|
|
elseif(WIN32)
|
|
message("magma do not support windows yet, skip ...")
|
|
else() # MacOS
|
|
message("magma do not support macos or other platform yet, skip ...")
|
|
endif()
|
|
|
|
function(download_magma)
|
|
message(
|
|
STATUS "Downloading ${MAGMA_URL} to ${MAGMA_DOWNLOAD_DIR}/${MAGMA_FILE}")
|
|
# NOTE: If the version is updated, consider emptying the folder; maybe add timeout
|
|
file(
|
|
DOWNLOAD ${MAGMA_URL} ${MAGMA_DOWNLOAD_DIR}/${MAGMA_FILE}
|
|
EXPECTED_MD5 ${MAGMA_URL_MD5}
|
|
STATUS ERR)
|
|
if(ERR EQUAL 0)
|
|
message(STATUS "Download ${MAGMA_FILE} success")
|
|
else()
|
|
message(
|
|
FATAL_ERROR
|
|
"Download failed, error: ${ERR}\n You can try downloading ${MAGMA_FILE} again"
|
|
)
|
|
endif()
|
|
endfunction()
|
|
|
|
# Download and check magma.
|
|
if(EXISTS ${MAGMA_DOWNLOAD_DIR}/${MAGMA_FILE})
|
|
file(MD5 ${MAGMA_DOWNLOAD_DIR}/${MAGMA_FILE} MAGMA_MD5)
|
|
if(NOT MAGMA_MD5 STREQUAL MAGMA_URL_MD5)
|
|
# clean build file
|
|
file(REMOVE_RECURSE ${MAGMA_PREFIX_DIR})
|
|
file(REMOVE_RECURSE ${MAGMA_INSTALL_DIR})
|
|
download_magma()
|
|
endif()
|
|
else()
|
|
download_magma()
|
|
endif()
|
|
|
|
ExternalProject_Add(
|
|
extern_magma
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
URL ${MAGMA_DOWNLOAD_DIR}/${MAGMA_FILE}
|
|
URL_MD5 ${MAGMA_URL_MD5}
|
|
DOWNLOAD_DIR ${MAGMA_DOWNLOAD_DIR}
|
|
SOURCE_DIR ${MAGMA_LIB_DIR}
|
|
PREFIX ${MAGMA_PREFIX_DIR}
|
|
DOWNLOAD_NO_PROGRESS 1
|
|
PATCH_COMMAND ""
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND ""
|
|
BUILD_COMMAND ""
|
|
INSTALL_COMMAND ""
|
|
BUILD_BYPRODUCTS ${MAGMA_LIB})
|
|
|
|
if(WITH_MAGMA)
|
|
add_definitions(-DPADDLE_WITH_MAGMA)
|
|
endif()
|