1MACRO (MYSQL_CHECK_NUMA) 2 3 STRING(TOLOWER "${WITH_NUMA}" WITH_NUMA_LOWERCASE) 4 5 IF(NOT WITH_NUMA) 6 MESSAGE_ONCE(numa "WITH_NUMA=OFF: NUMA memory allocation policy disabled") 7 8 ELSEIF(NOT WITH_NUMA_LOWERCASE STREQUAL "auto" AND NOT WITH_NUMA_LOWERCASE STREQUAL "on") 9 MESSAGE(FATAL_ERROR "Wrong value for WITH_NUMA") 10 11 ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Linux") 12 CHECK_INCLUDE_FILES(numa.h HAVE_NUMA_H) 13 CHECK_INCLUDE_FILES(numaif.h HAVE_NUMAIF_H) 14 15 IF(HAVE_NUMA_H AND HAVE_NUMAIF_H) 16 SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) 17 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} numa) 18 CHECK_C_SOURCE_COMPILES( 19 " 20 #include <numa.h> 21 #include <numaif.h> 22 int main() 23 { 24 struct bitmask *all_nodes= numa_all_nodes_ptr; 25 set_mempolicy(MPOL_DEFAULT, 0, 0); 26 return all_nodes != NULL; 27 }" 28 HAVE_LIBNUMA) 29 SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) 30 IF(HAVE_LIBNUMA) 31 ADD_DEFINITIONS(-DHAVE_LIBNUMA=1) 32 SET(NUMA_LIBRARY "numa") 33 ENDIF() 34 ENDIF() 35 36 ADD_FEATURE_INFO(NUMA HAVE_LIBNUMA "NUMA memory allocation policy") 37 IF(WITH_NUMA_LOWERCASE STREQUAL "auto" AND HAVE_LIBNUMA) 38 MESSAGE_ONCE(numa "WITH_NUMA=AUTO: NUMA memory allocation policy enabled") 39 ELSEIF(WITH_NUMA_LOWERCASE STREQUAL "auto" AND NOT HAVE_LIBNUMA) 40 MESSAGE_ONCE(numa "WITH_NUMA=AUTO: NUMA memory allocation policy disabled") 41 ELSEIF(HAVE_LIBNUMA) 42 MESSAGE_ONCE(numa "WITH_NUMA=ON: NUMA memory allocation policy enabled") 43 ELSE() 44 # Forget it in cache, abort the build. 45 UNSET(WITH_NUMA CACHE) 46 UNSET(NUMA_LIBRARY CACHE) 47 MESSAGE(FATAL_ERROR "WITH_NUMA=ON: Could not find NUMA headers/libraries") 48 ENDIF() 49 50 ENDIF() 51 52ENDMACRO() 53 54