1 // 2 // Copyright 2019 The Abseil Authors. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // https://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 #ifndef ABSL_FLAGS_CONFIG_H_ 17 #define ABSL_FLAGS_CONFIG_H_ 18 19 // Determine if we should strip string literals from the Flag objects. 20 // By default we strip string literals on mobile platforms. 21 #if !defined(ABSL_FLAGS_STRIP_NAMES) 22 23 #if defined(__ANDROID__) 24 #define ABSL_FLAGS_STRIP_NAMES 1 25 26 #elif defined(__APPLE__) 27 #include <TargetConditionals.h> 28 #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE 29 #define ABSL_FLAGS_STRIP_NAMES 1 30 #elif defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED 31 #define ABSL_FLAGS_STRIP_NAMES 1 32 #endif // TARGET_OS_* 33 #endif 34 35 #endif // !defined(ABSL_FLAGS_STRIP_NAMES) 36 37 #if !defined(ABSL_FLAGS_STRIP_NAMES) 38 // If ABSL_FLAGS_STRIP_NAMES wasn't set on the command line or above, 39 // the default is not to strip. 40 #define ABSL_FLAGS_STRIP_NAMES 0 41 #endif 42 43 #if !defined(ABSL_FLAGS_STRIP_HELP) 44 // By default, if we strip names, we also strip help. 45 #define ABSL_FLAGS_STRIP_HELP ABSL_FLAGS_STRIP_NAMES 46 #endif 47 48 // ABSL_FLAGS_INTERNAL_ATOMIC_DOUBLE_WORD macro is used for using atomics with 49 // double words, e.g. absl::Duration. 50 // For reasons in bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878, modern 51 // versions of GCC do not support cmpxchg16b instruction in standard atomics. 52 #ifdef ABSL_FLAGS_INTERNAL_ATOMIC_DOUBLE_WORD 53 #error "ABSL_FLAGS_INTERNAL_ATOMIC_DOUBLE_WORD should not be defined." 54 #elif defined(__clang__) && defined(__x86_64__) && \ 55 defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16) 56 #define ABSL_FLAGS_INTERNAL_ATOMIC_DOUBLE_WORD 1 57 #endif 58 59 // ABSL_FLAGS_INTERNAL_HAS_RTTI macro is used for selecting if we can use RTTI 60 // for flag type identification. 61 #ifdef ABSL_FLAGS_INTERNAL_HAS_RTTI 62 #error ABSL_FLAGS_INTERNAL_HAS_RTTI cannot be directly set 63 #elif !defined(__GNUC__) || defined(__GXX_RTTI) 64 #define ABSL_FLAGS_INTERNAL_HAS_RTTI 1 65 #endif // !defined(__GNUC__) || defined(__GXX_RTTI) 66 67 #endif // ABSL_FLAGS_CONFIG_H_ 68