From d2578ab195a9c108444392de0752faf58e9c0ea5 Mon Sep 17 00:00:00 2001 From: Yanqin Jin Date: Tue, 27 Sep 2022 20:12:13 -0700 Subject: [PATCH] Add DECLARE_uint32 to gflags compatibility (#10729) Summary: Older versions of gflags do not have `DEFINE_uint32` and `DECLARE_uint32`. In util/gflag_compat.h, we already add a hack for `DEFINE_uint32`. This PR adds a hack for `DECLARE_uint32`. Pull Request resolved: https://github.com/facebook/rocksdb/pull/10729 Test Plan: ROCKSDB_NO_FBCODE=1 make V=1 -j16 db_stress make check Resolves https://github.com/facebook/rocksdb/issues/10704 Reviewed By: pdillinger Differential Revision: D39789183 Pulled By: riversand963 fbshipit-source-id: a58747e0163dcf55dd762733aa5c40d8f0ae70a6 --- util/gflags_compat.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/util/gflags_compat.h b/util/gflags_compat.h index c12c7e2af..b6f88a5bc 100644 --- a/util/gflags_compat.h +++ b/util/gflags_compat.h @@ -6,6 +6,8 @@ #pragma once #include +#include + #ifndef GFLAGS_NAMESPACE // in case it's not defined in old versions, that's probably because it was // still google by default. @@ -16,10 +18,13 @@ // DEFINE_uint32 does not appear in older versions of gflags. This should be // a sane definition for those versions. #include -#define DEFINE_uint32(name, val, txt) \ - namespace gflags_compat { \ - DEFINE_int32(name, val, txt); \ - } \ - uint32_t &FLAGS_##name = \ - *reinterpret_cast(&gflags_compat::FLAGS_##name); -#endif +#define DEFINE_uint32(name, val, txt) \ + namespace gflags_compat { \ + DEFINE_int32(name, val, txt); \ + } \ + std::reference_wrapper FLAGS_##name = \ + std::ref(*reinterpret_cast(&gflags_compat::FLAGS_##name)); + +#define DECLARE_uint32(name) \ + extern std::reference_wrapper FLAGS_##name; +#endif // !DEFINE_uint32