From f5f04d17f83e96c2ecac07d393ae7dea2c374b32 Mon Sep 17 00:00:00 2001
From: Sergey Bronnikov <sergeyb@tarantool.org>
Date: Fri, 31 Mar 2023 21:04:09 +0300
Subject: [PATCH] build: introduce an option for fuzzing-friendly mode

Patch introduce a macro FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION. It is
a common build macro recommended in libFuzzer's documentation [1].

1. https://llvm.org/docs/LibFuzzer.html#fuzzer-friendly-build-mode

Needed for #4826

NO_CHANGELOG=build
NO_DOC=build
NO_TEST=build
---
 CMakeLists.txt            | 1 +
 cmake/profile.cmake       | 1 +
 src/trivia/config.h.cmake | 4 ++++
 3 files changed, 6 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 70c25b05bc..442f22cc49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -778,6 +778,7 @@ set(options PACKAGE VERSION BUILD C_COMPILER CXX_COMPILER C_FLAGS CXX_FLAGS
     ENABLE_GCOV ENABLE_GPROF ENABLE_VALGRIND ENABLE_ASAN ENABLE_UB_SANITIZER ENABLE_FUZZER
     ENABLE_BACKTRACE
     ABORT_ON_LEAK
+    FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
     ENABLE_HARDENING
     ENABLE_DOC
     ENABLE_DIST
diff --git a/cmake/profile.cmake b/cmake/profile.cmake
index 16492efb16..92d3d39e5c 100644
--- a/cmake/profile.cmake
+++ b/cmake/profile.cmake
@@ -51,6 +51,7 @@ endif()
 
 option(OSS_FUZZ "Set this option to use flags by oss-fuzz" OFF)
 option(ENABLE_FUZZER "Enable fuzzing testing" OFF)
+option(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION "Enable fuzzing-friendly mode" ${ENABLE_FUZZER})
 if(ENABLE_FUZZER)
     if (CMAKE_COMPILER_IS_GNUCC)
         message(FATAL_ERROR
diff --git a/src/trivia/config.h.cmake b/src/trivia/config.h.cmake
index 807cefcb4c..c7865c7329 100644
--- a/src/trivia/config.h.cmake
+++ b/src/trivia/config.h.cmake
@@ -79,6 +79,10 @@
  * Defined if configured with JIT engine turned on.
  */
 #cmakedefine LUAJIT_JIT_STATUS 1
+/*
+ * Defined if configured with FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION.
+ */
+#cmakedefine FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION 1
 
 /*
  * Set if the system has bfd.h header and GNU bfd library.
-- 
GitLab