diff options
-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) |