summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorDaniel Black <daniel.black@au.ibm.com>2016-09-20 10:05:10 +1000
committerDaniel Black <daniel.black@au.ibm.com>2016-09-23 08:33:38 +1000
commit8103f6f2235b58ca09f75efe24d2731895387152 (patch)
tree8fa176d600c9241b1c9964f7d0059b6df7620f3c /cmake
parent26e3117ca9f02cf3dcb424b82e93be8709cc5e91 (diff)
downloadmariadb-git-8103f6f2235b58ca09f75efe24d2731895387152.tar.gz
MDEV-10829: Enable Innodb NUMA interleave
Code was already existing within the innobase/xtradb storage engines however without this cmake code it was never enabled. num.cmake heavily based off work by Annamalai Gurusami <annamalai.gurusami@oracle.com> Signed-off-by: Daniel Black <daniel.black@au.ibm.com>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/numa.cmake38
1 files changed, 38 insertions, 0 deletions
diff --git a/cmake/numa.cmake b/cmake/numa.cmake
new file mode 100644
index 00000000000..d5234a5ef4f
--- /dev/null
+++ b/cmake/numa.cmake
@@ -0,0 +1,38 @@
+MACRO (MYSQL_CHECK_NUMA)
+
+ CHECK_INCLUDE_FILES(numa.h HAVE_NUMA_H)
+ CHECK_INCLUDE_FILES(numaif.h HAVE_NUMAIF_H)
+
+ IF(HAVE_NUMA_H AND HAVE_NUMAIF_H)
+ OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" ON)
+ ELSE()
+ OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" OFF)
+ ENDIF()
+
+ IF(WITH_NUMA AND HAVE_NUMA_H AND HAVE_NUMAIF_H)
+ SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+ SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} numa)
+ CHECK_C_SOURCE_COMPILES(
+ "
+ #include <numa.h>
+ #include <numaif.h>
+ int main()
+ {
+ struct bitmask *all_nodes= numa_all_nodes_ptr;
+ set_mempolicy(MPOL_DEFAULT, 0, 0);
+ return all_nodes != NULL;
+ }"
+ HAVE_LIBNUMA)
+ SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES})
+ ELSE()
+ SET(HAVE_LIBNUMA 0)
+ ENDIF()
+
+ IF(WITH_NUMA AND NOT HAVE_LIBNUMA)
+ # Forget it in cache, abort the build.
+ UNSET(WITH_NUMA CACHE)
+ MESSAGE(FATAL_ERROR "Could not find numa headers/libraries")
+ ENDIF()
+
+ENDMACRO()
+