diff options
author | Alexey Bychko <alexey.bychko@mariadb.com> | 2021-09-17 14:35:15 +0700 |
---|---|---|
committer | Alexey Bychko <alexey.bychko@mariadb.com> | 2021-09-17 15:32:34 +0700 |
commit | 4b622011127825f541eaceb3ee1c5ae25d022f42 (patch) | |
tree | 04a3181c3b06f1fa5f43aeb3798197052692c188 | |
parent | c430aa72abbdccb1ece7f0d65b49a6b48e7c5ba7 (diff) | |
download | mariadb-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.txt | 4 | ||||
-rw-r--r-- | cmake/FindAIO.cmake | 35 | ||||
-rw-r--r-- | cmake/FindStatic.cmake | 12 | ||||
-rw-r--r-- | cmake/build_configurations/mysql_release.cmake | 30 | ||||
-rw-r--r-- | storage/innobase/innodb.cmake | 5 | ||||
-rw-r--r-- | tpool/CMakeLists.txt | 6 |
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) |