xref: /aosp_15_r20/external/cronet/base/android/requires_api.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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