2024-10-18 00:21:04 +08:00
include ( FetchContent )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
2025-08-26 21:04:25 +08:00
set ( CMAKE_CXX_STANDARD 17 )
2024-10-18 00:21:04 +08:00
set ( CMAKE_CXX_EXTENSIONS ON )
2024-04-02 13:07:30 +08:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON )
2025-01-08 05:35:49 -03:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
set ( MACOSX_FOUND TRUE )
endif ( )
2024-04-02 13:07:30 +08:00
#
# Define environment variables for special configurations
#
2025-07-03 20:26:12 +08:00
set ( ENABLE_AVX512BF16 $ENV{ VLLM_CPU_AVX512BF16 } )
set ( ENABLE_AVX512VNNI $ENV{ VLLM_CPU_AVX512VNNI } )
2024-04-02 13:07:30 +08:00
include_directories ( "${CMAKE_SOURCE_DIR}/csrc" )
2025-01-08 05:35:49 -03:00
set ( ENABLE_NUMA TRUE )
2024-04-02 13:07:30 +08:00
#
# Check the compile flags
#
2024-11-26 08:02:39 +05:30
if ( CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" )
2024-11-19 23:04:57 +05:30
list ( APPEND CXX_COMPILE_FLAGS
" - m f 1 6 c "
2024-11-26 08:02:39 +05:30
)
2024-11-19 23:04:57 +05:30
endif ( )
2024-04-02 13:07:30 +08:00
2025-01-08 05:35:49 -03:00
if ( MACOSX_FOUND )
list ( APPEND CXX_COMPILE_FLAGS
" - D V L L M _ C P U _ E X T E N S I O N " )
else ( )
list ( APPEND CXX_COMPILE_FLAGS
" - f o p e n m p "
" - D V L L M _ C P U _ E X T E N S I O N " )
endif ( )
2024-04-02 13:07:30 +08:00
2025-01-08 05:35:49 -03:00
if ( NOT MACOSX_FOUND )
execute_process ( COMMAND cat /proc/cpuinfo
R E S U L T _ V A R I A B L E C P U I N F O _ R E T
O U T P U T _ V A R I A B L E C P U I N F O )
if ( NOT CPUINFO_RET EQUAL 0 )
message ( FATAL_ERROR "Failed to check CPU features via /proc/cpuinfo" )
endif ( )
2024-04-02 13:07:30 +08:00
endif ( )
2025-01-08 05:35:49 -03:00
2024-04-02 13:07:30 +08:00
function ( find_isa CPUINFO TARGET OUT )
string ( FIND ${ CPUINFO } ${ TARGET } ISA_FOUND )
if ( NOT ISA_FOUND EQUAL -1 )
set ( ${ OUT } ON PARENT_SCOPE )
else ( )
set ( ${ OUT } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
2025-07-25 02:53:59 -03:00
function ( check_sysctl TARGET OUT )
execute_process ( COMMAND sysctl -n "${TARGET}"
R E S U L T _ V A R I A B L E S Y S C T L _ R E T
O U T P U T _ V A R I A B L E S Y S C T L _ I N F O
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( SYSCTL_RET EQUAL 0 AND
( S Y S C T L _ I N F O S T R E Q U A L " 1 " O R S Y S C T L _ I N F O G R E A T E R 0 ) )
set ( ${ OUT } ON PARENT_SCOPE )
else ( )
set ( ${ OUT } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
2024-06-18 02:36:10 +08:00
function ( is_avx512_disabled OUT )
set ( DISABLE_AVX512 $ENV{ VLLM_CPU_DISABLE_AVX512 } )
if ( DISABLE_AVX512 AND DISABLE_AVX512 STREQUAL "true" )
set ( ${ OUT } ON PARENT_SCOPE )
else ( )
set ( ${ OUT } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
is_avx512_disabled ( AVX512_DISABLED )
2025-01-08 05:35:49 -03:00
if ( MACOSX_FOUND AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" )
2025-07-25 02:53:59 -03:00
message ( STATUS "Apple Silicon Detected" )
2025-09-04 06:48:25 -03:00
set ( APPLE_SILICON_FOUND TRUE )
2025-07-25 02:53:59 -03:00
set ( ENABLE_NUMA OFF )
check_sysctl ( hw.optional.neon ASIMD_FOUND )
check_sysctl ( hw.optional.arm.FEAT_BF16 ARM_BF16_FOUND )
2025-01-08 05:35:49 -03:00
else ( )
find_isa ( ${ CPUINFO } "avx2" AVX2_FOUND )
find_isa ( ${ CPUINFO } "avx512f" AVX512_FOUND )
2025-06-08 14:47:14 +05:30
find_isa ( ${ CPUINFO } "Power11" POWER11_FOUND )
2025-01-08 05:35:49 -03:00
find_isa ( ${ CPUINFO } "POWER10" POWER10_FOUND )
find_isa ( ${ CPUINFO } "POWER9" POWER9_FOUND )
find_isa ( ${ CPUINFO } "asimd" ASIMD_FOUND ) # Check for ARM NEON support
find_isa ( ${ CPUINFO } "bf16" ARM_BF16_FOUND ) # Check for ARM BF16 support
2025-03-06 22:10:53 +05:30
find_isa ( ${ CPUINFO } "S390" S390_FOUND )
2025-01-08 05:35:49 -03:00
endif ( )
2024-06-18 02:36:10 +08:00
if ( AVX512_FOUND AND NOT AVX512_DISABLED )
2024-04-02 13:07:30 +08:00
list ( APPEND CXX_COMPILE_FLAGS
" - m a v x 5 1 2 f "
" - m a v x 5 1 2 v l "
" - m a v x 5 1 2 b w "
" - m a v x 5 1 2 d q " )
find_isa ( ${ CPUINFO } "avx512_bf16" AVX512BF16_FOUND )
if ( AVX512BF16_FOUND OR ENABLE_AVX512BF16 )
2024-06-09 16:23:30 -04:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
C M A K E _ C X X _ C O M P I L E R _ V E R S I O N V E R S I O N _ G R E A T E R _ E Q U A L 1 2 . 3 )
2024-04-02 13:07:30 +08:00
list ( APPEND CXX_COMPILE_FLAGS "-mavx512bf16" )
2025-07-01 15:25:03 +08:00
set ( ENABLE_AVX512BF16 ON )
2024-04-02 13:07:30 +08:00
else ( )
2025-07-01 15:25:03 +08:00
set ( ENABLE_AVX512BF16 OFF )
2024-04-02 13:07:30 +08:00
message ( WARNING "Disable AVX512-BF16 ISA support, requires gcc/g++ >= 12.3" )
endif ( )
else ( )
2025-07-01 15:25:03 +08:00
set ( ENABLE_AVX512BF16 OFF )
2024-04-02 13:07:30 +08:00
message ( WARNING "Disable AVX512-BF16 ISA support, no avx512_bf16 found in local CPU flags." " If cross-compilation is required, please set env VLLM_CPU_AVX512BF16=1." )
endif ( )
2025-07-01 15:25:03 +08:00
find_isa ( ${ CPUINFO } "avx512_vnni" AVX512VNNI_FOUND )
2025-07-03 20:26:12 +08:00
if ( AVX512VNNI_FOUND OR ENABLE_AVX512VNNI )
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
C M A K E _ C X X _ C O M P I L E R _ V E R S I O N V E R S I O N _ G R E A T E R _ E Q U A L 1 2 . 3 )
list ( APPEND CXX_COMPILE_FLAGS "-mavx512vnni" )
set ( ENABLE_AVX512VNNI ON )
else ( )
set ( ENABLE_AVX512VNNI OFF )
message ( WARNING "Disable AVX512-VNNI ISA support, requires gcc/g++ >= 12.3" )
endif ( )
else ( )
set ( ENABLE_AVX512VNNI OFF )
message ( WARNING "Disable AVX512-VNNI ISA support, no avx512_vnni found in local CPU flags." " If cross-compilation is required, please set env VLLM_CPU_AVX512VNNI=1." )
endif ( )
2024-11-26 08:02:39 +05:30
2024-06-14 07:22:24 +08:00
elseif ( AVX2_FOUND )
list ( APPEND CXX_COMPILE_FLAGS "-mavx2" )
message ( WARNING "vLLM CPU backend using AVX2 ISA" )
2024-11-26 08:02:39 +05:30
2025-06-08 14:47:14 +05:30
elseif ( POWER9_FOUND OR POWER10_FOUND OR POWER11_FOUND )
2024-06-26 17:53:04 -04:00
message ( STATUS "PowerPC detected" )
2025-06-08 14:47:14 +05:30
if ( POWER9_FOUND )
list ( APPEND CXX_COMPILE_FLAGS
" - m v s x "
" - m c p u = p o w e r 9 "
" - m t u n e = p o w e r 9 " )
elseif ( POWER10_FOUND OR POWER11_FOUND )
list ( APPEND CXX_COMPILE_FLAGS
" - m v s x "
" - m c p u = p o w e r 1 0 "
" - m t u n e = p o w e r 1 0 " )
endif ( )
2024-11-26 08:02:39 +05:30
elseif ( ASIMD_FOUND )
message ( STATUS "ARMv8 or later architecture detected" )
if ( ARM_BF16_FOUND )
message ( STATUS "BF16 extension detected" )
set ( MARCH_FLAGS "-march=armv8.2-a+bf16+dotprod+fp16" )
add_compile_definitions ( ARM_BF16_SUPPORT )
else ( )
message ( WARNING "BF16 functionality is not available" )
set ( MARCH_FLAGS "-march=armv8.2-a+dotprod+fp16" )
endif ( )
list ( APPEND CXX_COMPILE_FLAGS ${ MARCH_FLAGS } )
2025-03-06 22:10:53 +05:30
elseif ( S390_FOUND )
message ( STATUS "S390 detected" )
# Check for S390 VXE support
list ( APPEND CXX_COMPILE_FLAGS
" - m v x "
" - m z v e c t o r "
" - m a r c h = n a t i v e "
" - m t u n e = n a t i v e " )
2024-04-02 13:07:30 +08:00
else ( )
2025-03-06 22:10:53 +05:30
message ( FATAL_ERROR "vLLM CPU backend requires AVX512, AVX2, Power9+ ISA, S390X ISA or ARMv8 support." )
2024-04-02 13:07:30 +08:00
endif ( )
2024-10-18 00:21:04 +08:00
#
2025-07-10 21:29:04 +05:30
# Build oneDNN for W8A8 GEMM kernels (only for x86-AVX512 /ARM platforms)
# Flag to enable ACL kernels for AARCH64 platforms
2025-08-21 09:34:24 +08:00
if ( VLLM_BUILD_ACL STREQUAL "ON" )
2025-07-10 21:29:04 +05:30
set ( USE_ACL ON )
else ( )
set ( USE_ACL OFF )
endif ( )
2025-09-04 06:48:25 -03:00
if ( ( AVX512_FOUND AND NOT AVX512_DISABLED ) OR ( ASIMD_FOUND AND NOT APPLE_SILICON_FOUND ) OR POWER9_FOUND OR POWER10_FOUND OR POWER11_FOUND )
2024-10-18 00:21:04 +08:00
FetchContent_Declare (
o n e D N N
G I T _ R E P O S I T O R Y h t t p s : / / g i t h u b . c o m / o n e a p i - s r c / o n e D N N . g i t
2025-08-21 09:34:24 +08:00
G I T _ T A G v 3 . 9
2024-10-18 00:21:04 +08:00
G I T _ P R O G R E S S T R U E
G I T _ S H A L L O W T R U E
)
2025-07-10 21:29:04 +05:30
if ( USE_ACL )
find_library ( ARM_COMPUTE_LIBRARY NAMES arm_compute PATHS $ENV{ ACL_ROOT_DIR } /build/ )
if ( NOT ARM_COMPUTE_LIBRARY )
message ( FATAL_ERROR "Could not find ARM Compute Library: please set ACL_ROOT_DIR" )
endif ( )
set ( ONEDNN_AARCH64_USE_ACL "ON" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-rpath,$ENV{ACL_ROOT_DIR}/build/" )
2025-08-21 09:34:24 +08:00
endif ( )
2025-07-10 21:29:04 +05:30
2024-10-18 00:21:04 +08:00
set ( ONEDNN_LIBRARY_TYPE "STATIC" )
set ( ONEDNN_BUILD_DOC "OFF" )
set ( ONEDNN_BUILD_EXAMPLES "OFF" )
set ( ONEDNN_BUILD_TESTS "OFF" )
set ( ONEDNN_ENABLE_WORKLOAD "INFERENCE" )
set ( ONEDNN_ENABLE_PRIMITIVE "MATMUL;REORDER" )
set ( ONEDNN_BUILD_GRAPH "OFF" )
set ( ONEDNN_ENABLE_JIT_PROFILING "OFF" )
set ( ONEDNN_ENABLE_ITT_TASKS "OFF" )
set ( ONEDNN_ENABLE_MAX_CPU_ISA "OFF" )
set ( ONEDNN_ENABLE_CPU_ISA_HINTS "OFF" )
2025-08-21 09:34:24 +08:00
set ( ONEDNN_VERBOSE "OFF" )
2024-10-18 00:21:04 +08:00
set ( CMAKE_POLICY_DEFAULT_CMP0077 NEW )
FetchContent_MakeAvailable ( oneDNN )
2025-08-21 09:34:24 +08:00
add_library ( dnnl_ext OBJECT "csrc/cpu/dnnl_helper.cpp" )
target_include_directories (
d n n l _ e x t
P U B L I C $ { o n e D N N _ S O U R C E _ D I R } / i n c l u d e
P U B L I C $ { o n e D N N _ B I N A R Y _ D I R } / i n c l u d e
P R I V A T E $ { o n e D N N _ S O U R C E _ D I R } / s r c
2025-05-08 11:05:03 +05:30
)
2025-08-21 09:34:24 +08:00
target_link_libraries ( dnnl_ext dnnl )
target_compile_options ( dnnl_ext PRIVATE ${ CXX_COMPILE_FLAGS } -fPIC )
list ( APPEND LIBS dnnl_ext )
set ( USE_ONEDNN ON )
else ( )
set ( USE_ONEDNN OFF )
2024-10-18 00:21:04 +08:00
endif ( )
2024-04-02 13:07:30 +08:00
message ( STATUS "CPU extension compile flags: ${CXX_COMPILE_FLAGS}" )
2025-01-08 05:35:49 -03:00
if ( ENABLE_NUMA )
list ( APPEND LIBS numa )
else ( )
message ( STATUS "NUMA is disabled" )
add_compile_definitions ( -DVLLM_NUMA_DISABLED )
endif ( )
2024-10-04 22:54:42 +05:30
2024-04-02 13:07:30 +08:00
#
# _C extension
#
set ( VLLM_EXT_SRC
" c s r c / c p u / a c t i v a t i o n . c p p "
" c s r c / c p u / a t t e n t i o n . c p p "
" c s r c / c p u / c a c h e . c p p "
2024-07-27 04:50:10 +08:00
" c s r c / c p u / u t i l s . c p p "
2024-04-02 13:07:30 +08:00
" c s r c / c p u / l a y e r n o r m . c p p "
2025-03-25 17:34:59 +08:00
" c s r c / c p u / m l a _ d e c o d e . c p p "
2024-04-02 13:07:30 +08:00
" c s r c / c p u / p o s _ e n c o d i n g . c p p "
2024-06-09 16:23:30 -04:00
" c s r c / c p u / t o r c h _ b i n d i n g s . c p p " )
2024-04-02 13:07:30 +08:00
2024-09-12 00:46:46 +08:00
if ( AVX512_FOUND AND NOT AVX512_DISABLED )
set ( VLLM_EXT_SRC
2025-04-02 22:46:47 +08:00
" c s r c / c p u / s h m . c p p "
2024-09-12 00:46:46 +08:00
$ { V L L M _ E X T _ S R C } )
2025-07-01 15:25:03 +08:00
if ( ENABLE_AVX512BF16 AND ENABLE_AVX512VNNI )
set ( VLLM_EXT_SRC
" c s r c / c p u / s g l - k e r n e l s / g e m m . c p p "
" c s r c / c p u / s g l - k e r n e l s / g e m m _ i n t 8 . c p p "
" c s r c / c p u / s g l - k e r n e l s / g e m m _ f p 8 . c p p "
" c s r c / c p u / s g l - k e r n e l s / m o e . c p p "
" c s r c / c p u / s g l - k e r n e l s / m o e _ i n t 8 . c p p "
" c s r c / c p u / s g l - k e r n e l s / m o e _ f p 8 . c p p "
$ { V L L M _ E X T _ S R C } )
add_compile_definitions ( -DCPU_CAPABILITY_AVX512 )
endif ( )
2024-09-12 00:46:46 +08:00
endif ( )
2025-08-21 09:34:24 +08:00
if ( USE_ONEDNN )
2025-07-10 21:29:04 +05:30
set ( VLLM_EXT_SRC
2025-08-21 09:34:24 +08:00
" c s r c / c p u / d n n l _ k e r n e l s . c p p "
2025-07-10 21:29:04 +05:30
$ { V L L M _ E X T _ S R C } )
endif ( )
2024-09-12 00:46:46 +08:00
2025-07-03 20:26:12 +08:00
message ( STATUS "CPU extension source files: ${VLLM_EXT_SRC}" )
2024-09-12 00:46:46 +08:00
#
# Define extension targets
#
2024-04-02 13:07:30 +08:00
define_gpu_extension_target (
_ C
D E S T I N A T I O N v l l m
L A N G U A G E C X X
S O U R C E S $ { V L L M _ E X T _ S R C }
2024-07-27 04:50:10 +08:00
L I B R A R I E S $ { L I B S }
2024-04-02 13:07:30 +08:00
C O M P I L E _ F L A G S $ { C X X _ C O M P I L E _ F L A G S }
2024-06-09 16:23:30 -04:00
U S E _ S A B I 3
W I T H _ S O A B I
2024-04-02 13:07:30 +08:00
)
2025-05-08 11:05:03 +05:30
message ( STATUS "Enabling C extension." )