SafeC: OFF")
endif ()
+if (HAVE_TCMALLOC)
+ message("\
+ TCMalloc: ON")
+else ()
+ message("\
+ TCMalloc: OFF")
+endif ()
+
if (HAVE_UUID)
message("\
UUID: ON")
--- /dev/null
+
+find_package(PkgConfig)
+pkg_check_modules(PC_TCMALLOC libtcmalloc)
+
+find_library(TCMALLOC_LIBRARIES NAMES tcmalloc tcmalloc_minimal
+ HINTS ${PC_TCMALLOC_LIBDIR} ${PC_TCMALLOC_LIBRARY_DIRS})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(TCMalloc REQUIRED_VARS TCMALLOC_LIBRARIES VERSION_VAR PC_TCMALLOC_VERSION)
+
+mark_as_advanced(TCMALLOC_CFLAGS TCMALLOC_LIBRARIES)
endif ()
endif ( ENABLE_UB_SANITIZER )
+if ( ENABLE_TCMALLOC )
+ if ( ENABLE_ADDRESS_SANITIZER )
+ message ( SEND_ERROR "TCMalloc cannot be used at the same time as address sanitizer!" )
+ endif ()
+ find_package ( TCMalloc REQUIRED )
+ set ( TCMALLOC_C_FLAGS "-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" )
+ set ( HAVE_TCMALLOC "1" )
+endif ( ENABLE_TCMALLOC )
+
if ( ENABLE_CODE_COVERAGE )
include(${CMAKE_MODULE_PATH}/CodeCoverage.cmake)
endif ( ENABLE_CODE_COVERAGE )
COVERAGE_COMPILER_FLAGS = ${COVERAGE_COMPILER_FLAGS}
COVERAGE_LINKER_FLAGS = ${COVERAGE_LINKER_FLAGS}
COVERAGE_LIBRARIES = ${COVERAGE_LIBRARIES}
+ TCMALLOC_C_FLAGS = ${TCMALLOC_C_FLAGS}
+ TCMALLOC_LIBRARIES = ${TCMALLOC_LIBRARIES}
")
]]
-set ( EXTRA_C_FLAGS "${EXTRA_C_FLAGS} ${HARDENED_CXX_FLAGS} ${DEBUGGING_C_FLAGS} ${SANITIZER_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" )
-set ( EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${HARDENED_CXX_FLAGS} ${DEBUGGING_C_FLAGS} ${SANITIZER_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" )
+set ( EXTRA_C_FLAGS "${EXTRA_C_FLAGS} ${HARDENED_CXX_FLAGS} ${DEBUGGING_C_FLAGS} ${SANITIZER_CXX_FLAGS} ${TCMALLOC_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" )
+set ( EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} ${HARDENED_CXX_FLAGS} ${DEBUGGING_C_FLAGS} ${SANITIZER_CXX_FLAGS} ${TCMALLOC_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" )
set ( EXTRA_LINKER_FLAGS "${EXTRA_LINKER_FLAGS} ${HARDENED_LINKER_FLAGS} ${SANITIZER_LINKER_FLAGS} ${COVERAGE_LINKER_FLAGS}" )
-foreach (EXTRA_LIBRARY IN LISTS COVERAGE_LIBRARIES)
+foreach (EXTRA_LIBRARY IN LISTS COVERAGE_LIBRARIES TCMALLOC_LIBRARIES )
list ( APPEND EXTRA_LIBRARIES ${EXTRA_LIBRARY} )
endforeach ()
option ( ENABLE_ADDRESS_SANITIZER "enable address sanitizer support" OFF )
option ( ENABLE_THREAD_SANITIZER "enable thread sanitizer support" OFF )
option ( ENABLE_UB_SANITIZER "enable undefined behavior sanitizer support" OFF )
+option ( ENABLE_TCMALLOC "enable using tcmalloc for dynamic memory management" OFF )
option ( ENABLE_CODE_COVERAGE "Whether to enable code coverage support" OFF )
# signals
enable thread sanitizer support
--enable-ub-sanitizer
enable undefined behavior sanitizer support
+ --enable-tcmalloc
+ enable using tcmalloc for dynamic memory management
--enable-appid-third-party
enable third party appid
--enable-unit-tests build unit tests
append_cache_entry ENABLE_THREAD_SANITIZER BOOL false
;;
--enable-ub-sanitizer)
- append_cache_entry ENABLE_UB_SANITIZER BOOL true
+ append_cache_entry ENABLE_UB_SANITIZER BOOL true
;;
--disable-ub-sanitizer)
- append_cache_entry ENABLE_UB_SANITIZER BOOL false
+ append_cache_entry ENABLE_UB_SANITIZER BOOL false
+ ;;
+ --enable-tcmalloc)
+ append_cache_entry ENABLE_TCMALLOC BOOL true
+ ;;
+ --disable-tcmalloc)
+ append_cache_entry ENABLE_TCMALLOC BOOL false
;;
--enable-appid-third-party)
- append_cache_entry ENABLE_APPID_THIRD_PARTY BOOL true
+ append_cache_entry ENABLE_APPID_THIRD_PARTY BOOL true
;;
--enable-unit-tests)
append_cache_entry ENABLE_UNIT_TESTS BOOL true