From e87a175b3adcd9e7d25e9f874c2fc640951911e0 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 10 Apr 2024 12:37:06 +0200 Subject: [PATCH] Fix LTO (aka interprocedural optimization) build with MSVC Also, disable MSVC LTO for static client libraries - they won't be usable for end-users. --- cmake/libutils.cmake | 6 ++++++ cmake/mariadb_connector_c.cmake | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index 4c8401971f6..c1293980717 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -370,5 +370,11 @@ ENDFUNCTION() FUNCTION (MAYBE_DISABLE_IPO target) IF(MSVC AND NOT CLANG_CL) SET_TARGET_PROPERTIES(${target} PROPERTIES INTERPROCEDURAL_OPTIMIZATION OFF) + IF(CMAKE_CONFIGURATION_TYPES) + FOREACH(cfg ${CMAKE_CONFIGURATION_TYPES}) + STRING(TOUPPER "${cfg}" cfg_upper) + SET_TARGET_PROPERTIES(${target} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_${cfg_upper} OFF) + ENDFOREACH() + ENDIF() ENDIF() ENDFUNCTION() diff --git a/cmake/mariadb_connector_c.cmake b/cmake/mariadb_connector_c.cmake index a9b103345cd..b4f56597775 100644 --- a/cmake/mariadb_connector_c.cmake +++ b/cmake/mariadb_connector_c.cmake @@ -40,6 +40,13 @@ SET(CLIENT_PLUGIN_PVIO_SOCKET STATIC) MESSAGE("== Configuring MariaDB Connector/C") ADD_SUBDIRECTORY(libmariadb) +IF(MSVC AND TARGET mariadb_obj AND TARGET mariadbclient) + # With MSVC, do not produce LTCG-compiled static client libraries. + # They are not usable by end-users, being tied to exact compiler version + MAYBE_DISABLE_IPO(mariadb_obj) + MAYBE_DISABLE_IPO(mariadbclient) +ENDIF() + IF(UNIX) INSTALL(CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_COMMAND} -E make_directory \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR})