From dae8ea24adfaef09ccac702c8ebc9ce4c3b2048c Mon Sep 17 00:00:00 2001
From: Markus Pilman <markus.pilman@snowflake.com>
Date: Wed, 25 Nov 2020 15:06:59 -0700
Subject: [PATCH] Move compiler definitions into config file

---
 cmake/ConfigureCompiler.cmake | 64 +++++------------------------------
 flow/CMakeLists.txt           |  1 +
 flow/FastAlloc.h              |  1 +
 flow/Platform.h               |  2 ++
 flow/config.h.cmake           | 50 +++++++++++++++++++++++++++
 5 files changed, 63 insertions(+), 55 deletions(-)
 create mode 100644 flow/config.h.cmake

diff --git a/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake
index 2a3ef1da23..f8cede79ca 100644
--- a/cmake/ConfigureCompiler.cmake
+++ b/cmake/ConfigureCompiler.cmake
@@ -5,7 +5,6 @@ env_set(USE_DTRACE ON BOOL "Enable dtrace probes on supported platforms")
 env_set(USE_VALGRIND OFF BOOL "Compile for valgrind usage")
 env_set(USE_VALGRIND_FOR_CTEST ${USE_VALGRIND} BOOL "Use valgrind for ctest")
 env_set(ALLOC_INSTRUMENTATION OFF BOOL "Instrument alloc")
-env_set(WITH_UNDODB OFF BOOL "Use rr or undodb")
 env_set(USE_ASAN OFF BOOL "Compile with address sanitizer")
 env_set(USE_GCOV OFF BOOL "Compile with gcov instrumentation")
 env_set(USE_MSAN OFF BOOL "Compile with memory sanitizer. To avoid false positives you need to dynamically link to a msan-instrumented libc++ and libc++abi, which you must compile separately. See https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc.")
@@ -47,35 +46,9 @@ add_compile_definitions(BOOST_ERROR_CODE_HEADER_ONLY BOOST_SYSTEM_NO_DEPRECATED)
 
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 find_package(Threads REQUIRED)
-if(ALLOC_INSTRUMENTATION)
-  add_compile_options(-DALLOC_INSTRUMENTATION)
-endif()
-if(WITH_UNDODB)
-  add_compile_options(-DWITH_UNDODB)
-endif()
-if(DEBUG_TASKS)
-  add_compile_options(-DDEBUG_TASKS)
-endif()
-
-if(NDEBUG)
-  add_compile_options(-DNDEBUG)
-endif()
-
-if(FDB_RELEASE)
-  add_compile_options(-DFDB_RELEASE)
-  add_compile_options(-DFDB_CLEAN_BUILD)
-endif()
 
 include_directories(${CMAKE_SOURCE_DIR})
 include_directories(${CMAKE_BINARY_DIR})
-if (NOT OPEN_FOR_IDE)
-  add_definitions(-DNO_INTELLISENSE)
-endif()
-if(WIN32)
-  add_definitions(-DUSE_USEFIBERS)
-else()
-  add_definitions(-DUSE_UCONTEXT)
-endif()
 
 if (USE_CCACHE)
   FIND_PROGRAM(CCACHE_FOUND "ccache")
@@ -95,6 +68,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_C_STANDARD_REQUIRED ON)
 
+if(NOT OPEN_FOR_IDE)
+  add_compile_definitions(NO_INTELLISENSE)
+endif()
+
 if(NOT WIN32)
   include(CheckIncludeFile)
   CHECK_INCLUDE_FILE("stdatomic.h" HAS_C11_ATOMICS)
@@ -112,7 +89,6 @@ if(WIN32)
     string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
   endif()
   add_compile_options(/W0 /EHsc /bigobj $<$<CONFIG:Release>:/Zi> /MP /FC /Gm-)
-  add_compile_definitions(_WIN32_WINNT=${WINDOWS_TARGET} WINVER=${WINDOWS_TARGET} NTDDI_VERSION=0x05020000 BOOST_ALL_NO_LIB)
   set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
 else()
@@ -166,11 +142,7 @@ else()
   # and create a debuginfo rpm
   add_compile_options(-ggdb -fno-omit-frame-pointer)
   if(USE_ASAN)
-    add_compile_options(
-      -fsanitize=address
-      -DUSE_SANITIZER
-      -DADDRESS_SANITIZER
-      )
+    add_compile_options(-fsanitize=address)
     add_link_options(-fsanitize=address)
   endif()
 
@@ -180,15 +152,11 @@ else()
     endif()
     add_compile_options(
       -fsanitize=memory
-      -fsanitize-memory-track-origins=2
-      -DUSE_SANITIZER
-      -DMEMORY_SANITIZER
-      )
+      -fsanitize-memory-track-origins=2)
     add_link_options(-fsanitize=memory)
   endif()
 
   if(USE_GCOV)
-    add_compile_options(--coverage -DUSE_GCOV)
     add_link_options(--coverage)
   endif()
 
@@ -196,20 +164,13 @@ else()
     add_compile_options(
       -fsanitize=undefined
       # TODO(atn34) Re-enable -fsanitize=alignment once https://github.com/apple/foundationdb/issues/1434 is resolved
-      -fno-sanitize=alignment
-      -DUSE_SANITIZER
-      -DUNDEFINED_BEHAVIOR_SANITIZER
-      )
+      -fno-sanitize=alignment)
     add_link_options(-fsanitize=undefined)
   endif()
 
   if(USE_TSAN)
     add_compile_options(
-      -fsanitize=thread
-      -DUSE_SANITIZER
-      -DTHREAD_SANITIZER
-      -DDYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1
-      )
+      -fsanitize=thread)
     add_link_options(-fsanitize=thread)
   endif()
 
@@ -269,9 +230,6 @@ else()
   # for more information.
   #add_compile_options(-fno-builtin-memcpy)
 
-  if (USE_VALGRIND)
-    add_compile_options(-DVALGRIND=1 -DUSE_VALGRIND=1)
-  endif()
   if (CLANG)
     add_compile_options()
     # Clang has link errors unless `atomic` is specifically requested.
@@ -280,7 +238,6 @@ else()
     endif()
     if (APPLE OR USE_LIBCXX)
       add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-stdlib=libc++>)
-      add_compile_definitions(WITH_LIBCXX)
       if (NOT APPLE)
         if (STATIC_LINK_LIBCXX)
           add_link_options(-static-libgcc -nostdlib++  -Wl,-Bstatic -lc++ -lc++abi -Wl,-Bdynamic)
@@ -366,10 +323,7 @@ else()
   check_symbol_exists(aligned_alloc stdlib.h HAS_ALIGNED_ALLOC)
   message(STATUS "Has aligned_alloc: ${HAS_ALIGNED_ALLOC}")
   if((SUPPORT_DTRACE) AND (USE_DTRACE))
-    add_compile_definitions(DTRACE_PROBES)
-  endif()
-  if(HAS_ALIGNED_ALLOC)
-    add_compile_definitions(HAS_ALIGNED_ALLOC)
+    set(DTRACE_PROBES 1)
   endif()
 
   if(CMAKE_COMPILER_IS_GNUCXX)
diff --git a/flow/CMakeLists.txt b/flow/CMakeLists.txt
index f791a35831..fe70d494f3 100644
--- a/flow/CMakeLists.txt
+++ b/flow/CMakeLists.txt
@@ -99,6 +99,7 @@ if(UNIX AND NOT APPLE)
 endif()
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SourceVersion.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SourceVersion.h)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
 
 add_flow_target(STATIC_LIBRARY NAME flow SRCS ${FLOW_SRCS})
 if (NOT APPLE AND NOT WIN32)
diff --git a/flow/FastAlloc.h b/flow/FastAlloc.h
index bb657405fc..0ebd68950e 100644
--- a/flow/FastAlloc.h
+++ b/flow/FastAlloc.h
@@ -24,6 +24,7 @@
 
 #include "flow/Error.h"
 #include "flow/Platform.h"
+#include "flow/config.h"
 
 // ALLOC_INSTRUMENTATION_STDOUT enables non-sampled logging of all allocations and deallocations to stdout to be processed by tools/alloc_instrumentation.py
 //#define ALLOC_INSTRUMENTATION_STDOUT ENABLED(NOT_IN_CLEAN)
diff --git a/flow/Platform.h b/flow/Platform.h
index 85a8934c0b..4ab42afc80 100644
--- a/flow/Platform.h
+++ b/flow/Platform.h
@@ -22,6 +22,8 @@
 #define FLOW_PLATFORM_H
 #pragma once
 
+#include "flow/config.h"
+
 #if (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__))
 #define __unixish__ 1
 #endif
diff --git a/flow/config.h.cmake b/flow/config.h.cmake
new file mode 100644
index 0000000000..104f753589
--- /dev/null
+++ b/flow/config.h.cmake
@@ -0,0 +1,50 @@
+#cmakedefine ALLOC_INSTRUMENTATION
+#cmakedefine NDEBUG
+#cmakedefine FDB_RELEASE
+#ifdef FDB_RELEASE
+# define FDB_CLEAN_BUILD
+#endif // FDB_RELEASE
+#cmakedefine OPEN_FOR_IDE
+#ifdef WIN32
+# define USE_USEFIBERS
+# define _WIN32_WINNT ${WINDOWS_TARGET}
+# define WINVER ${WINDOWS_TARGET}
+# define NTDDI_VERSION 0x05020000
+# define BOOST_ALL_NO_LIB
+#else
+# cmakedefine USE_UCONTEXT
+# cmakedefine USE_ASAN
+# cmakedefine USE_MSAN
+# cmakedefine USE_UBSAN
+# cmakedefine USE_UCONTEXT
+# if defined(USE_ASAN) || \
+     defined(USE_MSAN) || \
+     defined(USE_UBSAN) || \
+     defined(USE_TSAN)
+#  define DUSE_SANITIZER
+# #endif
+# #ifdef USE_ASAN
+#  define ADDRESS_SANITIZER
+# endif // USE_ASAN
+# ifdef USE_MSAN
+#  define MEMORY_SANITIZER
+# endif
+# ifdef USE_UBSAN
+#  define UNDEFINED_BEHAVIOR_SANITIZER
+# endif
+# ifdef USE_TSAN
+#  define THREAD_SANITIZER
+#  define DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL 1
+# endif
+# cmakedefine USE_GCOV
+# cmakedefine USE_VALGRIND
+# ifdef USE_VALGRIND
+#  define VALGRIND 1
+# endif
+# cmakedefine WITH_LIBCXX
+# if !defined(WITH_LIBCXX) && defined(__APPLE__)
+#  define WITH_LIBCXX
+# endif
+# cmakedefine DTRACE_PROBES
+# cmakedefine HAS_ALIGNED_ALLOC
+#endif // WIN32