Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 23 additions & 10 deletions cmake/utils/FindMACA.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -23,37 +23,50 @@
#
# - 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()
set(__maca_sdk "")
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})
Expand Down
46 changes: 46 additions & 0 deletions tests/python/cmake/test_find_maca_cmake.py
Original file line number Diff line number Diff line change
@@ -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\)",
)
Comment on lines +39 to +42

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

如果我们为了防止路径中包含空格而在 CMake 中将 ${__maca_sdk}/lib 用双引号括起来(即 "${__maca_sdk}/lib"),当前的测试正则表达式将会匹配失败。

建议将正则表达式修改为允许可选的双引号,以确保测试的健壮性。

Suggested change
self.assertRegex(
self.content,
rf"find_library\({variable} .* PATHS \${{__maca_sdk}}/lib NO_DEFAULT_PATH\)",
)
self.assertRegex(
self.content,
rf"find_library\({variable} .* PATHS \"?\${{__maca_sdk}}/lib\"? NO_DEFAULT_PATH\)",
)



if __name__ == "__main__":
unittest.main()