diff --git a/cmake/utils/FindMACA.cmake b/cmake/utils/FindMACA.cmake index 74b2d1e56fe0..1207e207eb9b 100644 --- a/cmake/utils/FindMACA.cmake +++ b/cmake/utils/FindMACA.cmake @@ -23,20 +23,31 @@ # # - When USE_MACA=ON, use auto search # - When USE_MACA=/path/to/maca-sdk-path, use the sdk +# - When MACA_PATH or MACA_HOME is set, use the env path # # Provide variables: # # - MACA_FOUND +# - MACA_ROOT_DIR # - MACA_INCLUDE_DIRS # - 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(__use_maca "${use_maca}") + unset(MACA_FOUND) + unset(MACA_ROOT_DIR) + unset(MACA_INCLUDE_DIRS) + unset(MACA_MACAMCC_LIBRARY CACHE) + unset(MACA_HCA_LIBRARY CACHE) + unset(MACA_FLASHATTN_LIBRARY CACHE) + + 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}") + elseif(IS_DIRECTORY "$ENV{MACA_HOME}") + set(__maca_sdk "$ENV{MACA_HOME}") elseif(IS_DIRECTORY /opt/maca) set(__maca_sdk /opt/maca) else() @@ -44,16 +55,18 @@ 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_ROOT_DIR "${__maca_sdk}") + set(MACA_INCLUDE_DIRS "${__maca_sdk}/include") + 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) set(MACA_FOUND TRUE) endif() endif(__maca_sdk) if(MACA_FOUND) + message(STATUS "Found MACA_ROOT_DIR=" ${MACA_ROOT_DIR}) 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}) diff --git a/tests/python/cmake/test_find_maca_cmake.py b/tests/python/cmake/test_find_maca_cmake.py new file mode 100644 index 000000000000..708964f185d2 --- /dev/null +++ b/tests/python/cmake/test_find_maca_cmake.py @@ -0,0 +1,46 @@ +import re +import unittest +from pathlib import Path + + +FIND_MACA = Path(__file__).parents[3] / "cmake" / "utils" / "FindMACA.cmake" + + +class FindMACACMakeTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.content = FIND_MACA.read_text(encoding="utf-8") + + def test_search_order_includes_maca_home_after_maca_path(self): + maca_path_pos = self.content.index("$ENV{MACA_PATH}") + maca_home_pos = self.content.index("$ENV{MACA_HOME}") + default_pos = self.content.index("/opt/maca") + + self.assertLess(maca_path_pos, maca_home_pos) + self.assertLess(maca_home_pos, default_pos) + + def test_public_outputs_are_reset_before_search(self): + for variable in [ + "MACA_FOUND", + "MACA_ROOT_DIR", + "MACA_INCLUDE_DIRS", + "MACA_MACAMCC_LIBRARY", + "MACA_HCA_LIBRARY", + "MACA_FLASHATTN_LIBRARY", + ]: + self.assertRegex(self.content, rf"unset\({re.escape(variable)}(?:\s+CACHE)?\)") + + def test_libraries_are_resolved_inside_selected_sdk(self): + for variable in [ + "MACA_MACAMCC_LIBRARY", + "MACA_HCA_LIBRARY", + "MACA_FLASHATTN_LIBRARY", + ]: + self.assertRegex( + self.content, + rf"find_library\({variable} .* PATHS \"?\${{__maca_sdk}}/lib\"? NO_DEFAULT_PATH\)", + ) + + +if __name__ == "__main__": + unittest.main()