@@ -33,6 +33,7 @@ message(STATUS "Pulsar Client version macro: ${PULSAR_CLIENT_VERSION_MACRO}")
3333set (PVM_COMMENT "This is generated from Version.h.in by CMAKE. DO NOT EDIT DIRECTLY" )
3434configure_file (templates/Version .h.in include /pulsar/Version .h @ONLY)
3535
36+ option (LINK_STATIC "Link against static libraries" OFF )
3637if (VCPKG_TRIPLET)
3738 message (STATUS "Use vcpkg, triplet is ${VCPKG_TRIPLET} " )
3839 set (CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR} /vcpkg_installed/${VCPKG_TRIPLET} " )
@@ -44,7 +45,13 @@ if (VCPKG_TRIPLET)
4445 set (ZLIB_ROOT ${VCPKG_DEBUG_ROOT} )
4546 set (OPENSSL_ROOT_DIR ${VCPKG_DEBUG_ROOT} )
4647 endif ()
48+ if (VCPKG_TRIPLET MATCHES ".*-static" )
49+ set (LINK_STATIC ON )
50+ else ()
51+ set (LINK_STATIC OFF )
52+ endif ()
4753endif ()
54+ MESSAGE (STATUS "LINK_STATIC: " ${LINK_STATIC} )
4855
4956find_program (CCACHE_PROGRAM ccache)
5057if (CCACHE_PROGRAM)
@@ -69,9 +76,6 @@ MESSAGE(STATUS "BUILD_WIRESHARK: " ${BUILD_WIRESHARK})
6976option (BUILD_PERF_TOOLS "Build Pulsar CLI perf producer/consumer" OFF )
7077MESSAGE (STATUS "BUILD_PERF_TOOLS: " ${BUILD_PERF_TOOLS} )
7178
72- option (LINK_STATIC "Link against static libraries" OFF )
73- MESSAGE (STATUS "LINK_STATIC: " ${LINK_STATIC} )
74-
7579option (USE_LOG4CXX "Build with Log4cxx support" OFF )
7680MESSAGE (STATUS "USE_LOG4CXX: " ${USE_LOG4CXX} )
7781
@@ -93,7 +97,7 @@ set(CMAKE_C_STANDARD 11)
9397# https://stackoverflow.com/questions/10046114/in-cmake-how-can-i-test-if-the-compiler-is-clang
9498if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
9599 add_definitions (-DWIN32_LEAN_AND_MEAN -DNOGDI -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS)
96- add_compile_options (/wd4244 /wd4267 /wd4018 /wd4715 /wd4251 /wd4275)
100+ add_compile_options (/wd4244 /wd4267 /wd4018 /wd4715 /wd4251 /wd4275 /wd4819 )
97101elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" )
98102 # ?? Don't have this to test with
99103else () # GCC or Clang are mostly compatible:
@@ -168,7 +172,7 @@ if (NOT ZLIB_INCLUDE_DIRS OR NOT ZLIB_LIBRARIES)
168172 message (FATAL_ERROR "Could not find zlib" )
169173endif ()
170174
171- if (LINK_STATIC)
175+ if (LINK_STATIC AND NOT VCPKG_TRIPLET )
172176 find_library (LIB_ZSTD NAMES libzstd.a)
173177 message (STATUS "ZStd: ${LIB_ZSTD} " )
174178 find_library (LIB_SNAPPY NAMES libsnappy.a)
@@ -195,6 +199,29 @@ if (LINK_STATIC)
195199 if (MSVC )
196200 add_definitions (-DCURL_STATICLIB)
197201 endif ()
202+ elseif (LINK_STATIC AND VCPKG_TRIPLET)
203+ find_package (protobuf REQUIRED)
204+ message (STATUS "Found protobuf static library: " ${Protobuf_LIBRARIES} )
205+ find_library (ZLIB_LIBRARIES NAMES zlib z)
206+ if (ZLIB_LIBRARIES)
207+ message (STATUS "Found zlib static library: " ${ZLIB_LIBRARIES} )
208+ else ()
209+ message (FATAL_ERROR "Failed to find zlib static library" )
210+ endif ()
211+ find_library (CURL_LIBRARIES NAMES libcurl)
212+ if (CURL_LIBRARIES)
213+ message (STATUS "Found libcurl: ${CURL_LIBRARIES} " )
214+ else ()
215+ message (FATAL_ERROR "Cannot find libcurl" )
216+ endif ()
217+ find_library (LIB_ZSTD zstd)
218+ if (LIB_ZSTD)
219+ message (STATUS "Found ZSTD library: ${LIB_ZSTD} " )
220+ endif ()
221+ find_library (LIB_SNAPPY NAMES snappy)
222+ if (LIB_SNAPPY)
223+ message (STATUS "Found Snappy library: ${LIB_SNAPPY} " )
224+ endif ()
198225else ()
199226 if (MSVC AND (${CMAKE_BUILD_TYPE} STREQUAL Debug))
200227 find_library (LIB_ZSTD zstdd HINTS "${VCPKG_DEBUG_ROOT} /lib" )
@@ -211,7 +238,7 @@ else()
211238 find_library (LOG4CXX_LIBRARY_PATH log4cxx)
212239 find_path (LOG4CXX_INCLUDE_PATH log4cxx/logger.h)
213240 endif (USE_LOG4CXX)
214- endif (LINK_STATIC )
241+ endif ()
215242
216243if (Boost_MAJOR_VERSION EQUAL 1 AND Boost_MINOR_VERSION LESS 69)
217244 # Boost System does not require linking since 1.69
@@ -220,15 +247,15 @@ if (Boost_MAJOR_VERSION EQUAL 1 AND Boost_MINOR_VERSION LESS 69)
220247endif ()
221248
222249if (MSVC )
223- set (BOOST_COMPONENTS ${BOOST_COMPONENTS} date_time)
250+ set (BOOST_COMPONENTS ${BOOST_COMPONENTS} date_time)
224251endif ()
225252
226253if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
227254 # GCC 4.8.2 implementation of std::regex is buggy
228255 set (BOOST_COMPONENTS ${BOOST_COMPONENTS} regex )
229256 set (CMAKE_CXX_FLAGS " -DPULSAR_USE_BOOST_REGEX" )
230257 MESSAGE (STATUS "Using Boost::Regex" )
231- else ( )
258+ elseif (CMAKE_COMPILER_IS_GNUCC )
232259 MESSAGE (STATUS "Using std::regex" )
233260 # Turn on color error messages and show additional help with errors (only available in GCC v4.9+):
234261 add_compile_options (-fdiagnostics-show-option -fdiagnostics-color)
@@ -295,7 +322,7 @@ include_directories(
295322
296323set (COMMON_LIBS
297324 ${COMMON_LIBS}
298- Threads::Threads
325+ ${CMAKE_THREAD_LIBS_INIT}
299326 ${Boost_REGEX_LIBRARY}
300327 ${Boost_SYSTEM_LIBRARY}
301328 ${Boost_DATE_TIME_LIBRARY}
@@ -307,13 +334,25 @@ set(COMMON_LIBS
307334 ${CMAKE_DL_LIBS}
308335)
309336
310- if (NOT MSVC )
311- set (COMMON_LIBS ${COMMON_LIBS} m)
312- else ()
337+ if (MSVC )
313338 set (COMMON_LIBS
314- ${COMMON_LIBS}
315- wldap32.lib
316- Normaliz.lib)
339+ ${COMMON_LIBS}
340+ ${Boost_DATE_TIME_LIBRARY}
341+ wldap32.lib
342+ Normaliz.lib)
343+ if (LINK_STATIC)
344+ # add external dependencies of libcurl
345+ set (COMMON_LIBS ${COMMON_LIBS} ws2_32.lib crypt32.lib)
346+ # the default compile options have /MD, which cannot be used to build DLLs that link static libraries
347+ string (REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} )
348+ string (REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} )
349+ string (REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
350+ message (STATUS "CMAKE_CXX_FLAGS_DEBUG: " ${CMAKE_CXX_FLAGS_DEBUG} )
351+ message (STATUS "CMAKE_CXX_FLAGS_RELEASE: " ${CMAKE_CXX_FLAGS_RELEASE} )
352+ message (STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO: " ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
353+ endif ()
354+ else ()
355+ set (COMMON_LIBS ${COMMON_LIBS} m)
317356endif ()
318357
319358if (USE_LOG4CXX)
0 commit comments