main
cmake 50 lines 1.46 KB
Raw
1 include(FetchContent)
2
3 if(DEFINED ENV{TML_FA4_SRC_DIR})
4 set(TML_FA4_SRC_DIR $ENV{TML_FA4_SRC_DIR})
5 endif()
6
7 if(TML_FA4_SRC_DIR)
8 FetchContent_Declare(
9 tml_fa4
10 SOURCE_DIR ${TML_FA4_SRC_DIR}
11 CONFIGURE_COMMAND ""
12 BUILD_COMMAND "")
13 else()
14 FetchContent_Declare(
15 tml_fa4
16 GIT_REPOSITORY https://github.com/vllm-project/tml-fa4.git
17 GIT_TAG 75765e76a9c2c012c1f6ecd64577eb646eb4d303
18 GIT_PROGRESS TRUE
19 CONFIGURE_COMMAND ""
20 BUILD_COMMAND "")
21 endif()
22
23 FetchContent_GetProperties(tml_fa4)
24 if(NOT tml_fa4_POPULATED)
25 FetchContent_Populate(tml_fa4)
26 endif()
27 message(STATUS "tml-fa4 is available at ${tml_fa4_SOURCE_DIR}")
28
29 add_custom_target(tml_fa4)
30
31 # Install into a private namespace so this implementation cannot shadow the
32 # flash_attn package used by vLLM's standard attention backends.
33 install(CODE "
34 file(GLOB_RECURSE TML_FA4_PY_FILES
35 \"${tml_fa4_SOURCE_DIR}/flash_attn/cute/*.py\")
36 foreach(SRC_FILE \${TML_FA4_PY_FILES})
37 file(RELATIVE_PATH REL_PATH
38 \"${tml_fa4_SOURCE_DIR}/flash_attn/cute\" \${SRC_FILE})
39 set(DST_FILE
40 \"\${CMAKE_INSTALL_PREFIX}/vllm/third_party/tml_fa4/\${REL_PATH}\")
41 get_filename_component(DST_DIR \${DST_FILE} DIRECTORY)
42 file(MAKE_DIRECTORY \${DST_DIR})
43 file(READ \${SRC_FILE} FILE_CONTENTS)
44 string(REPLACE
45 \"flash_attn.cute\"
46 \"vllm.third_party.tml_fa4\"
47 FILE_CONTENTS \"\${FILE_CONTENTS}\")
48 file(WRITE \${DST_FILE} \"\${FILE_CONTENTS}\")
49 endforeach()
50 " COMPONENT tml_fa4)