summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Bychko <alexey.bychko@mariadb.com>2021-09-17 14:35:15 +0700
committerAlexey Bychko <alexey.bychko@mariadb.com>2021-09-17 15:32:34 +0700
commit4b622011127825f541eaceb3ee1c5ae25d022f42 (patch)
tree04a3181c3b06f1fa5f43aeb3798197052692c188
parentc430aa72abbdccb1ece7f0d65b49a6b48e7c5ba7 (diff)
downloadmariadb-git-abychko-10.5-MDEV-26265.tar.gz
MDEV-26265 bintars depend on dynamic librariesabychko-10.5-MDEV-26265
added macros to find static libraries. for most libraries name is the same for static and dynamic versions. if static lib name is different (like jemalloc with position independent code) - name of static library may be specified directly without calling macro
-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)