|
1 | 1 | cmake_minimum_required(VERSION 3.12) |
2 | 2 | project(fluent-bit C) |
3 | 3 |
|
| 4 | +include(CheckCCompilerFlag) |
| 5 | + |
4 | 6 | # CMP0069 ensures that LTO is enabled for all compilers |
5 | 7 | cmake_policy(SET CMP0069 NEW) |
6 | 8 | set(CMAKE_POLICY_DEFAULT_CMP0069 NEW) |
@@ -207,7 +209,8 @@ option(FLB_SIGNV4 "Enable AWS Signv4 support" Yes) |
207 | 209 | option(FLB_AWS "Enable AWS support" Yes) |
208 | 210 | option(FLB_STATIC_CONF "Build binary using static configuration") |
209 | 211 | option(FLB_STREAM_PROCESSOR "Enable Stream Processor" Yes) |
210 | | -option(FLB_SIMD "Enable SIMD support" No) |
| 212 | +set(FLB_SIMD "Auto" CACHE STRING "Enable SIMD support (On, Off, Auto)") |
| 213 | +set_property(CACHE FLB_SIMD PROPERTY STRINGS "On;Off;Auto") |
211 | 214 | option(FLB_CORO_STACK_SIZE "Set coroutine stack size") |
212 | 215 | option(FLB_AVRO_ENCODER "Build with Avro encoding support" No) |
213 | 216 | option(FLB_AWS_ERROR_REPORTER "Build with aws error reporting support" No) |
@@ -258,7 +261,64 @@ option(FLB_EVENT_LOOP_SELECT "Enable select(2) event loop backend" No) |
258 | 261 | option(FLB_EVENT_LOOP_LIBEVENT "Enable libevent event loop backend" No) |
259 | 262 |
|
260 | 263 | # SIMD support |
261 | | -if(FLB_SIMD) |
| 264 | +# ------------ |
| 265 | +# FLB_SIMD is a tri-state cache variable: |
| 266 | +# Auto : enable SIMD only when the target architecture/toolchain is known-good |
| 267 | +# On : require SIMD support and fail during configure otherwise |
| 268 | +# Off : disable SIMD explicitly |
| 269 | +string(TOUPPER "${FLB_SIMD}" FLB_SIMD_MODE) |
| 270 | + |
| 271 | +if(FLB_SIMD_MODE MATCHES "^(ON|YES|TRUE|1)$") |
| 272 | + set(FLB_SIMD_MODE "ON") |
| 273 | +elseif(FLB_SIMD_MODE MATCHES "^(OFF|NO|FALSE|0)$") |
| 274 | + set(FLB_SIMD_MODE "OFF") |
| 275 | +elseif(NOT FLB_SIMD_MODE STREQUAL "AUTO") |
| 276 | + message(FATAL_ERROR "FLB_SIMD must be one of: On, Off, Auto") |
| 277 | +endif() |
| 278 | + |
| 279 | +set(FLB_SIMD_ENABLED No) |
| 280 | +set(FLB_SIMD_RISCV_C_FLAGS "") |
| 281 | + |
| 282 | +if(NOT FLB_SIMD_MODE STREQUAL "OFF") |
| 283 | + set(FLB_SIMD_SUPPORTED_ARCH No) |
| 284 | + |
| 285 | + if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64|amd64)$" AND (CMAKE_SIZEOF_VOID_P GREATER 4)) |
| 286 | + set(FLB_SIMD_SUPPORTED_ARCH Yes) |
| 287 | + set(FLB_SIMD_ENABLED Yes) |
| 288 | + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64|ARM64|AARCH64)$") |
| 289 | + set(FLB_SIMD_SUPPORTED_ARCH Yes) |
| 290 | + set(FLB_SIMD_ENABLED Yes) |
| 291 | + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv64)") |
| 292 | + set(FLB_SIMD_SUPPORTED_ARCH Yes) |
| 293 | + check_c_compiler_flag("-march=rv64gcv_zba" FLB_SIMD_RISCV_COMPILER_FLAG) |
| 294 | + |
| 295 | + if(FLB_SIMD_RISCV_COMPILER_FLAG) |
| 296 | + set(FLB_SIMD_ENABLED Yes) |
| 297 | + set(FLB_SIMD_RISCV_C_FLAGS "-march=rv64gcv_zba") |
| 298 | + elseif(FLB_SIMD_MODE STREQUAL "ON") |
| 299 | + message(FATAL_ERROR |
| 300 | + "FLB_SIMD=On requires compiler support for -march=rv64gcv_zba on riscv64") |
| 301 | + else() |
| 302 | + message(WARNING |
| 303 | + "FLB_SIMD=Auto disabled SIMD on riscv64 because the compiler does not " |
| 304 | + "support -march=rv64gcv_zba") |
| 305 | + endif() |
| 306 | + endif() |
| 307 | + |
| 308 | + if(NOT FLB_SIMD_SUPPORTED_ARCH) |
| 309 | + if(FLB_SIMD_MODE STREQUAL "ON") |
| 310 | + message(FATAL_ERROR |
| 311 | + "FLB_SIMD=On is only supported on x86_64, aarch64/arm64, and " |
| 312 | + "riscv64 with RVV compiler support") |
| 313 | + else() |
| 314 | + message(STATUS |
| 315 | + "FLB_SIMD=Auto disabled SIMD on unsupported architecture: " |
| 316 | + "${CMAKE_SYSTEM_PROCESSOR}") |
| 317 | + endif() |
| 318 | + endif() |
| 319 | +endif() |
| 320 | + |
| 321 | +if(FLB_SIMD_ENABLED) |
262 | 322 | FLB_DEFINITION(FLB_HAVE_SIMD) |
263 | 323 | endif() |
264 | 324 |
|
@@ -665,6 +725,14 @@ add_subdirectory(${FLB_PATH_LIB_RING_BUFFER} EXCLUDE_FROM_ALL) |
665 | 725 |
|
666 | 726 | # yyson |
667 | 727 | add_subdirectory(${FLB_PATH_LIB_YYJSON} EXCLUDE_FROM_ALL) |
| 728 | +if (TARGET yyjson AND NOT FLB_COVERAGE AND |
| 729 | + CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|AppleClang|Intel") |
| 730 | + # yyjson's O0 reader can exceed the default coroutine stack budget. |
| 731 | + # Keep debug symbols, but force enough optimization to shrink the frame. |
| 732 | + target_compile_options(yyjson PRIVATE |
| 733 | + $<$<AND:$<COMPILE_LANGUAGE:C>,$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>>:-Og> |
| 734 | + ) |
| 735 | +endif() |
668 | 736 |
|
669 | 737 | # Avro |
670 | 738 | if(FLB_AVRO_ENCODER) |
|
0 commit comments