Do not disable LLNDK symbols in header files
Compiler still requires the LLNDK symbols even if they are removed when compiling. Still the unavailable symbols break the build in linking if called with wrong api level. Bug: 333973388 Bug: 320347314 Test: TH Change-Id: I79cb921cf6f2789e97f11b88cddf7ca1325998a5
This commit is contained in:
parent
ef1a559b1f
commit
dcce9e044a
1 changed files with 10 additions and 21 deletions
|
@ -14,22 +14,18 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
/* As a vendor default header included in all vendor modules, this header MUST NOT include other
|
||||
* header files or any declarations. Only macros are allowed.
|
||||
*/
|
||||
#if defined(__ANDROID_VENDOR__)
|
||||
|
||||
// LLNDK (https://source.android.com/docs/core/architecture/vndk/build-system#ll-ndk) is similar to
|
||||
// NDK, but uses its own versioning of YYYYMM format for vendor builds. The LLNDK symbols are
|
||||
// enabled when the vendor api level is equal to or newer than the ro.board.api_level.
|
||||
#define __INTRODUCED_IN_LLNDK(vendor_api_level) \
|
||||
_Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
|
||||
__attribute__((enable_if( \
|
||||
__ANDROID_VENDOR_API__ >= vendor_api_level, \
|
||||
"available in vendor API level " #vendor_api_level " that " \
|
||||
"is newer than the current vendor API level. Guard the API " \
|
||||
"call with '#if (__ANDROID_VENDOR_API__ >= " #vendor_api_level ")'."))) \
|
||||
_Pragma("clang diagnostic pop")
|
||||
// enabled when the vendor api level is equal to or newer than the ro.board.api_level. These symbols
|
||||
// must be annotated in map.txt files with the `# llndk=YYYYMM` annotation. They also must be marked
|
||||
// with `__INTRODUCED_IN_LLNDK(YYYYMM)` in the header files. It leaves a no-op annotation for ABI
|
||||
// analysis.
|
||||
#if !defined(__INTRODUCED_IN_LLNDK)
|
||||
#define __INTRODUCED_IN_LLNDK(vendor_api_level) \
|
||||
__attribute__((annotate("introduced_in_llndk=" #vendor_api_level)))
|
||||
#endif
|
||||
|
||||
#if defined(__ANDROID_VENDOR__)
|
||||
|
||||
// Use this macro as an `if` statement to call an API that are available to both NDK and LLNDK.
|
||||
// This returns true for the vendor modules if the vendor_api_level is less than or equal to the
|
||||
|
@ -39,13 +35,6 @@
|
|||
|
||||
#else // __ANDROID_VENDOR__
|
||||
|
||||
// __INTRODUCED_IN_LLNDK is for LLNDK only but not for NDK. Ignore this for non-vendor modules.
|
||||
// It leaves a no-op annotation for ABI analysis.
|
||||
#if !defined(__INTRODUCED_IN_LLNDK)
|
||||
#define __INTRODUCED_IN_LLNDK(vendor_api_level) \
|
||||
__attribute__((annotate("introduced_in_llndk=" #vendor_api_level)))
|
||||
#endif
|
||||
|
||||
// For non-vendor modules, API_LEVEL_AT_LEAST is replaced with __builtin_available(sdk_api_level) to
|
||||
// guard the API for __INTRODUCED_IN.
|
||||
#if !defined(API_LEVEL_AT_LEAST)
|
||||
|
|
Loading…
Reference in a new issue