diff --git a/cmake/utils/FindMACA.cmake b/cmake/utils/FindMACA.cmake index 74b2d1e56fe0..5d5aef0bfcc1 100644 --- a/cmake/utils/FindMACA.cmake +++ b/cmake/utils/FindMACA.cmake @@ -31,12 +31,18 @@ # - MACA_MACAMCC_LIBRARY macro(find_maca use_maca) - set(__use_maca ${use_maca}) - if(IS_DIRECTORY ${__use_maca}) - set(__maca_sdk ${__use_maca}) - message(STATUS "Custom MACA SDK PATH=" ${__use_maca}) - elseif(IS_DIRECTORY $ENV{MACA_PATH}) - set(__maca_sdk $ENV{MACA_PATH}) + set(MACA_FOUND FALSE) + set(MACA_INCLUDE_DIRS "") + set(MACA_MACAMCC_LIBRARY "") + set(MACA_HCA_LIBRARY "") + set(MACA_FLASHATTN_LIBRARY "") + + set(__use_maca "${use_maca}") + if(IS_DIRECTORY "${__use_maca}") + set(__maca_sdk "${__use_maca}") + message(STATUS "Custom MACA SDK PATH=${__use_maca}") + elseif(DEFINED ENV{MACA_PATH} AND IS_DIRECTORY "$ENV{MACA_PATH}") + set(__maca_sdk "$ENV{MACA_PATH}") elseif(IS_DIRECTORY /opt/maca) set(__maca_sdk /opt/maca) else() @@ -44,18 +50,29 @@ macro(find_maca use_maca) endif() if(__maca_sdk) - set(MACA_INCLUDE_DIRS ${__maca_sdk}/include) - find_library(MACA_MACAMCC_LIBRARY mcruntime ${__maca_sdk}/lib) - find_library(MACA_HCA_LIBRARY mxc-runtime64 ${__maca_sdk}/lib) - find_library(MACA_FLASHATTN_LIBRARY mcFlashAttn ${__maca_sdk}/lib) + set(MACA_INCLUDE_DIRS "${__maca_sdk}/include") + unset(MACA_MACAMCC_LIBRARY CACHE) + unset(MACA_HCA_LIBRARY CACHE) + unset(MACA_FLASHATTN_LIBRARY CACHE) + find_library(MACA_MACAMCC_LIBRARY mcruntime PATHS "${__maca_sdk}/lib" NO_DEFAULT_PATH) + find_library(MACA_HCA_LIBRARY mxc-runtime64 PATHS "${__maca_sdk}/lib" NO_DEFAULT_PATH) + find_library(MACA_FLASHATTN_LIBRARY mcFlashAttn PATHS "${__maca_sdk}/lib" NO_DEFAULT_PATH) - if(MACA_MACAMCC_LIBRARY) + if(IS_DIRECTORY "${MACA_INCLUDE_DIRS}" AND MACA_MACAMCC_LIBRARY) set(MACA_FOUND TRUE) + else() + message(STATUS "MACA SDK candidate did not pass validation: ${__maca_sdk}") + message(STATUS "Expected MACA include directory: ${MACA_INCLUDE_DIRS}") + message(STATUS "Expected MACA runtime library mcruntime under: ${__maca_sdk}/lib") + set(MACA_INCLUDE_DIRS "") + set(MACA_MACAMCC_LIBRARY "") + set(MACA_HCA_LIBRARY "") + set(MACA_FLASHATTN_LIBRARY "") endif() endif(__maca_sdk) if(MACA_FOUND) - message(STATUS "Found MACA_INCLUDE_DIRS=" ${MACA_INCLUDE_DIRS}) - message(STATUS "Found MACA_MACAMCC_LIBRARY=" ${MACA_MACAMCC_LIBRARY}) - message(STATUS "Found MACA_FLASHATTN_LIBRARY=" ${MACA_FLASHATTN_LIBRARY}) + message(STATUS "Found MACA_INCLUDE_DIRS=${MACA_INCLUDE_DIRS}") + message(STATUS "Found MACA_MACAMCC_LIBRARY=${MACA_MACAMCC_LIBRARY}") + message(STATUS "Found MACA_FLASHATTN_LIBRARY=${MACA_FLASHATTN_LIBRARY}") endif(MACA_FOUND) endmacro(find_maca) diff --git a/tests/scripts/cmake/test_find_maca_no_stale_state.cmake b/tests/scripts/cmake/test_find_maca_no_stale_state.cmake new file mode 100644 index 000000000000..1027d926a4a2 --- /dev/null +++ b/tests/scripts/cmake/test_find_maca_no_stale_state.cmake @@ -0,0 +1,19 @@ +if(NOT TVM_SOURCE_DIR) + get_filename_component(TVM_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) +endif() + +include("${TVM_SOURCE_DIR}/cmake/utils/FindMACA.cmake") + +set(MACA_FOUND TRUE) +set(MACA_INCLUDE_DIRS "/stale/include") +set(MACA_MACAMCC_LIBRARY "/stale/libmcruntime.so") + +find_maca("${CMAKE_CURRENT_LIST_DIR}/does-not-exist") + +if(MACA_FOUND) + message(FATAL_ERROR "find_maca must clear stale MACA_FOUND when no SDK is found") +endif() + +if(MACA_INCLUDE_DIRS OR MACA_MACAMCC_LIBRARY) + message(FATAL_ERROR "find_maca must clear stale MACA include and library values") +endif()