1*6777b538SAndroid Build Coastguard Worker // Copyright 2024 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_ANDROID_REQUIRES_API_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_ANDROID_REQUIRES_API_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker // Sets the API version of a symbol. Analogous to how @RequiresApi sets the API 9*6777b538SAndroid Build Coastguard Worker // version of Java symbols. 10*6777b538SAndroid Build Coastguard Worker // 11*6777b538SAndroid Build Coastguard Worker // A compiler warning (-Wunguarded-availability) is emitted when symbols with 12*6777b538SAndroid Build Coastguard Worker // this annotation are reference by code that has a lower API version. 13*6777b538SAndroid Build Coastguard Worker // 14*6777b538SAndroid Build Coastguard Worker // The default API version is set by the default_min_sdk_version GN arg. 15*6777b538SAndroid Build Coastguard Worker // 16*6777b538SAndroid Build Coastguard Worker // To reference a symbol from code with a lower api level, you must use: 17*6777b538SAndroid Build Coastguard Worker // if (__builtin_available(android API_VERSION, *)) { ... } 18*6777b538SAndroid Build Coastguard Worker // 19*6777b538SAndroid Build Coastguard Worker // See also: 20*6777b538SAndroid Build Coastguard Worker // https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#weak-symbols-for-api-definitions 21*6777b538SAndroid Build Coastguard Worker #define REQUIRES_ANDROID_API(x) \ 22*6777b538SAndroid Build Coastguard Worker __attribute__((__availability__(android, introduced = x))) 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Sets the default API version for all symbols. 25*6777b538SAndroid Build Coastguard Worker // 26*6777b538SAndroid Build Coastguard Worker // Usage: 27*6777b538SAndroid Build Coastguard Worker // #pragma clang attribute push DEFAULT_REQUIRES_ANDROID_API(29) 28*6777b538SAndroid Build Coastguard Worker // ... 29*6777b538SAndroid Build Coastguard Worker // #pragma clang attribute pop 30*6777b538SAndroid Build Coastguard Worker // 31*6777b538SAndroid Build Coastguard Worker // For use only within .cc files so that declarations within header files are 32*6777b538SAndroid Build Coastguard Worker // clearly labeled. 33*6777b538SAndroid Build Coastguard Worker #define DEFAULT_REQUIRES_ANDROID_API(x) \ 34*6777b538SAndroid Build Coastguard Worker (REQUIRES_ANDROID_API(x), \ 35*6777b538SAndroid Build Coastguard Worker apply_to = any(enum, enum_constant, field, function, namespace, record, \ 36*6777b538SAndroid Build Coastguard Worker type_alias, variable)) 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker #endif // BASE_ANDROID_REQUIRES_API_H_ 39