mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
CMakeLists.txt (several), make_win_bin_dist:
Aligned client library build and use with the Unix version when it comes to what source to include directly in the builds, and what libraries to link with (bug#30118). Also reviewed, corrected and made more clear when static or dynamic Thread Local Storage is to be used. Some code duplication was removed, and some redundant library usage were removed, reducing the risk of incorrect TLS usage.
This commit is contained in:
@ -14,14 +14,14 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake")
|
||||
|
||||
# Need to set USE_TLS, since __declspec(thread) approach to thread local
|
||||
# storage does not work properly in DLLs.
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS")
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
||||
|
||||
# Note that we don't link with the libraries "strings" or "mysys"
|
||||
# here, instead we recompile the files needed and include them
|
||||
# directly. This means we don't have to worry here about if these
|
||||
# libraries are compiled defining USE_TLS or not. Not that it *should*
|
||||
# have been a problem anyway, they don't use thread local storage.
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/zlib
|
||||
@ -31,8 +31,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/sql
|
||||
${CMAKE_SOURCE_DIR}/strings)
|
||||
|
||||
ADD_LIBRARY(libmysql SHARED dll.c libmysql.def
|
||||
../mysys/array.c ../strings/bchange.c ../strings/bmove.c
|
||||
SET(CLIENT_SOURCES ../mysys/array.c ../strings/bchange.c ../strings/bmove.c
|
||||
../strings/bmove_upp.c ../mysys/charset-def.c ../mysys/charset.c
|
||||
../sql-common/client.c ../strings/ctype-big5.c ../strings/ctype-bin.c
|
||||
../strings/ctype-cp932.c ../strings/ctype-czech.c ../strings/ctype-euc_kr.c
|
||||
@ -41,10 +40,11 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def
|
||||
../strings/ctype-simple.c ../strings/ctype-sjis.c ../strings/ctype-tis620.c
|
||||
../strings/ctype-uca.c ../strings/ctype-ucs2.c ../strings/ctype-ujis.c
|
||||
../strings/ctype-utf8.c ../strings/ctype-win1250ch.c ../strings/ctype.c
|
||||
../mysys/default.c ../libmysql/errmsg.c ../mysys/errors.c
|
||||
../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c
|
||||
../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c
|
||||
../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c
|
||||
../mysys/default.c errmsg.c ../mysys/errors.c
|
||||
../mysys/hash.c ../mysys/my_sleep.c ../mysys/default_modify.c
|
||||
get_password.c ../strings/int2str.c ../strings/is_prefix.c
|
||||
libmysql.c ../mysys/list.c ../strings/llstr.c
|
||||
../strings/longlong2str.c manager.c ../mysys/mf_cache.c
|
||||
../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c
|
||||
../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c
|
||||
../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c
|
||||
@ -67,8 +67,35 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def
|
||||
../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c
|
||||
../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c
|
||||
../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c)
|
||||
ADD_DEPENDENCIES(libmysql dbug vio mysys strings GenError zlib yassl taocrypt)
|
||||
TARGET_LINK_LIBRARIES(libmysql mysys strings wsock32)
|
||||
|
||||
# Need to set USE_TLS for building the DLL, since __declspec(thread)
|
||||
# approach to thread local storage does not work properly in DLLs.
|
||||
#
|
||||
# The static library might be used to form another DLL, as is the case
|
||||
# with the ODBC driver, so it has to be compiled with USE_TLS as well.
|
||||
#
|
||||
# We create a third library without USE_TLS for internal use. We can't
|
||||
# be sure that some client application part of this build doesn't go
|
||||
# beond the documented API, and try access the Thread Local Storage.
|
||||
# The "_notls" means no Tls*() functions used, i.e. "static" TLS.
|
||||
|
||||
ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ${CLIENT_SOURCES})
|
||||
ADD_LIBRARY(mysqlclient STATIC ${CLIENT_SOURCES})
|
||||
ADD_LIBRARY(mysqlclient_notls STATIC ${CLIENT_SOURCES})
|
||||
|
||||
SET_TARGET_PROPERTIES(libmysql mysqlclient PROPERTIES COMPILE_FLAGS "-DUSE_TLS")
|
||||
|
||||
SET(CLIENT_LIB_DEPS yassl taocrypt zlib dbug GenError)
|
||||
SET(CLIENT_LIBS yassl taocrypt zlib debug dbug)
|
||||
|
||||
ADD_DEPENDENCIES(libmysql ${CLIENT_LIB_DEPS})
|
||||
TARGET_LINK_LIBRARIES(libmysql ${CLIENT_LIBS} wsock32)
|
||||
|
||||
ADD_DEPENDENCIES(mysqlclient ${CLIENT_LIB_DEPS})
|
||||
TARGET_LINK_LIBRARIES(mysqlclient ${CLIENT_LIBS})
|
||||
|
||||
ADD_DEPENDENCIES(mysqlclient_notls ${CLIENT_LIB_DEPS})
|
||||
TARGET_LINK_LIBRARIES(mysqlclient_notls ${CLIENT_LIBS})
|
||||
|
||||
ADD_EXECUTABLE(myTest mytest.c)
|
||||
TARGET_LINK_LIBRARIES(myTest libmysql)
|
||||
|
Reference in New Issue
Block a user