summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--cmake/FindAIO.cmake35
-rw-r--r--cmake/FindStatic.cmake12
-rw-r--r--cmake/build_configurations/mysql_release.cmake30
-rw-r--r--storage/innobase/innodb.cmake5
-rw-r--r--tpool/CMakeLists.txt6
6 files changed, 57 insertions, 35 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 591920450ea..c97b5f807f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -101,6 +101,10 @@ SET(CPACK_PACKAGE_NAME "MariaDB")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MariaDB: a very fast and robust SQL database server")
SET(CPACK_PACKAGE_URL "http://mariadb.org")
+# option to link libraries statically
+# see MDEV-26265
+OPTION(USE_STATIC_LIBS OFF)
+
IF(BUILD_CONFIG)
INCLUDE(
${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
diff --git a/cmake/FindAIO.cmake b/cmake/FindAIO.cmake
new file mode 100644
index 00000000000..0772d551f52
--- /dev/null
+++ b/cmake/FindAIO.cmake
@@ -0,0 +1,35 @@
+
+SET(AIO_LIBRARY aio)
+
+IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ IF(NOT IGNORE_AIO_CHECK)
+ # Ensure aio is available on Linux (required by InnoDB)
+ CHECK_INCLUDE_FILES(libaio.h HAVE_LIBAIO_H)
+ CHECK_LIBRARY_EXISTS(${AIO_LIBRARY} io_queue_init "" HAVE_LIBAIO)
+ IF(NOT HAVE_LIBAIO_H OR NOT HAVE_LIBAIO)
+ UNSET(HAVE_LIBAIO_H CACHE)
+ UNSET(HAVE_LIBAIO CACHE)
+ MESSAGE(FATAL_ERROR "
+ aio is required on Linux, you need to install the required library:
+
+ Debian/Ubuntu: apt-get install libaio-dev
+ RedHat/Fedora/Oracle Linux: yum install libaio-devel
+ SuSE: zypper install libaio-devel
+
+ If you really do not want it, pass -DIGNORE_AIO_CHECK=ON to cmake.
+ ")
+ ENDIF()
+
+ IF(USE_STATIC_LIBS)
+ FIND_STATIC(AIO_STATIC ${AIO_LIBRARY})
+ IF(AIO_STATIC)
+ SET(AIO_LIBRARY ${AIO_STATIC})
+ ENDIF()
+ ENDIF()
+
+ # Unfortunately, linking shared libmysqld with static aio
+ # does not work, unless we add also dynamic one. This also means
+ # libmysqld.so will depend on libaio.so
+ #SET(LIBMYSQLD_SO_EXTRA_LIBS aio)
+ ENDIF()
+ENDIF()
diff --git a/cmake/FindStatic.cmake b/cmake/FindStatic.cmake
new file mode 100644
index 00000000000..35361c64111
--- /dev/null
+++ b/cmake/FindStatic.cmake
@@ -0,0 +1,12 @@
+MACRO(FIND_STATIC VAR NAME)
+ FIND_LIBRARY(
+ sLIBRARY
+ NAMES lib${NAME}.a
+ )
+ IF(sLIBRARY)
+ MESSAGE(STATUS "* Found static variant for ${NAME}: ${sLIBRARY}")
+ SET(${VAR} ${sLIBRARY})
+ ELSE()
+ MESSAGE(STATUS "Static variant for ${NAME} is not found...")
+ ENDIF()
+ENDMACRO()
diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake
index 97c59eb3ca4..cd132ebafe3 100644
--- a/cmake/build_configurations/mysql_release.cmake
+++ b/cmake/build_configurations/mysql_release.cmake
@@ -19,6 +19,7 @@
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
INCLUDE(CheckTypeSize)
+INCLUDE(FindStatic)
# XXX package_name.cmake uses this too, move it somewhere global
CHECK_TYPE_SIZE("void *" SIZEOF_VOIDP)
@@ -131,6 +132,7 @@ ELSEIF(DEB)
SET(WITH_INNODB_LZO OFF CACHE STRING "")
SET(WITH_ROCKSDB_BZip2 OFF CACHE STRING "")
ELSE()
+ SET(USE_STATIC_LIBS ON)
SET(WITH_SSL bundled CACHE STRING "")
SET(WITH_PCRE bundled CACHE STRING "")
SET(WITH_ZLIB bundled CACHE STRING "")
@@ -160,33 +162,7 @@ ENDIF()
IF(UNIX)
SET(WITH_EXTRA_CHARSETS all CACHE STRING "")
SET(PLUGIN_AUTH_PAM YES CACHE BOOL "")
-
- IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- IF(NOT IGNORE_AIO_CHECK)
- # Ensure aio is available on Linux (required by InnoDB)
- CHECK_INCLUDE_FILES(libaio.h HAVE_LIBAIO_H)
- CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
- IF(NOT HAVE_LIBAIO_H OR NOT HAVE_LIBAIO)
- UNSET(HAVE_LIBAIO_H CACHE)
- UNSET(HAVE_LIBAIO CACHE)
- MESSAGE(FATAL_ERROR "
- aio is required on Linux, you need to install the required library:
-
- Debian/Ubuntu: apt-get install libaio-dev
- RedHat/Fedora/Oracle Linux: yum install libaio-devel
- SuSE: zypper install libaio-devel
-
- If you really do not want it, pass -DIGNORE_AIO_CHECK=ON to cmake.
- ")
- ENDIF()
-
- # Unfortunately, linking shared libmysqld with static aio
- # does not work, unless we add also dynamic one. This also means
- # libmysqld.so will depend on libaio.so
- #SET(LIBMYSQLD_SO_EXTRA_LIBS aio)
- ENDIF()
- ENDIF()
-
+ INCLUDE(FindAIO)
ENDIF()
# Compiler options
diff --git a/storage/innobase/innodb.cmake b/storage/innobase/innodb.cmake
index cd8ba4f04d3..634f127c3a4 100644
--- a/storage/innobase/innodb.cmake
+++ b/storage/innobase/innodb.cmake
@@ -56,12 +56,9 @@ IF(UNIX)
ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1")
- 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)
+ LINK_LIBRARIES(${AIO_LIBRARY})
ENDIF()
IF(HAVE_LIBNUMA)
LINK_LIBRARIES(numa)
diff --git a/tpool/CMakeLists.txt b/tpool/CMakeLists.txt
index 3e3f8e0b42a..952f0ef3bb8 100644
--- a/tpool/CMakeLists.txt
+++ b/tpool/CMakeLists.txt
@@ -6,11 +6,9 @@ ELSE()
ENDIF()
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- 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)
+ LINK_LIBRARIES(${AIO_LIBRARY})
ENDIF()
ENDIF()
@@ -26,4 +24,4 @@ ADD_LIBRARY(tpool STATIC
${EXTRA_SOURCES}
)
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include) \ No newline at end of file
+INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)