# ------------------------------------------------------------------------------------------------------------
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
# CANN Open Software License Agreement Version 2.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
# ------------------------------------------------------------------------------------------------------------
set(DRIVER_DEVICE_NAME "driver-device")
set(DRIVER_DEVICE_SERVER "https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/dependency")
set(DRIVER_DEVICE_VERSION "8.5.0-beta.1")
if(${PRODUCT} STREQUAL ascend950)
set(DRIVER_DEVICE_DATE "20260325000325538")
else()
set(DRIVER_DEVICE_DATE "20260325000325538")
endif()
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
set(DRIVER_DEVICE_INSTALL_DIR ${EXTERN_DEPEND_SOURCE_DIR}/driver_device)
file(MAKE_DIRECTORY "${DRIVER_DEVICE_INSTALL_DIR}")
file(GLOB DRIVER_DEVICE_ARCHIVE_FILE ${CMAKE_BINARY_DIR}/*driver-device*.tar.gz)
if(NOT DRIVER_DEVICE_ARCHIVE_FILE)
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(DRIVER_DEVICE_PLATFORM "x86_64")
elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64")
set(DRIVER_DEVICE_PLATFORM "aarch64")
else()
message(FATAL_ERROR "Unknown platform: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
endif()
if(${PRODUCT} STREQUAL ascend910B)
if(ASCEND910_93_EX)
set(DRIVER_DEVICE_PRODUCT "A3")
else()
set(DRIVER_DEVICE_PRODUCT "910b")
endif()
elseif(${PRODUCT} STREQUAL ascend950)
set(DRIVER_DEVICE_PRODUCT "950")
else()
message(FATAL_ERROR "Unknown COMPUTE_UNIT: ${PRODUCT}")
endif()
if(ENABLE_BUILD_PRODUCT)
set(DRIVER_DEVICE_RELEASE "product")
else()
set(DRIVER_DEVICE_RELEASE "demo")
endif()
if(${PRODUCT} STREQUAL ascend950)
# current only support --demo but need product package
set(DRIVER_DEVICE_RELEASE "product")
endif()
set(DRIVER_DEVICE_FILE "cann-driver-device-${DRIVER_DEVICE_PRODUCT}-${DRIVER_DEVICE_RELEASE}_${DRIVER_DEVICE_VERSION}_linux-${CMAKE_HOST_SYSTEM_PROCESSOR}.tar.gz")
set(DRIVER_DEVICE_URL "${DRIVER_DEVICE_SERVER}/${DRIVER_DEVICE_VERSION}/${DRIVER_DEVICE_DATE}/${DRIVER_DEVICE_PLATFORM}/basic/${DRIVER_DEVICE_FILE}")
message(STATUS "Not find driver-device package, downloading ${DRIVER_DEVICE_NAME} from ${DRIVER_DEVICE_URL}")
include(FetchContent)
FetchContent_Declare(
${DRIVER_DEVICE_NAME}
URL ${DRIVER_DEVICE_URL}
DOWNLOAD_DIR ${EXTERN_DEPEND_DOWNLOAD_DIR}
SOURCE_DIR ${DRIVER_DEVICE_INSTALL_DIR}
)
FetchContent_MakeAvailable(${DRIVER_DEVICE_NAME})
FetchContent_GetProperties(${DRIVER_DEVICE_NAME})
if(NOT ${DRIVER_DEVICE_NAME}_POPULATED)
message(FATAL_ERROR "Failed to download ${DRIVER_DEVICE_NAME} from ${DRIVER_DEVICE_URL}")
endif()
set(DRIVER_DEVICE_ARCHIVE_FILE ${EXTERN_DEPEND_DOWNLOAD_DIR}/${DRIVER_DEVICE_FILE})
add_custom_target(extract_driver_device_pre ALL
COMMAND echo "Extracting driver-device package to ${DRIVER_DEVICE_INSTALL_DIR}."
DEPENDS ${DRIVER_DEVICE_ARCHIVE_FILE}
WORKING_DIRECTORY ${DRIVER_DEVICE_INSTALL_DIR}
)
set(DRV_DEV_ARCHIVE_PREFIX ${DRIVER_DEVICE_INSTALL_DIR}/driver)
else()
message(STATUS "Find driver-device package: ${DRIVER_DEVICE_ARCHIVE_FILE}.")
get_filename_component(DRIVER_DEVICE_ARCHIVE_NAME "${DRIVER_DEVICE_ARCHIVE_FILE}" NAME)
add_custom_target(extract_driver_device_pre ALL
COMMAND echo "Extracting driver-device package to ${DRIVER_DEVICE_INSTALL_DIR}."
COMMAND ${CMAKE_COMMAND} -E copy ${DRIVER_DEVICE_ARCHIVE_FILE} ${DRIVER_DEVICE_INSTALL_DIR}
COMMAND ${CMAKE_COMMAND} -E tar -xf ${DRIVER_DEVICE_INSTALL_DIR}/${DRIVER_DEVICE_ARCHIVE_NAME}
DEPENDS ${DRIVER_DEVICE_ARCHIVE_FILE}
WORKING_DIRECTORY ${DRIVER_DEVICE_INSTALL_DIR}
)
set(DRV_DEV_ARCHIVE_PREFIX ${DRIVER_DEVICE_INSTALL_DIR}/driver/driver)
endif()
function(get_driver_device)
if(${PRODUCT} STREQUAL ascend910B)
add_custom_target(extract_driver_device ALL
COMMAND echo "copying driver-device file to ${CMAKE_BINARY_DIR}."
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/device
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/tools
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/lib64/common
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/script
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/device/* ${CMAKE_BINARY_DIR}/lib/device/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/ascend_check.bin ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/upgrade-tool ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/hccn_tool ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/lib64/common/dcache_lock_mix.o ${CMAKE_BINARY_DIR}/lib/lib64/common/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/lib64/common/libtls_adp.so ${CMAKE_BINARY_DIR}/lib/lib64/common/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/lib64/common/libascend_kms.so ${CMAKE_BINARY_DIR}/lib/lib64/common/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/script/hccn_weak_dict.conf ${CMAKE_BINARY_DIR}/lib/script/
DEPENDS extract_driver_device_pre
WORKING_DIRECTORY ${DRIVER_DEVICE_INSTALL_DIR}
)
elseif(${PRODUCT} STREQUAL ascend950)
add_custom_target(extract_driver_device ALL
COMMAND echo "copying driver-device file to ${CMAKE_BINARY_DIR}."
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/device
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/tools
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/lib64/common
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/script
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/device/* ${CMAKE_BINARY_DIR}/lib/device/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/ascend_check.bin ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/upgrade-tool ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/tools/hccn_tool ${CMAKE_BINARY_DIR}/lib/tools/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/lib64/common/libascend_kms.so ${CMAKE_BINARY_DIR}/lib/lib64/common/
COMMAND ${CMAKE_COMMAND} -E copy ${DRV_DEV_ARCHIVE_PREFIX}/script/hccn_weak_dict.conf ${CMAKE_BINARY_DIR}/lib/script/
DEPENDS extract_driver_device_pre
WORKING_DIRECTORY ${DRIVER_DEVICE_INSTALL_DIR}
)
endif()
if(ENABLE_BUILD_PRODUCT)
include(${CMAKE_SOURCE_DIR}/src/custom/cmake/driver_device_fetch.cmake)
endif()
endfunction()