@@ -769,6 +769,99 @@ if (LLAMA_CPU_HBM)
769
769
target_link_libraries (ggml PUBLIC memkind)
770
770
endif ()
771
771
772
+ if (LLAMA_CANN)
773
+ if ("cann${CANN_INSTALL_DIR} " STREQUAL "cann" AND DEFINED ENV{ASCEND_TOOLKIT_HOME})
774
+ set (CANN_INSTALL_DIR $ENV{ASCEND_TOOLKIT_HOME} )
775
+ message (STATUS "CANN: updated CANN_INSTALL_DIR from ASCEND_TOOLKIT_HOME=$ENV{ASCEND_TOOLKIT_HOME} " )
776
+ endif ()
777
+
778
+ if (CANN_INSTALL_DIR)
779
+ # Only Support Linux.
780
+ if (LLAMA_CANN)
781
+ if (NOT UNIX )
782
+ set (LLAMA_CANN OFF )
783
+ message (WARNING "CANN: CANN toolkit supports unix but not ${CMAKE_SYSTEM_NAME} . Turning off LLAMA_CANN" )
784
+ endif ()
785
+ endif ()
786
+
787
+ # Supported platforms: x86-64, arm64
788
+ if (LLAMA_CANN)
789
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" )
790
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64" )
791
+ else ()
792
+ set (LLAMA_CANN OFF )
793
+ message (WARNING "CANN: CANN toolkit supports x86-64 and arm64 but not ${CMAKE_SYSTEM_PROCESSOR} . Turning off LLAMA_CANN" )
794
+ endif ()
795
+ endif ()
796
+
797
+ # Set headers
798
+ set (CANN_INCLUDE_DIRS "${CANN_INSTALL_DIR} /include" "${CANN_INSTALL_DIR} /include/aclnn" )
799
+ # Find libs
800
+ set (CANN_LIBRARIES "" )
801
+ # TODO: optimize find libs.
802
+ # * libascendcl.so
803
+ if (LLAMA_CANN)
804
+ set (lib_dir "${CANN_INSTALL_DIR} /acllib/lib64" )
805
+ find_library (found_lib_ascendcl NAMES ascendcl PATHS ${lib_dir} NO_DEFAULT_PATH)
806
+ if (found_lib_ascendcl)
807
+ set (lib_ascendcl ${found_lib_ascendcl} )
808
+ list (APPEND CANN_LIBRARIES ${lib_ascendcl} )
809
+ message (STATUS "CANN: libascendcl.so is found at ${lib_dir} " )
810
+ else ()
811
+ set (LLAMA_CANN OFF )
812
+ message (WARNING "CANN: Missing libascendcl.so. Turning off LLAMA_CANN" )
813
+ endif ()
814
+ endif ()
815
+
816
+ # * libnnopbase.so
817
+ if (LLAMA_CANN)
818
+ set (lib_dir "${CANN_INSTALL_DIR} /acllib/lib64" )
819
+ find_library (found_lib_nnopbase NAMES nnopbase PATHS ${lib_dir} NO_DEFAULT_PATH)
820
+ if (found_lib_nnopbase)
821
+ set (lib_nnopbase ${found_lib_nnopbase} )
822
+ list (APPEND CANN_LIBRARIES ${lib_nnopbase} )
823
+ message (STATUS "CANN: libnnopbase.so is found at ${lib_dir} " )
824
+ else ()
825
+ set (LLAMA_CANN OFF )
826
+ message (WARNING "CANN: Missing libnnopbase.so. Turning off LLAMA_CANN" )
827
+ endif ()
828
+ endif ()
829
+
830
+ # * libopapi.so
831
+ if (LLAMA_CANN)
832
+ set (lib_dir "${CANN_INSTALL_DIR} /lib64" )
833
+ find_library (found_lib_opapi NAMES opapi PATHS ${lib_dir} NO_DEFAULT_PATH)
834
+ if (found_lib_opapi)
835
+ set (lib_opapi ${found_lib_opapi} )
836
+ list (APPEND CANN_LIBRARIES ${lib_opapi} )
837
+ message (STATUS "CANN: libopapi.so is found at ${lib_dir} " )
838
+ else ()
839
+ set (LLAMA_CANN OFF )
840
+ message (WARNING "CANN: Missing libopapi.so. Turning off LLAMA_CANN" )
841
+ endif ()
842
+ endif ()
843
+
844
+ # Set headers and libs
845
+ if (LLAMA_CANN)
846
+ message (STATUS "CANN: CANN_INCLUDE_DIRS = ${CANN_INCLUDE_DIRS} " )
847
+ message (STATUS "CANN: CANN_LIBRARIES = ${CANN_LIBRARIES} " )
848
+ set (GGML_HEADERS_CANN ggml-cann.h)
849
+ file (GLOB GGML_SOURCES_CUDA "ggml-cann/*.cpp" )
850
+ list (APPEND GGML_SOURCES_CANN "ggml-cann.cpp" )
851
+ set (LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${CANN_LIBRARIES} )
852
+ set (LLAMA_EXTRA_INCLUDES ${LLAMA_EXTRA_INCLUDES} ${CANN_INCLUDE_DIRS} )
853
+ add_compile_definitions (GGML_USE_CANN)
854
+ endif ()
855
+ else ()
856
+ set (LLAMA_CANN OFF )
857
+ message (WARNING "CANN: Can't find CANN_INSTALL_DIR, do you forget to source set_var.sh. Turning off LLAMA_CANN" )
858
+ endif ()
859
+
860
+ if (NOT LLAMA_CANN)
861
+ message (WARNING "CANN: LLAMA_CANN is turned OFF, see above for details." )
862
+ endif ()
863
+ endif ()
864
+
772
865
if (LLAMA_PERF)
773
866
add_compile_definitions (GGML_PERF)
774
867
endif ()
@@ -1147,6 +1240,7 @@ add_library(ggml OBJECT
1147
1240
${GGML_SOURCES_KOMPUTE} ${GGML_HEADERS_KOMPUTE}
1148
1241
${GGML_SOURCES_VULKAN} ${GGML_HEADERS_VULKAN}
1149
1242
${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM}
1243
+ ${GGML_SOURCES_CANN} ${GGML_HEADERS_CANN}
1150
1244
)
1151
1245
1152
1246
target_include_directories (ggml PUBLIC . ${LLAMA_EXTRA_INCLUDES} )
0 commit comments