if(NOT __AOTRITON_INCLUDED) set(__AOTRITON_INCLUDED TRUE) set(__AOTRITON_EXTERN_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/aotriton") set(__AOTRITON_INSTALL_DIR "${PROJECT_SOURCE_DIR}/torch") add_library(__caffe2_aotriton INTERFACE) # AOTriton package information from GitHub Release Pages # Replaces .ci/docker/aotriton_version.txt # Note packages information may have versions skipped (due to no ABI breaks) # But they must be listed from lower version to higher version set(__AOTRITON_VER "0.10b") set(__AOTRITON_MANYLINUX_LIST "manylinux_2_28" # rocm6.3 "manylinux_2_28" # rocm6.4 "manylinux_2_28" # rocm7.0 ) set(__AOTRITON_ROCM_LIST "rocm6.3" "rocm6.4" "rocm7.0" ) set(__AOTRITON_CI_COMMIT "6fca155f4deeb8d9529326f7b69f350aeeb93477") set(__AOTRITON_SHA256_LIST "861cd9f7479eec943933c27cb86920247e5b5dd139bc7c1376c81808abb7d7fe" # rocm6.3 "acea7d811a2d3bbe718b6e07fc2a9f739e49eecd60b4b6a36fcb3fe8edf85d78" # rocm6.4 "7e29c325d5bd33ba896ddb106f5d4fc7d715274dca7fe937f724fffa82017838" # rocm7.0 ) set(__AOTRITON_Z "gz") # Note it is INSTALL"ED" if(DEFINED ENV{AOTRITON_INSTALLED_PREFIX}) install(DIRECTORY $ENV{AOTRITON_INSTALLED_PREFIX}/lib $ENV{AOTRITON_INSTALLED_PREFIX}/include DESTINATION ${__AOTRITON_INSTALL_DIR}) set(__AOTRITON_INSTALL_DIR "$ENV{AOTRITON_INSTALLED_PREFIX}") message(STATUS "Using Preinstalled AOTriton at ${__AOTRITON_INSTALL_DIR}") elseif(DEFINED ENV{AOTRITON_INSTALL_FROM_SOURCE}) ExternalProject_Add(aotriton_external GIT_REPOSITORY https://github.com/ROCm/aotriton.git GIT_TAG ${__AOTRITON_CI_COMMIT} PREFIX ${__AOTRITON_EXTERN_PREFIX} INSTALL_DIR ${__AOTRITON_INSTALL_DIR} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${__AOTRITON_INSTALL_DIR} -DAOTRITON_TARGET_ARCH:STRING=${PYTORCH_ROCM_ARCH} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DAOTRITON_NO_PYTHON=ON -DAOTRITON_NO_SHARED=OFF # CONFIGURE_COMMAND "" BUILD_COMMAND "" # No build, install command will repeat the build process due to problems in the build system. BUILD_BYPRODUCTS "${__AOTRITON_INSTALL_DIR}/lib/libaotriton_v2.so" USES_TERMINAL_DOWNLOAD TRUE USES_TERMINAL_CONFIGURE TRUE USES_TERMINAL_BUILD TRUE USES_TERMINAL_INSTALL TRUE # INSTALL_COMMAND ${MAKE_COMMAND} install ) add_dependencies(__caffe2_aotriton aotriton_external) message(STATUS "Using AOTriton compiled from source directory ${__AOTRITON_EXTERN_PREFIX}") else() set(__AOTRITON_SYSTEM_ROCM "${ROCM_VERSION_DEV_MAJOR}.${ROCM_VERSION_DEV_MINOR}") list(GET __AOTRITON_ROCM_LIST 0 __AOTRITON_ROCM_DEFAULT_STR) # Initialize __AOTRITON_ROCM to lowest version, in case all builds > system's ROCM string(SUBSTRING ${__AOTRITON_ROCM_DEFAULT_STR} 4 -1 __AOTRITON_ROCM) foreach(AOTRITON_ROCM_BUILD_STR IN LISTS __AOTRITON_ROCM_LIST) # len("rocm") == 4 string(SUBSTRING ${AOTRITON_ROCM_BUILD_STR} 4 -1 AOTRITON_ROCM_BUILD) # Find the last build that <= system's ROCM # Assume the list is from lower to higher if(AOTRITON_ROCM_BUILD VERSION_GREATER __AOTRITON_SYSTEM_ROCM) break() endif() set(__AOTRITON_ROCM ${AOTRITON_ROCM_BUILD}) endforeach() list(FIND __AOTRITON_ROCM_LIST "rocm${__AOTRITON_ROCM}" __AOTRITON_ROCM_INDEX) list(GET __AOTRITON_SHA256_LIST ${__AOTRITON_ROCM_INDEX} __AOTRITON_SHA256) list(GET __AOTRITON_MANYLINUX_LIST ${__AOTRITON_ROCM_INDEX} __AOTRITON_MANYLINUX) set(__AOTRITON_ARCH ${CMAKE_HOST_SYSTEM_PROCESSOR}) string(CONCAT __AOTRITON_FILE "aotriton-" "${__AOTRITON_VER}-${__AOTRITON_MANYLINUX}" "_${__AOTRITON_ARCH}-rocm${__AOTRITON_ROCM}" "-shared.tar.${__AOTRITON_Z}") string(CONCAT __AOTRITON_URL "https://github.com/ROCm/aotriton/releases/download/" # @lint-ignore "${__AOTRITON_VER}/${__AOTRITON_FILE}") ExternalProject_Add(aotriton_external URL "${__AOTRITON_URL}" URL_HASH SHA256=${__AOTRITON_SHA256} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/aotriton_tarball CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/aotriton_tarball" "${__AOTRITON_INSTALL_DIR}" BUILD_BYPRODUCTS "${__AOTRITON_INSTALL_DIR}/lib/libaotriton_v2.so" ) add_dependencies(__caffe2_aotriton aotriton_external) message(STATUS "Using AOTriton from pre-compiled binary ${__AOTRITON_URL}.\ Set env variables AOTRITON_INSTALL_FROM_SOURCE=1 to build from source.") endif() target_link_libraries(__caffe2_aotriton INTERFACE ${__AOTRITON_INSTALL_DIR}/lib/libaotriton_v2.so) target_include_directories(__caffe2_aotriton INTERFACE ${__AOTRITON_INSTALL_DIR}/include) set(AOTRITON_FOUND TRUE) endif() # __AOTRITON_INCLUDED