@@ -8,7 +8,7 @@ set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
88# Fluent Bit Version
99set (FLB_VERSION_MAJOR 4)
1010set (FLB_VERSION_MINOR 0)
11- set (FLB_VERSION_PATCH 2 )
11+ set (FLB_VERSION_PATCH 3 )
1212set (FLB_VERSION_STR "${FLB_VERSION_MAJOR} .${FLB_VERSION_MINOR} .${FLB_VERSION_PATCH} " )
1313
1414set (CMAKE_POSITION_INDEPENDENT_CODE ON )
@@ -67,9 +67,16 @@ if (MSVC)
6767 # /wd4100 .. C4100 (unreferenced formal parameter)
6868 # /wd5045 .. C5045 (Spectre mitigation)
6969 #
70+ # Restore /OPT:REF after setting /Debug, enable /OPT:ICF for 64-bit
71+ # builds per Microsoft recommended best practices.
7072 set (CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS /DNDEBUG /O2 /Zi /wd4100 /wd4711 /wd5045" )
71- set (CMAKE_EXE_LINKER_FLAGS "/Debug /INCREMENTAL:NO" )
73+ set (CMAKE_EXE_LINKER_FLAGS "/DEBUG /OPT:REF /INCREMENTAL:NO" )
74+ set (CMAKE_SHARED_LINKER_FLAGS "/DEBUG /OPT:REF /INCREMENTAL:NO" )
7275 set (CMAKE_BUILD_TYPE None)
76+ if (CMAKE_SIZEOF_VOID_P EQUAL 8)
77+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:ICF" )
78+ set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:ICF" )
79+ endif ()
7380
7481 # Use add_compile_options() to set /MT since Visual Studio
7582 # Generator does not notice /MT in CMAKE_C_FLAGS.
@@ -120,6 +127,19 @@ include(cmake/platform_feature_checks.cmake)
120127set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake/sanitizers-cmake/cmake" ${CMAKE_MODULE_PATH} )
121128find_package (Sanitizers)
122129
130+ # Check for CXX support
131+ include (CheckLanguage)
132+ check_language(CXX)
133+
134+ # Enable CXX features if CXX is available
135+ if (CMAKE_CXX_COMPILER)
136+ message (STATUS "CXX compiler found, enable simdutf." )
137+ set (FLB_USE_SIMDUTF Yes )
138+ else ()
139+ message (STATUS "CXX compiler not found, disable simdutf." )
140+ set (FLB_USE_SIMDUTF No )
141+ endif ()
142+
123143# Output paths
124144set (FLB_ROOT "${CMAKE_CURRENT_SOURCE_DIR} " )
125145set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /bin" )
@@ -139,7 +159,7 @@ option(FLB_COVERAGE "Build with code-coverage" No)
139159option (FLB_JEMALLOC "Build with Jemalloc support" No )
140160option (FLB_REGEX "Build with Regex support" Yes )
141161option (FLB_UTF8_ENCODER "Build with UTF8 encoding support" Yes )
142- option (FLB_UNICODE_ENCODER "Build with Unicode (UTF-16LE, UTF-16BE) encoding support" Yes )
162+ option (FLB_UNICODE_ENCODER "Build with Unicode (UTF-16LE, UTF-16BE) encoding support" ${FLB_USE_SIMDUTF} )
143163option (FLB_PARSER "Build with Parser support" Yes )
144164option (FLB_TLS "Build with SSL/TLS support" Yes )
145165option (FLB_BINARY "Build executable binary" Yes )
@@ -236,7 +256,10 @@ option(FLB_PREFER_SYSTEM_LIB_CARES "Prefer the libcares system library"
236256option (FLB_PREFER_SYSTEM_LIB_JEMALLOC "Prefer the libjemalloc system library" ${FLB_PREFER_SYSTEM_LIBS} )
237257option (FLB_PREFER_SYSTEM_LIB_KAFKA "Prefer the libkafka system library" ${FLB_PREFER_SYSTEM_LIBS} )
238258option (FLB_PREFER_SYSTEM_LIB_LUAJIT "Prefer the libluajit system library" ${FLB_PREFER_SYSTEM_LIBS} )
259+ option (FLB_PREFER_SYSTEM_LIB_MSGPACK "Prefer the libmsgpack system library" ${FLB_PREFER_SYSTEM_LIBS} )
239260option (FLB_PREFER_SYSTEM_LIB_NGHTTP2 "Prefer the libnghttp2 system library" ${FLB_PREFER_SYSTEM_LIBS} )
261+ option (FLB_PREFER_SYSTEM_LIB_SQLITE "Prefer the libsqlite3 system library" ${FLB_PREFER_SYSTEM_LIBS} )
262+ option (FLB_PREFER_SYSTEM_LIB_ZSTD "Prefer the libzstd system library" ${FLB_PREFER_SYSTEM_LIBS} )
240263
241264# Enable all features
242265if (FLB_ALL)
@@ -518,11 +541,16 @@ FLB_OPTION(FLUENT_PROTO_PROFILES ON)
518541add_subdirectory (${FLB_PATH_LIB_FLUENT_OTEL} EXCLUDE_FROM_ALL )
519542
520543# MsgPack options
521- option (MSGPACK_ENABLE_CXX OFF )
522- option (MSGPACK_ENABLE_SHARED OFF )
523- option (MSGPACK_BUILD_TESTS OFF )
524- option (MSGPACK_BUILD_EXAMPLES OFF )
525- add_subdirectory (${FLB_PATH_LIB_MSGPACK} EXCLUDE_FROM_ALL )
544+ if (FLB_PREFER_SYSTEM_LIB_MSGPACK)
545+ find_package (PkgConfig)
546+ pkg_check_modules(MSGPACK msgpack>=4.0.0)
547+ endif ()
548+ if (MSGPACK_FOUND)
549+ include_directories (${MSGPACK_INCLUDE_DIRS} )
550+ link_directories (${MSGPACK_LIBRARY_DIRS} )
551+ else ()
552+ include (cmake/msgpack.cmake)
553+ endif ()
526554
527555# MPack
528556add_definitions (-DMPACK_EXTENSIONS=1)
@@ -532,13 +560,16 @@ add_subdirectory(${FLB_PATH_LIB_MPACK} EXCLUDE_FROM_ALL)
532560add_subdirectory (${FLB_PATH_LIB_MINIZ} EXCLUDE_FROM_ALL )
533561
534562# Zstd (zstd)
535- set (ZSTD_BUILD_STATIC ON )
536- set (ZSTD_BUILD_SHARED OFF )
537- set (ZSTD_BUILD_COMPRESSION ON )
538- set (ZSTD_BUILD_DECOMPRESSION ON )
539- set (ZSTD_BUILD_DICTBUILDER OFF )
540- set (ZSTD_BUILD_DEPRECATED OFF )
541- add_subdirectory (${FLB_PATH_LIB_ZSTD} /build /cmake EXCLUDE_FROM_ALL )
563+ if (FLB_PREFER_SYSTEM_LIB_ZSTD)
564+ find_package (PkgConfig)
565+ pkg_check_modules(LIBZSTD libzstd>=1.4.8)
566+ endif ()
567+ if (LIBZSTD_FOUND)
568+ include_directories (${LIBZSTD_INCLUDE_DIRS} )
569+ link_directories (${LIBZSTD_LIBRARY_DIRS} )
570+ else ()
571+ include (cmake/zstd.cmake)
572+ endif ()
542573
543574# ring buffer library
544575add_subdirectory (${FLB_PATH_LIB_RING_BUFFER} EXCLUDE_FROM_ALL )
@@ -746,8 +777,17 @@ if (FLB_SIGNV4)
746777endif ()
747778
748779if (FLB_SQLDB)
780+ if (FLB_PREFER_SYSTEM_LIB_SQLITE)
781+ find_package (PkgConfig)
782+ pkg_check_modules(SQLITE sqlite3>=3.0.0)
783+ endif ()
784+ if (SQLITE_FOUND)
785+ include_directories (${SQLITE_INCLUDE_DIRS} )
786+ link_directories (${SQLITE_LIBRARY_DIRS} )
787+ else ()
788+ include (cmake/sqlite.cmake)
789+ endif ()
749790 FLB_DEFINITION(FLB_HAVE_SQLDB)
750- add_subdirectory (${FLB_PATH_LIB_SQLITE} )
751791endif ()
752792
753793if (FLB_TRACE)
@@ -849,6 +889,18 @@ if(FLB_HAVE_GMTOFF)
849889 FLB_DEFINITION(FLB_HAVE_GMTOFF)
850890endif ()
851891
892+ # tm_zone support
893+ check_c_source_compiles("
894+ #include <time.h>
895+ int main() {
896+ struct tm tm;
897+ tm.tm_zone = \" GMT\" ;
898+ return 0;
899+ }" FLB_HAVE_TIME_ZONE)
900+ if (FLB_HAVE_TIME_ZONE)
901+ FLB_DEFINITION(FLB_HAVE_TIME_ZONE)
902+ endif ()
903+
852904# clock_get_time() support for macOS.
853905check_c_source_compiles("
854906 #include <mach/clock.h>
@@ -996,12 +1048,8 @@ else()
9961048 set (AUTOCONF_HOST_OPT "--host=${GNU_HOST} " )
9971049endif ()
9981050
999- if (CMAKE_GENERATOR MATCHES "Ninja" )
1000- if (FLB_SYSTEM_WINDOWS)
1001- MESSAGE (FATAL_ERROR "Building with Ninja is not supported on Windows" )
1002- else ()
1003- set (EXTERNAL_BUILD_TOOL "make" )
1004- endif ()
1051+ if (CMAKE_GENERATOR MATCHES "Ninja" AND NOT FLB_SYSTEM_WINDOWS)
1052+ set (EXTERNAL_BUILD_TOOL "make" )
10051053else ()
10061054 set (EXTERNAL_BUILD_TOOL "$(MAKE)" )
10071055endif ()
0 commit comments