summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-03-20 16:23:47 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-03-20 16:23:47 +0200
commite8113f7572ef7eab45b7b696429101690caeeed4 (patch)
tree8a49dbb8a5ad672cd5e002726a6a79a1cf799ad7
parent4eeea4e212755408ca963d22faa11c12963c1d0a (diff)
downloadmariadb-git-e8113f7572ef7eab45b7b696429101690caeeed4.tar.gz
CMake cleanup: Make WITH_URING, WITH_PMEM Boolean
The new default values WITH_URING:BOOL=OFF, WITH_PMEM:BOOL=OFF imply that the dependencies are optional. An explicit request WITH_URING=ON or WITH_PMEM=ON will cause the build to fail if the requested dependencies are not available. Last, to prevent a feature to be built in even though the built-time dependencies are available, the following can be used: cmake -DCMAKE_DISABLE_FIND_PACKAGE_URING=1 cmake -DCMAKE_DISABLE_FIND_PACKAGE_PMEM=1 This cleanup was suggested by Vladislav Vaintroub.
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/FindPMEM.cmake9
-rw-r--r--cmake/FindURING.cmake9
-rw-r--r--cmake/pmem.cmake26
-rw-r--r--cmake/systemd.cmake2
-rw-r--r--cmake/uring.cmake25
-rw-r--r--storage/innobase/CMakeLists.txt18
-rw-r--r--storage/innobase/innodb.cmake6
-rw-r--r--tpool/CMakeLists.txt43
9 files changed, 63 insertions, 80 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 13dce3cafc4..a0b540f12d2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -173,8 +173,6 @@ INCLUDE(systemd)
INCLUDE(mysql_add_executable)
INCLUDE(symlinks)
INCLUDE(compile_flags)
-INCLUDE(pmem)
-INCLUDE(uring)
# Handle options
OPTION(DISABLE_SHARED
@@ -395,7 +393,7 @@ MYSQL_CHECK_READLINE()
SET(MALLOC_LIBRARY "system")
CHECK_PCRE()
-CHECK_URING()
+ADD_SUBDIRECTORY(tpool)
CHECK_SYSTEMD()
IF(CMAKE_CROSSCOMPILING)
@@ -448,7 +446,6 @@ ADD_SUBDIRECTORY(client)
ADD_SUBDIRECTORY(extra)
ADD_SUBDIRECTORY(libservices)
ADD_SUBDIRECTORY(sql/share)
-ADD_SUBDIRECTORY(tpool)
IF(NOT WITHOUT_SERVER)
ADD_SUBDIRECTORY(tests)
diff --git a/cmake/FindPMEM.cmake b/cmake/FindPMEM.cmake
new file mode 100644
index 00000000000..d5f0c24364a
--- /dev/null
+++ b/cmake/FindPMEM.cmake
@@ -0,0 +1,9 @@
+find_path(LIBPMEM_INCLUDE_DIR NAMES libpmem.h)
+find_library(LIBPMEM_LIBRARIES NAMES pmem)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ PMEM DEFAULT_MSG
+ LIBPMEM_LIBRARIES LIBPMEM_INCLUDE_DIR)
+
+mark_as_advanced(LIBPMEM_INCLUDE_DIR LIBPMEM_LIBRARIES)
diff --git a/cmake/FindURING.cmake b/cmake/FindURING.cmake
new file mode 100644
index 00000000000..014e9c31478
--- /dev/null
+++ b/cmake/FindURING.cmake
@@ -0,0 +1,9 @@
+find_path(LIBURING_INCLUDE_DIR NAMES liburing.h)
+find_library(LIBURING_LIBRARIES NAMES uring)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ URING DEFAULT_MSG
+ LIBURING_LIBRARIES LIBURING_INCLUDE_DIR)
+
+mark_as_advanced(LIBURING_INCLUDE_DIR LIBURING_LIBRARIES)
diff --git a/cmake/pmem.cmake b/cmake/pmem.cmake
deleted file mode 100644
index 84c00aaed6d..00000000000
--- a/cmake/pmem.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
-INCLUDE(CheckIncludeFiles)
-SET(WITH_PMEM "auto" CACHE STRING "Enable persistent memory features")
-IF(WITH_PMEM STREQUAL "yes" OR WITH_PMEM STREQUAL "auto")
- FIND_LIBRARY(LIBPMEM pmem)
- CHECK_INCLUDE_FILES(libpmem.h HAVE_LIBPMEM_H)
- IF (NOT LIBPMEM)
- IF(WITH_PMEM STREQUAL "yes")
- MESSAGE(FATAL_ERROR "Can't find libpmem")
- ENDIF()
- UNSET(HAVE_LIBPMEM_H CACHE)
- UNSET(LIBPMEM CACHE)
- ELSEIF(NOT HAVE_LIBPMEM_H)
- IF(WITH_PMEM STREQUAL "yes")
- MESSAGE(FATAL_ERROR "Can't find libpmem.h")
- ENDIF()
- UNSET(HAVE_LIBPMEM_H CACHE)
- UNSET(LIBPMEM CACHE)
- ELSE()
- ADD_DEFINITIONS(-DHAVE_PMEM)
- ENDIF()
-ELSEIF(WITH_PMEM STREQUAL "no")
- UNSET(HAVE_LIBPMEM_H CACHE)
- UNSET(LIBPMEM CACHE)
-ELSE()
- MESSAGE(FATAL_ERROR "Invalid value for WITH_PMEM. Must be 'yes', 'no', or 'auto'.")
-ENDIF()
diff --git a/cmake/systemd.cmake b/cmake/systemd.cmake
index 72cb77b4a6a..84d0cba94d9 100644
--- a/cmake/systemd.cmake
+++ b/cmake/systemd.cmake
@@ -49,7 +49,7 @@ MACRO(CHECK_SYSTEMD)
SET(SYSTEMD_EXECSTARTPRE "ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld")
SET(SYSTEMD_EXECSTARTPOST "ExecStartPost=/etc/mysql/debian-start")
ENDIF()
- IF(LIBURING AND HAVE_LIBURING_H AND NOT WITH_URING STREQUAL "no")
+ IF(URING_FOUND)
SET(SYSTEMD_LIMIT "# For liburing and io_uring_setup()
LimitMEMLOCK=524288")
ENDIF()
diff --git a/cmake/uring.cmake b/cmake/uring.cmake
deleted file mode 100644
index a3a045c131b..00000000000
--- a/cmake/uring.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-MACRO(CHECK_URING)
- IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
- INCLUDE(CheckIncludeFiles)
- SET(WITH_URING "auto" CACHE STRING "Enable liburing usage")
- IF(WITH_URING STREQUAL "yes" OR WITH_URING STREQUAL "auto")
- FIND_LIBRARY(LIBURING uring)
- CHECK_INCLUDE_FILES(liburing.h HAVE_LIBURING_H)
- IF (LIBURING AND HAVE_LIBURING_H)
- ADD_DEFINITIONS(-DHAVE_URING)
- LINK_LIBRARIES(uring)
- ELSE()
- IF(WITH_URING STREQUAL "yes")
- MESSAGE(FATAL_ERROR "Requested WITH_URING=yes but liburing was not found")
- ENDIF()
- UNSET(LIBURING CACHE)
- UNSET(HAVE_LIBURING_H CACHE)
- ENDIF()
- ELSEIF(WITH_URING STREQUAL "no")
- UNSET(LIBURING CACHE)
- UNSET(HAVE_LIBURING_H CACHE)
- ELSE()
- MESSAGE(FATAL_ERROR "Invalid value for WITH_URING. Must be 'yes', 'no', or 'auto'.")
- ENDIF()
- ENDIF()
-ENDMACRO()
diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt
index 88d3b886da4..9f60b53a042 100644
--- a/storage/innobase/CMakeLists.txt
+++ b/storage/innobase/CMakeLists.txt
@@ -336,21 +336,33 @@ SET(INNOBASE_SOURCES
ut/ut0vec.cc
ut/ut0wqueue.cc)
+OPTION(WITH_PMEM "Support redo log in persistent memory" OFF)
+FIND_PACKAGE(PMEM)
+IF(PMEM_FOUND)
+ INCLUDE_DIRECTORIES(${LIBPMEM_INCLUDES})
+ ADD_COMPILE_FLAGS(log/log0log.cc COMPILE_FLAGS "-DHAVE_PMEM")
+ SET(PMEM_LIBRARY ${LIBPMEM_LIBRARIES})
+ELSE()
+ IF(WITH_PMEM)
+ MESSAGE(FATAL_ERROR "WITH_PMEM=ON cannot be satisfied")
+ ENDIF()
+ENDIF()
+
MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE
MODULE_OUTPUT_NAME ha_innodb
DEFAULT RECOMPILE_FOR_EMBEDDED
LINK_LIBRARIES
${ZLIB_LIBRARY}
+ ${PMEM_LIBRARY}
${NUMA_LIBRARY}
${LIBSYSTEMD}
- ${LINKER_SCRIPT}
- ${LIBPMEM})
+ ${LINKER_SCRIPT})
IF(NOT TARGET innobase)
RETURN()
ENDIF()
-ADD_DEFINITIONS(${SSL_DEFINES})
+ADD_DEFINITIONS(${SSL_DEFINES} ${TPOOL_DEFINES})
# A GCC bug causes crash when compiling these files on ARM64 with -O1+
# Compile them with -O0 as a workaround.
diff --git a/storage/innobase/innodb.cmake b/storage/innobase/innodb.cmake
index 626de751294..9c57feae3ff 100644
--- a/storage/innobase/innodb.cmake
+++ b/storage/innobase/innodb.cmake
@@ -1,5 +1,5 @@
# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
-# Copyright (c) 2017, 2020, MariaDB Corporation.
+# Copyright (c) 2017, 2021, MariaDB Corporation.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -56,12 +56,12 @@ IF(UNIX)
ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1")
- IF (NOT LIBURING)
+ IF (NOT URING_FOUND)
CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
IF(HAVE_LIBAIO_H AND HAVE_LIBAIO)
- ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1)
+ ADD_DEFINITIONS(-DLINUX_NATIVE_AIO)
LINK_LIBRARIES(aio)
ENDIF()
ENDIF()
diff --git a/tpool/CMakeLists.txt b/tpool/CMakeLists.txt
index b27f2c84938..213cef7b5de 100644
--- a/tpool/CMakeLists.txt
+++ b/tpool/CMakeLists.txt
@@ -1,20 +1,29 @@
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include)
IF(WIN32)
SET(EXTRA_SOURCES tpool_win.cc aio_win.cc)
-ENDIF()
-
-IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBURING)
- SET(EXTRA_SOURCES aio_liburing.cc)
-ENDIF()
-
-IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT LIBURING)
- CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
- CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
- IF(HAVE_LIBAIO_H AND HAVE_LIBAIO)
- ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1)
- LINK_LIBRARIES(aio)
- SET(EXTRA_SOURCES aio_linux.cc)
- ENDIF()
+ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ OPTION(WITH_URING "Require that io_uring be used" OFF)
+ FIND_PACKAGE(URING)
+ IF(URING_FOUND)
+ SET(URING_FOUND ${URING_FOUND} PARENT_SCOPE)
+ SET(TPOOL_DEFINES "-DHAVE_URING" PARENT_SCOPE)
+ ADD_DEFINITIONS(-DHAVE_URING)
+ LINK_LIBRARIES(${LIBURING_LIBRARIES})
+ INCLUDE_DIRECTORIES(${LIBURING_INCLUDE_DIR})
+ SET(EXTRA_SOURCES aio_liburing.cc)
+ ELSE()
+ IF(WITH_URING)
+ MESSAGE(FATAL_ERROR "WITH_URING=ON cannot be satisfied")
+ ENDIF()
+ CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
+ CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
+ IF(HAVE_LIBAIO_H AND HAVE_LIBAIO)
+ SET(TPOOL_DEFINES "-DLINUX_NATIVE_AIO" PARENT_SCOPE)
+ ADD_DEFINITIONS(-DLINUX_NATIVE_AIO)
+ LINK_LIBRARIES(aio)
+ SET(EXTRA_SOURCES aio_linux.cc)
+ ENDIF()
+ ENDIF()
ENDIF()
ADD_LIBRARY(tpool STATIC
@@ -29,8 +38,6 @@ ADD_LIBRARY(tpool STATIC
${EXTRA_SOURCES}
)
-IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBURING)
+IF(URING_FOUND)
ADD_DEPENDENCIES(tpool GenError)
ENDIF()
-
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)