diff options
author | Lingfeng Yang <lfy@google.com> | 2020-10-29 11:59:43 -0700 |
---|---|---|
committer | Lingfeng Yang <lfy@google.com> | 2020-10-29 13:09:54 -0700 |
commit | 9958a2d1d95a4c9ad1578ffe6cc0b78e7368e22b (patch) | |
tree | a5ca900e561a16f087383c6fcf6fe1769818fe88 /fake-android-guest/android | |
parent | 1bb3ca482d95d569dcd0873847ab40ec127486bb (diff) | |
download | vulkan-cereal-9958a2d1d95a4c9ad1578ffe6cc0b78e7368e22b.tar.gz |
Build the fake Android guest
Bug: 171711491
NOTE: This now makes the build on Linux/macOS require Clang.
Change-Id: If9ef4368295a4130e17087b48bfa7a49cb8dec58
Diffstat (limited to 'fake-android-guest/android')
-rw-r--r-- | fake-android-guest/android/AHardwareBufferHelpers.h | 46 | ||||
-rw-r--r-- | fake-android-guest/android/data_space.h | 95 | ||||
-rw-r--r-- | fake-android-guest/android/dlext.h | 196 | ||||
-rw-r--r-- | fake-android-guest/android/hardware_buffer.h | 388 | ||||
-rw-r--r-- | fake-android-guest/android/log.h | 191 | ||||
-rw-r--r-- | fake-android-guest/android/native_window.h | 165 | ||||
-rw-r--r-- | fake-android-guest/android/rect.h | 53 | ||||
-rw-r--r-- | fake-android-guest/android/versioning.h | 28 |
8 files changed, 1162 insertions, 0 deletions
diff --git a/fake-android-guest/android/AHardwareBufferHelpers.h b/fake-android-guest/android/AHardwareBufferHelpers.h new file mode 100644 index 00000000..e12feed5 --- /dev/null +++ b/fake-android-guest/android/AHardwareBufferHelpers.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef ANDROID_PRIVATE_NATIVE_AHARDWARE_BUFFER_HELPERS_H +#define ANDROID_PRIVATE_NATIVE_AHARDWARE_BUFFER_HELPERS_H +/* + * This file contains utility functions related to AHardwareBuffer, mostly to + * convert to/from HAL formats. + * + * These are PRIVATE methods, so this file can NEVER appear in a public NDK + * header. They are used by higher level libraries such as core/jni. + */ +#include <stdint.h> +struct AHardwareBuffer; +struct ANativeWindowBuffer; +namespace android { +// whether this AHardwareBuffer format is valid +bool AHardwareBuffer_isValidPixelFormat(uint32_t ahardwarebuffer_format); +// convert AHardwareBuffer format to HAL format (note: this is a no-op) +uint32_t AHardwareBuffer_convertFromPixelFormat(uint32_t format); +// convert HAL format to AHardwareBuffer format (note: this is a no-op) +uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format); +// convert AHardwareBuffer usage bits to HAL usage bits (note: this is a no-op) +uint64_t AHardwareBuffer_convertFromGrallocUsageBits(uint64_t usage); +// convert HAL usage bits to AHardwareBuffer usage bits (note: this is a no-op) +uint64_t AHardwareBuffer_convertToGrallocUsageBits(uint64_t usage); +class GraphicBuffer; +const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer); +GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(AHardwareBuffer* buffer); +const ANativeWindowBuffer* AHardwareBuffer_to_ANativeWindowBuffer(const AHardwareBuffer* buffer); +ANativeWindowBuffer* AHardwareBuffer_to_ANativeWindowBuffer(AHardwareBuffer* buffer); +AHardwareBuffer* AHardwareBuffer_from_GraphicBuffer(GraphicBuffer* buffer); +} // namespace android +#endif // ANDROID_PRIVATE_NATIVE_AHARDWARE_BUFFER_HELPERS_H diff --git a/fake-android-guest/android/data_space.h b/fake-android-guest/android/data_space.h new file mode 100644 index 00000000..9c3de77c --- /dev/null +++ b/fake-android-guest/android/data_space.h @@ -0,0 +1,95 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file data_space.h + */ +#ifndef ANDROID_DATA_SPACE_H +#define ANDROID_DATA_SPACE_H +#include <inttypes.h> +#include <sys/cdefs.h> +__BEGIN_DECLS +/** + * ADataSpace. + */ +enum ADataSpace { + /** + * Default-assumption data space, when not explicitly specified. + * + * It is safest to assume the buffer is an image with sRGB primaries and + * encoding ranges, but the consumer and/or the producer of the data may + * simply be using defaults. No automatic gamma transform should be + * expected, except for a possible display gamma transform when drawn to a + * screen. + */ + ADATASPACE_UNKNOWN = 0, + /** + * scRGB linear encoding: + * + * The red, green, and blue components are stored in extended sRGB space, + * but are linear, not gamma-encoded. + * The RGB primaries and the white point are the same as BT.709. + * + * The values are floating point. + * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. + * Values beyond the range [0.0 - 1.0] would correspond to other colors + * spaces and/or HDR content. + */ + ADATASPACE_SCRGB_LINEAR = 406913024, // STANDARD_BT709 | TRANSFER_LINEAR | RANGE_EXTENDED + /** + * sRGB gamma encoding: + * + * The red, green and blue components are stored in sRGB space, and + * converted to linear space when read, using the SRGB transfer function + * for each of the R, G and B components. When written, the inverse + * transformation is performed. + * + * The alpha component, if present, is always stored in linear space and + * is left unmodified when read or written. + * + * Use full range and BT.709 standard. + */ + ADATASPACE_SRGB = 142671872, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_FULL + /** + * scRGB: + * + * The red, green, and blue components are stored in extended sRGB space, + * but are linear, not gamma-encoded. + * The RGB primaries and the white point are the same as BT.709. + * + * The values are floating point. + * A pixel value of 1.0, 1.0, 1.0 corresponds to sRGB white (D65) at 80 nits. + * Values beyond the range [0.0 - 1.0] would correspond to other colors + * spaces and/or HDR content. + */ + ADATASPACE_SCRGB = 411107328, // STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED + /** + * Display P3 + * + * Use same primaries and white-point as DCI-P3 + * but sRGB transfer function. + */ + ADATASPACE_DISPLAY_P3 = 143261696, // STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_FULL + /** + * ITU-R Recommendation 2020 (BT.2020) + * + * Ultra High-definition television + * + * Use full range, SMPTE 2084 (PQ) transfer and BT2020 standard + */ + ADATASPACE_BT2020_PQ = 163971072, // STANDARD_BT2020 | TRANSFER_ST2084 | RANGE_FULL +}; +__END_DECLS +#endif // ANDROID_DATA_SPACE_H
\ No newline at end of file diff --git a/fake-android-guest/android/dlext.h b/fake-android-guest/android/dlext.h new file mode 100644 index 00000000..37459d4e --- /dev/null +++ b/fake-android-guest/android/dlext.h @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __ANDROID_DLEXT_H__ +#define __ANDROID_DLEXT_H__ + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> +#include <sys/cdefs.h> +#include <sys/types.h> /* for off64_t */ + +/** + * @addtogroup libdl Dynamic Linker + * @{ + */ + +/** + * \file + * Advanced dynamic library opening support. Most users will want to use + * the standard [dlopen(3)](http://man7.org/linux/man-pages/man3/dlopen.3.html) + * functionality in `<dlfcn.h>` instead. + */ + +__BEGIN_DECLS + +/** Bitfield definitions for `android_dlextinfo::flags`. */ +enum { + /** + * When set, the `reserved_addr` and `reserved_size` fields must point to an + * already-reserved region of address space which will be used to load the + * library if it fits. + * + * If the reserved region is not large enough, loading will fail. + */ + ANDROID_DLEXT_RESERVED_ADDRESS = 0x1, + + /** + * Like `ANDROID_DLEXT_RESERVED_ADDRESS`, but if the reserved region is not large enough, + * the linker will choose an available address instead. + */ + ANDROID_DLEXT_RESERVED_ADDRESS_HINT = 0x2, + + /** + * When set, write the GNU RELRO section of the mapped library to `relro_fd` + * after relocation has been performed, to allow it to be reused by another + * process loading the same library at the same address. This implies + * `ANDROID_DLEXT_USE_RELRO`. + * + * This is mainly useful for the system WebView implementation. + */ + ANDROID_DLEXT_WRITE_RELRO = 0x4, + + /** + * When set, compare the GNU RELRO section of the mapped library to `relro_fd` + * after relocation has been performed, and replace any relocated pages that + * are identical with a version mapped from the file. + * + * This is mainly useful for the system WebView implementation. + */ + ANDROID_DLEXT_USE_RELRO = 0x8, + + /** + * Use `library_fd` instead of opening the file by name. + * The filename parameter is still used to identify the library. + */ + ANDROID_DLEXT_USE_LIBRARY_FD = 0x10, + + /** + * If opening a library using `library_fd` read it starting at `library_fd_offset`. + * This is mainly useful for loading a library stored within another file (such as uncompressed + * inside a ZIP archive). + * This flag is only valid when `ANDROID_DLEXT_USE_LIBRARY_FD` is set. + */ + ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET = 0x20, + + /** + * When set, do not use `stat(2)` to check if the library has already been loaded. + * + * This flag allows forced loading of the library in the case when for some + * reason multiple ELF files share the same filename (because the already-loaded + * library has been removed and overwritten, for example). + * + * Note that if the library has the same `DT_SONAME` as an old one and some other + * library has the soname in its `DT_NEEDED` list, the first one will be used to resolve any + * dependencies. + */ + ANDROID_DLEXT_FORCE_LOAD = 0x40, + + /** + * When set, if the minimum `p_vaddr` of the ELF file's `PT_LOAD` segments is non-zero, + * the dynamic linker will load it at that address. + * + * This flag is for ART internal use only. + */ + ANDROID_DLEXT_FORCE_FIXED_VADDR = 0x80, + + /** + * Instructs dlopen to load the library at the address specified by reserved_addr. + * + * The difference between `ANDROID_DLEXT_LOAD_AT_FIXED_ADDRESS` and + * `ANDROID_DLEXT_RESERVED_ADDRESS` is that for `ANDROID_DLEXT_LOAD_AT_FIXED_ADDRESS` the linker + * reserves memory at `reserved_addr` whereas for `ANDROID_DLEXT_RESERVED_ADDRESS` the linker + * relies on the caller to reserve the memory. + * + * This flag can be used with `ANDROID_DLEXT_FORCE_FIXED_VADDR`. When + * `ANDROID_DLEXT_FORCE_FIXED_VADDR` is set and `load_bias` is not 0 (`load_bias` is the + * minimum `p_vaddr` of all `PT_LOAD` segments) this flag is ignored because the linker has to + * pick one address over the other and this way is more convenient for ART. + * Note that `ANDROID_DLEXT_FORCE_FIXED_VADDR` does not generate an error when the minimum + * `p_vaddr` is 0. + * + * Cannot be used with `ANDROID_DLEXT_RESERVED_ADDRESS` or `ANDROID_DLEXT_RESERVED_ADDRESS_HINT`. + * + * This flag is for ART internal use only. + */ + ANDROID_DLEXT_LOAD_AT_FIXED_ADDRESS = 0x100, + + /** + * This flag used to load library in a different namespace. The namespace is + * specified in `library_namespace`. + * + * This flag is for internal use only (since there is no NDK API for namespaces). + */ + ANDROID_DLEXT_USE_NAMESPACE = 0x200, + + /** Mask of valid bits. */ + ANDROID_DLEXT_VALID_FLAG_BITS = ANDROID_DLEXT_RESERVED_ADDRESS | + ANDROID_DLEXT_RESERVED_ADDRESS_HINT | + ANDROID_DLEXT_WRITE_RELRO | + ANDROID_DLEXT_USE_RELRO | + ANDROID_DLEXT_USE_LIBRARY_FD | + ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET | + ANDROID_DLEXT_FORCE_LOAD | + ANDROID_DLEXT_FORCE_FIXED_VADDR | + ANDROID_DLEXT_LOAD_AT_FIXED_ADDRESS | + ANDROID_DLEXT_USE_NAMESPACE, +}; + +struct android_namespace_t; + +typedef int64_t off64_t; + +/** Used to pass Android-specific arguments to `android_dlopen_ext`. */ +typedef struct { + /** A bitmask of `ANDROID_DLEXT_` enum values. */ + uint64_t flags; + + /** Used by `ANDROID_DLEXT_RESERVED_ADDRESS` and `ANDROID_DLEXT_RESERVED_ADDRESS_HINT`. */ + void* reserved_addr; + /** Used by `ANDROID_DLEXT_RESERVED_ADDRESS` and `ANDROID_DLEXT_RESERVED_ADDRESS_HINT`. */ + size_t reserved_size; + + /** Used by `ANDROID_DLEXT_WRITE_RELRO` and `ANDROID_DLEXT_USE_RELRO`. */ + int relro_fd; + + /** Used by `ANDROID_DLEXT_USE_LIBRARY_FD`. */ + int library_fd; + /** Used by `ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET` */ + off64_t library_fd_offset; + + /** Used by `ANDROID_DLEXT_USE_NAMESPACE`. */ + struct android_namespace_t* library_namespace; +} android_dlextinfo; + +/** + * Opens the given library. The `__filename` and `__flags` arguments are + * the same as for [dlopen(3)](http://man7.org/linux/man-pages/man3/dlopen.3.html), + * with the Android-specific flags supplied via the `flags` member of `__info`. + * + * Available since API level 21. + */ +static inline void* android_dlopen_ext(const char* __filename, + int __flags, + const android_dlextinfo* __info) { + return dlopen(__filename, __flags); +} + +__END_DECLS + +/** @} */ + +#endif diff --git a/fake-android-guest/android/hardware_buffer.h b/fake-android-guest/android/hardware_buffer.h new file mode 100644 index 00000000..a4e83bca --- /dev/null +++ b/fake-android-guest/android/hardware_buffer.h @@ -0,0 +1,388 @@ +/* + * Copyright 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file hardware_buffer.h + * @brief API for native hardware buffers. + */ +/** + * @defgroup AHardwareBuffer Native Hardware Buffer + * + * AHardwareBuffer objects represent chunks of memory that can be + * accessed by various hardware components in the system. It can be + * easily converted to the Java counterpart + * android.hardware.HardwareBuffer and passed between processes using + * Binder. All operations involving AHardwareBuffer and HardwareBuffer + * are zero-copy, i.e., passing AHardwareBuffer to another process + * creates a shared view of the same region of memory. + * + * AHardwareBuffers can be bound to EGL/OpenGL and Vulkan primitives. + * For EGL, use the extension function eglGetNativeClientBufferANDROID + * to obtain an EGLClientBuffer and pass it directly to + * eglCreateImageKHR. Refer to the EGL extensions + * EGL_ANDROID_get_native_client_buffer and + * EGL_ANDROID_image_native_buffer for more information. In Vulkan, + * the contents of the AHardwareBuffer can be accessed as external + * memory. See the VK_ANDROID_external_memory_android_hardware_buffer + * extension for details. + * + * @{ + */ +#ifndef ANDROID_HARDWARE_BUFFER_H +#define ANDROID_HARDWARE_BUFFER_H +#include <inttypes.h> +#include <sys/cdefs.h> +#include <android/rect.h> +#include <android/versioning.h> +__BEGIN_DECLS +/** + * Buffer pixel formats. + */ +enum AHardwareBuffer_Format { + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_R8G8B8A8_UNORM + * OpenGL ES: GL_RGBA8 + */ + AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1, + /** + * 32 bits per pixel, 8 bits per channel format where alpha values are + * ignored (always opaque). + * Corresponding formats: + * Vulkan: VK_FORMAT_R8G8B8A8_UNORM + * OpenGL ES: GL_RGB8 + */ + AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_R8G8B8_UNORM + * OpenGL ES: GL_RGB8 + */ + AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_R5G6B5_UNORM_PACK16 + * OpenGL ES: GL_RGB565 + */ + AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_R16G16B16A16_SFLOAT + * OpenGL ES: GL_RGBA16F + */ + AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = 0x16, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_A2B10G10R10_UNORM_PACK32 + * OpenGL ES: GL_RGB10_A2 + */ + AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = 0x2b, + /** + * Opaque binary blob format. + * Must have height 1 and one layer, with width equal to the buffer + * size in bytes. Corresponds to Vulkan buffers and OpenGL buffer + * objects. Can be bound to the latter using GL_EXT_external_buffer. + */ + AHARDWAREBUFFER_FORMAT_BLOB = 0x21, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_D16_UNORM + * OpenGL ES: GL_DEPTH_COMPONENT16 + */ + AHARDWAREBUFFER_FORMAT_D16_UNORM = 0x30, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_X8_D24_UNORM_PACK32 + * OpenGL ES: GL_DEPTH_COMPONENT24 + */ + AHARDWAREBUFFER_FORMAT_D24_UNORM = 0x31, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_D24_UNORM_S8_UINT + * OpenGL ES: GL_DEPTH24_STENCIL8 + */ + AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT = 0x32, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_D32_SFLOAT + * OpenGL ES: GL_DEPTH_COMPONENT32F + */ + AHARDWAREBUFFER_FORMAT_D32_FLOAT = 0x33, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_D32_SFLOAT_S8_UINT + * OpenGL ES: GL_DEPTH32F_STENCIL8 + */ + AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT = 0x34, + /** + * Corresponding formats: + * Vulkan: VK_FORMAT_S8_UINT + * OpenGL ES: GL_STENCIL_INDEX8 + */ + AHARDWAREBUFFER_FORMAT_S8_UINT = 0x35, +}; +/** + * Buffer usage flags, specifying how the buffer will be accessed. + */ +enum AHardwareBuffer_UsageFlags { + /// The buffer will never be locked for direct CPU reads using the + /// AHardwareBuffer_lock() function. Note that reading the buffer + /// using OpenGL or Vulkan functions or memory mappings is still + /// allowed. + AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0UL, + /// The buffer will sometimes be locked for direct CPU reads using + /// the AHardwareBuffer_lock() function. Note that reading the + /// buffer using OpenGL or Vulkan functions or memory mappings + /// does not require the presence of this flag. + AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2UL, + /// The buffer will often be locked for direct CPU reads using + /// the AHardwareBuffer_lock() function. Note that reading the + /// buffer using OpenGL or Vulkan functions or memory mappings + /// does not require the presence of this flag. + AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3UL, + /// CPU read value mask. + AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 0xFUL, + /// The buffer will never be locked for direct CPU writes using the + /// AHardwareBuffer_lock() function. Note that writing the buffer + /// using OpenGL or Vulkan functions or memory mappings is still + /// allowed. + AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0UL << 4, + /// The buffer will sometimes be locked for direct CPU writes using + /// the AHardwareBuffer_lock() function. Note that writing the + /// buffer using OpenGL or Vulkan functions or memory mappings + /// does not require the presence of this flag. + AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 2UL << 4, + /// The buffer will often be locked for direct CPU writes using + /// the AHardwareBuffer_lock() function. Note that writing the + /// buffer using OpenGL or Vulkan functions or memory mappings + /// does not require the presence of this flag. + AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 3UL << 4, + /// CPU write value mask. + AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 0xFUL << 4, + /// The buffer will be read from by the GPU as a texture. + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8, + /** + * The buffer will be written to by the GPU as a framebuffer + * attachment. + * + * Note that the name of this flag is somewhat misleading: it does + * not imply that the buffer contains a color format. A buffer with + * depth or stencil format that will be used as a framebuffer + * attachment should also have this flag. + */ + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 1UL << 9, + /** + * The buffer is protected from direct CPU access or being read by + * non-secure hardware, such as video encoders. + * + * This flag is incompatible with CPU read and write flags. It is + * mainly used when handling DRM video. Refer to the EGL extension + * EGL_EXT_protected_content and GL extension + * GL_EXT_protected_textures for more information on how these + * buffers are expected to behave. + */ + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14, + /// The buffer will be read by a hardware video encoder. + AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 1UL << 16, + /** + * The buffer will be used for direct writes from sensors. + * When this flag is present, the format must be AHARDWAREBUFFER_FORMAT_BLOB. + */ + AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 1UL << 23, + /** + * The buffer will be used as a shader storage or uniform buffer object. + * When this flag is present, the format must be AHARDWAREBUFFER_FORMAT_BLOB. + */ + AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 1UL << 24, + /** + * The buffer will be used as a cube map texture. + * When this flag is present, the buffer must have a layer count + * that is a multiple of 6. Note that buffers with this flag must be + * bound to OpenGL textures using the extension + * GL_EXT_EGL_image_storage instead of GL_KHR_EGL_image. + */ + AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP = 1UL << 25, + /** + * The buffer contains a complete mipmap hierarchy. + * Note that buffers with this flag must be bound to OpenGL textures using + * the extension GL_EXT_EGL_image_storage instead of GL_KHR_EGL_image. + */ + AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE = 1UL << 26, + AHARDWAREBUFFER_USAGE_VENDOR_0 = 1ULL << 28, + AHARDWAREBUFFER_USAGE_VENDOR_1 = 1ULL << 29, + AHARDWAREBUFFER_USAGE_VENDOR_2 = 1ULL << 30, + AHARDWAREBUFFER_USAGE_VENDOR_3 = 1ULL << 31, + AHARDWAREBUFFER_USAGE_VENDOR_4 = 1ULL << 48, + AHARDWAREBUFFER_USAGE_VENDOR_5 = 1ULL << 49, + AHARDWAREBUFFER_USAGE_VENDOR_6 = 1ULL << 50, + AHARDWAREBUFFER_USAGE_VENDOR_7 = 1ULL << 51, + AHARDWAREBUFFER_USAGE_VENDOR_8 = 1ULL << 52, + AHARDWAREBUFFER_USAGE_VENDOR_9 = 1ULL << 53, + AHARDWAREBUFFER_USAGE_VENDOR_10 = 1ULL << 54, + AHARDWAREBUFFER_USAGE_VENDOR_11 = 1ULL << 55, + AHARDWAREBUFFER_USAGE_VENDOR_12 = 1ULL << 56, + AHARDWAREBUFFER_USAGE_VENDOR_13 = 1ULL << 57, + AHARDWAREBUFFER_USAGE_VENDOR_14 = 1ULL << 58, + AHARDWAREBUFFER_USAGE_VENDOR_15 = 1ULL << 59, + AHARDWAREBUFFER_USAGE_VENDOR_16 = 1ULL << 60, + AHARDWAREBUFFER_USAGE_VENDOR_17 = 1ULL << 61, + AHARDWAREBUFFER_USAGE_VENDOR_18 = 1ULL << 62, + AHARDWAREBUFFER_USAGE_VENDOR_19 = 1ULL << 63, +}; +/** + * Buffer description. Used for allocating new buffers and querying + * parameters of existing ones. + */ +typedef struct AHardwareBuffer_Desc { + uint32_t width; ///< Width in pixels. + uint32_t height; ///< Height in pixels. + /** + * Number of images in an image array. AHardwareBuffers with one + * layer correspond to regular 2D textures. AHardwareBuffers with + * more than layer correspond to texture arrays. If the layer count + * is a multiple of 6 and the usage flag + * AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP is present, the buffer is + * a cube map or a cube map array. + */ + uint32_t layers; + uint32_t format; ///< One of AHardwareBuffer_Format. + uint64_t usage; ///< Combination of AHardwareBuffer_UsageFlags. + uint32_t stride; ///< Row stride in pixels, ignored for AHardwareBuffer_allocate() + uint32_t rfu0; ///< Initialize to zero, reserved for future use. + uint64_t rfu1; ///< Initialize to zero, reserved for future use. +} AHardwareBuffer_Desc; +/** + * Opaque handle for a native hardware buffer. + */ +typedef struct AHardwareBuffer AHardwareBuffer; +#if __ANDROID_API__ >= 26 +/** + * Allocates a buffer that matches the passed AHardwareBuffer_Desc. + * + * If allocation succeeds, the buffer can be used according to the + * usage flags specified in its description. If a buffer is used in ways + * not compatible with its usage flags, the results are undefined and + * may include program termination. + * + * \return 0 on success, or an error number of the allocation fails for + * any reason. The returned buffer has a reference count of 1. + */ +int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, + AHardwareBuffer** outBuffer) __INTRODUCED_IN(26); +/** + * Acquire a reference on the given AHardwareBuffer object. + * + * This prevents the object from being deleted until the last reference + * is removed. + */ +void AHardwareBuffer_acquire(AHardwareBuffer* buffer) __INTRODUCED_IN(26); +/** + * Remove a reference that was previously acquired with + * AHardwareBuffer_acquire() or AHardwareBuffer_allocate(). + */ +void AHardwareBuffer_release(AHardwareBuffer* buffer) __INTRODUCED_IN(26); +/** + * Return a description of the AHardwareBuffer in the passed + * AHardwareBuffer_Desc struct. + */ +void AHardwareBuffer_describe(const AHardwareBuffer* buffer, + AHardwareBuffer_Desc* outDesc) __INTRODUCED_IN(26); +/** + * Lock the AHardwareBuffer for direct CPU access. + * + * This function can lock the buffer for either reading or writing. + * It may block if the hardware needs to finish rendering, if CPU caches + * need to be synchronized, or possibly for other implementation- + * specific reasons. + * + * The passed AHardwareBuffer must have one layer, otherwise the call + * will fail. + * + * If \a fence is not negative, it specifies a fence file descriptor on + * which to wait before locking the buffer. If it's negative, the caller + * is responsible for ensuring that writes to the buffer have completed + * before calling this function. Using this parameter is more efficient + * than waiting on the fence and then calling this function. + * + * The \a usage parameter may only specify AHARDWAREBUFFER_USAGE_CPU_*. + * If set, then outVirtualAddress is filled with the address of the + * buffer in virtual memory. The flags must also be compatible with + * usage flags specified at buffer creation: if a read flag is passed, + * the buffer must have been created with + * AHARDWAREBUFFER_USAGE_CPU_READ_RARELY or + * AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN. If a write flag is passed, it + * must have been created with AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY or + * AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN. + * + * If \a rect is not NULL, the caller promises to modify only data in + * the area specified by rect. If rect is NULL, the caller may modify + * the contents of the entire buffer. The content of the buffer outside + * of the specified rect is NOT modified by this call. + * + * It is legal for several different threads to lock a buffer for read + * access; none of the threads are blocked. + * + * Locking a buffer simultaneously for write or read/write is undefined, + * but will neither terminate the process nor block the caller. + * AHardwareBuffer_lock may return an error or leave the buffer's + * content in an indeterminate state. + * + * If the buffer has AHARDWAREBUFFER_FORMAT_BLOB, it is legal lock it + * for reading and writing in multiple threads and/or processes + * simultaneously, and the contents of the buffer behave like shared + * memory. + * + * \return 0 on success. -EINVAL if \a buffer is NULL, the usage flags + * are not a combination of AHARDWAREBUFFER_USAGE_CPU_*, or the buffer + * has more than one layer. Error number if the lock fails for any other + * reason. + */ +int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage, + int32_t fence, const ARect* rect, void** outVirtualAddress) __INTRODUCED_IN(26); +/** + * Unlock the AHardwareBuffer from direct CPU access. + * + * Must be called after all changes to the buffer are completed by the + * caller. If \a fence is NULL, the function will block until all work + * is completed. Otherwise, \a fence will be set either to a valid file + * descriptor or to -1. The file descriptor will become signaled once + * the unlocking is complete and buffer contents are updated. + * The caller is responsible for closing the file descriptor once it's + * no longer needed. The value -1 indicates that unlocking has already + * completed before the function returned and no further operations are + * necessary. + * + * \return 0 on success. -EINVAL if \a buffer is NULL. Error number if + * the unlock fails for any reason. + */ +int AHardwareBuffer_unlock(AHardwareBuffer* buffer, int32_t* fence) __INTRODUCED_IN(26); +/** + * Send the AHardwareBuffer to an AF_UNIX socket. + * + * \return 0 on success, -EINVAL if \a buffer is NULL, or an error + * number if the operation fails for any reason. + */ +int AHardwareBuffer_sendHandleToUnixSocket(const AHardwareBuffer* buffer, int socketFd) __INTRODUCED_IN(26); +/** + * Receive an AHardwareBuffer from an AF_UNIX socket. + * + * \return 0 on success, -EINVAL if \a outBuffer is NULL, or an error + * number if the operation fails for any reason. + */ +int AHardwareBuffer_recvHandleFromUnixSocket(int socketFd, AHardwareBuffer** outBuffer) __INTRODUCED_IN(26); +#endif // __ANDROID_API__ >= 26 +__END_DECLS +#endif // ANDROID_HARDWARE_BUFFER_H +/** @} */ diff --git a/fake-android-guest/android/log.h b/fake-android-guest/android/log.h new file mode 100644 index 00000000..ee9220d4 --- /dev/null +++ b/fake-android-guest/android/log.h @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ANDROID_LOG_H +#define _ANDROID_LOG_H + +/****************************************************************** + * + * IMPORTANT NOTICE: + * + * This file is part of Android's set of stable system headers + * exposed by the Android NDK (Native Development Kit) since + * platform release 1.5 + * + * Third-party source AND binary code relies on the definitions + * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. + * + * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) + * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS + * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY + * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES + */ + +/** + * @addtogroup Logging + * @{ + */ + +/** + * \file + * + * Support routines to send messages to the Android log buffer, + * which can later be accessed through the `logcat` utility. + * + * Each log message must have + * - a priority + * - a log tag + * - some text + * + * The tag normally corresponds to the component that emits the log message, + * and should be reasonably small. + * + * Log message text may be truncated to less than an implementation-specific + * limit (1023 bytes). + * + * Note that a newline character ("\n") will be appended automatically to your + * log message, if not already there. It is not possible to send several + * messages and have them appear on a single line in logcat. + * + * Please use logging in moderation: + * + * - Sending log messages eats CPU and slow down your application and the + * system. + * + * - The circular log buffer is pretty small, so sending many messages + * will hide other important log messages. + * + * - In release builds, only send log messages to account for exceptional + * conditions. + */ + +#include <stdarg.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Android log priority values, in increasing order of priority. + */ +typedef enum android_LogPriority { + /** For internal use only. */ + ANDROID_LOG_UNKNOWN = 0, + /** The default priority, for internal use only. */ + ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ + /** Verbose logging. Should typically be disabled for a release apk. */ + ANDROID_LOG_VERBOSE, + /** Debug logging. Should typically be disabled for a release apk. */ + ANDROID_LOG_DEBUG, + /** Informational logging. Should typically be disabled for a release apk. */ + ANDROID_LOG_INFO, + /** Warning logging. For use with recoverable failures. */ + ANDROID_LOG_WARN, + /** Error logging. For use with unrecoverable failures. */ + ANDROID_LOG_ERROR, + /** Fatal logging. For use when aborting. */ + ANDROID_LOG_FATAL, + /** For internal use only. */ + ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ +} android_LogPriority; + +/** + * Writes the constant string `text` to the log, with priority `prio` and tag + * `tag`. + */ +int __android_log_write(int prio, const char* tag, const char* text); + +/** + * Writes a formatted string to the log, with priority `prio` and tag `tag`. + * The details of formatting are the same as for + * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html). + */ +int __android_log_print(int prio, const char* tag, const char* fmt, ...) +#if defined(__GNUC__) + __attribute__((__format__(printf, 3, 4))) +#endif + ; + +/** + * Equivalent to `__android_log_print`, but taking a `va_list`. + * (If `__android_log_print` is like `printf`, this is like `vprintf`.) + */ +int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap) +#if defined(__GNUC__) + __attribute__((__format__(printf, 3, 0))) +#endif + ; + +/** + * Writes an assertion failure to the log (as `ANDROID_LOG_FATAL`) and to + * stderr, before calling + * [abort(3)](http://man7.org/linux/man-pages/man3/abort.3.html). + * + * If `fmt` is non-null, `cond` is unused. If `fmt` is null, the string + * `Assertion failed: %s` is used with `cond` as the string argument. + * If both `fmt` and `cond` are null, a default string is provided. + * + * Most callers should use + * [assert(3)](http://man7.org/linux/man-pages/man3/assert.3.html) from + * `<assert.h>` instead, or the `__assert` and `__assert2` functions provided by + * bionic if more control is needed. They support automatically including the + * source filename and line number more conveniently than this function. + */ +void __android_log_assert(const char* cond, const char* tag, const char* fmt, + ...) +#if defined(__GNUC__) + __attribute__((__noreturn__)) + __attribute__((__format__(printf, 3, 4))) +#endif + ; + +#ifndef log_id_t_defined +#define log_id_t_defined +typedef enum log_id { + LOG_ID_MIN = 0, + + LOG_ID_MAIN = 0, + LOG_ID_RADIO = 1, + LOG_ID_EVENTS = 2, + LOG_ID_SYSTEM = 3, + LOG_ID_CRASH = 4, + LOG_ID_STATS = 5, + LOG_ID_SECURITY = 6, + LOG_ID_KERNEL = 7, /* place last, third-parties can not use it */ + + LOG_ID_MAX +} log_id_t; +#endif + +/* + * Send a simple string to the log. + */ +int __android_log_buf_write(int bufID, int prio, const char* tag, + const char* text); +int __android_log_buf_print(int bufID, int prio, const char* tag, + const char* fmt, ...) +#if defined(__GNUC__) + __attribute__((__format__(printf, 4, 5))) +#endif + ; + +#ifdef __cplusplus +} +#endif + +/** @} */ + +#endif /* _ANDROID_LOG_H */ diff --git a/fake-android-guest/android/native_window.h b/fake-android-guest/android/native_window.h new file mode 100644 index 00000000..6e1b6d8b --- /dev/null +++ b/fake-android-guest/android/native_window.h @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @addtogroup NativeActivity Native Activity + * @{ + */ +/** + * @file native_window.h + * @brief API for accessing a native window. + */ +#ifndef ANDROID_NATIVE_WINDOW_H +#define ANDROID_NATIVE_WINDOW_H +#include <sys/cdefs.h> +#include <android/hardware_buffer.h> +#include <android/rect.h> +#ifdef __cplusplus +extern "C" { +#endif +/** + * Legacy window pixel format names, kept for backwards compatibility. + * New code and APIs should use AHARDWAREBUFFER_FORMAT_*. + */ +enum { + // NOTE: these values must match the values from graphics/common/x.x/types.hal + /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/ + WINDOW_FORMAT_RGBA_8888 = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, + /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Unused: 8 bits. **/ + WINDOW_FORMAT_RGBX_8888 = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM, + /** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/ + WINDOW_FORMAT_RGB_565 = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM, +}; +/** + * Transforms that can be applied to buffers as they are displayed to a window. + * + * Supported transforms are any combination of horizontal mirror, vertical + * mirror, and clockwise 90 degree rotation, in that order. Rotations of 180 + * and 270 degrees are made up of those basic transforms. + */ +enum ANativeWindowTransform { + ANATIVEWINDOW_TRANSFORM_IDENTITY = 0x00, + ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = 0x01, + ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = 0x02, + ANATIVEWINDOW_TRANSFORM_ROTATE_90 = 0x04, + ANATIVEWINDOW_TRANSFORM_ROTATE_180 = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | + ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL, + ANATIVEWINDOW_TRANSFORM_ROTATE_270 = ANATIVEWINDOW_TRANSFORM_ROTATE_180 | + ANATIVEWINDOW_TRANSFORM_ROTATE_90, +}; +struct ANativeWindow; +/** + * Opaque type that provides access to a native window. + * + * A pointer can be obtained using {@link ANativeWindow_fromSurface()}. + */ +typedef struct ANativeWindow ANativeWindow; +/** + * Struct that represents a windows buffer. + * + * A pointer can be obtained using {@link ANativeWindow_lock()}. + */ +typedef struct ANativeWindow_Buffer { + // The number of pixels that are show horizontally. + int32_t width; + // The number of pixels that are shown vertically. + int32_t height; + // The number of *pixels* that a line in the buffer takes in + // memory. This may be >= width. + int32_t stride; + // The format of the buffer. One of AHARDWAREBUFFER_FORMAT_* + int32_t format; + // The actual bits. + void* bits; + // Do not touch. + uint32_t reserved[6]; +} ANativeWindow_Buffer; +/** + * Acquire a reference on the given {@link ANativeWindow} object. This prevents the object + * from being deleted until the reference is removed. + */ +void ANativeWindow_acquire(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Remove a reference that was previously acquired with {@link ANativeWindow_acquire()}. + */ +void ANativeWindow_release(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Return the current width in pixels of the window surface. + * + * \return negative value on error. + */ +int32_t ANativeWindow_getWidth(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Return the current height in pixels of the window surface. + * + * \return a negative value on error. + */ +int32_t ANativeWindow_getHeight(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Return the current pixel format (AHARDWAREBUFFER_FORMAT_*) of the window surface. + * + * \return a negative value on error. + */ +int32_t ANativeWindow_getFormat(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Change the format and size of the window buffers. + * + * The width and height control the number of pixels in the buffers, not the + * dimensions of the window on screen. If these are different than the + * window's physical size, then its buffer will be scaled to match that size + * when compositing it to the screen. The width and height must be either both zero + * or both non-zero. + * + * For all of these parameters, if 0 is supplied then the window's base + * value will come back in force. + * + * \param width width of the buffers in pixels. + * \param height height of the buffers in pixels. + * \param format one of AHARDWAREBUFFER_FORMAT_* constants. + * \return 0 for success, or a negative value on error. + */ +int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, + int32_t width, int32_t height, int32_t format) __INTRODUCED_IN(26); +/** + * Lock the window's next drawing surface for writing. + * inOutDirtyBounds is used as an in/out parameter, upon entering the + * function, it contains the dirty region, that is, the region the caller + * intends to redraw. When the function returns, inOutDirtyBounds is updated + * with the actual area the caller needs to redraw -- this region is often + * extended by {@link ANativeWindow_lock}. + * + * \return 0 for success, or a negative value on error. + */ +int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, + ARect* inOutDirtyBounds) __INTRODUCED_IN(26); +/** + * Unlock the window's drawing surface after previously locking it, + * posting the new buffer to the display. + * + * \return 0 for success, or a negative value on error. + */ +int32_t ANativeWindow_unlockAndPost(ANativeWindow* window) __INTRODUCED_IN(26); +/** + * Set a transform that will be applied to future buffers posted to the window. + * + * \param transform combination of {@link ANativeWindowTransform} flags + * \return 0 for success, or -EINVAL if \p transform is invalid + */ +int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform) __INTRODUCED_IN(26); +#ifdef __cplusplus +}; +#endif +#endif // ANDROID_NATIVE_WINDOW_H +/** @} */ diff --git a/fake-android-guest/android/rect.h b/fake-android-guest/android/rect.h new file mode 100644 index 00000000..61612743 --- /dev/null +++ b/fake-android-guest/android/rect.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @addtogroup NativeActivity Native Activity + * @{ + */ +/** + * @file rect.h + */ +#ifndef ANDROID_RECT_H +#define ANDROID_RECT_H +#include <stdint.h> +#ifdef __cplusplus +extern "C" { +#endif +/** + * {@link ARect} is a struct that represents a rectangular window area. + * + * It is used with {@link + * ANativeActivityCallbacks::onContentRectChanged} event callback and + * ANativeWindow_lock() function. + */ +typedef struct ARect { +#ifdef __cplusplus + typedef int32_t value_type; +#endif + /** left position */ + int32_t left; + /** top position */ + int32_t top; + /** left position */ + int32_t right; + /** bottom position */ + int32_t bottom; +} ARect; +#ifdef __cplusplus +}; +#endif +#endif // ANDROID_RECT_H +/** @} */ diff --git a/fake-android-guest/android/versioning.h b/fake-android-guest/android/versioning.h new file mode 100644 index 00000000..56f6053d --- /dev/null +++ b/fake-android-guest/android/versioning.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef ANDROID_VERSIONING_H +#define ANDROID_VERSIONING_H +#define __INTRODUCED_IN(api_level) __attribute__((annotate("introduced_in=" #api_level))) +#define __INTRODUCED_IN_FUTURE __attribute__((annotate("introduced_in_future"))) +#define __DEPRECATED_IN(api_level) __attribute__((annotate("deprecated_in=" #api_level))) +#define __REMOVED_IN(api_level) __attribute__((annotate("obsoleted_in=" #api_level))) +#define __INTRODUCED_IN_32(api_level) __attribute__((annotate("introduced_in_32=" #api_level))) +#define __INTRODUCED_IN_64(api_level) __attribute__((annotate("introduced_in_64=" #api_level))) +#define __INTRODUCED_IN_ARM(api_level) __attribute__((annotate("introduced_in_arm=" #api_level))) +#define __INTRODUCED_IN_X86(api_level) __attribute__((annotate("introduced_in_x86=" #api_level))) +#define __INTRODUCED_IN_MIPS(api_level) __attribute__((annotate("introduced_in_mips=" #api_level))) +#define __VERSIONER_NO_GUARD __attribute__((annotate("versioner_no_guard"))) +#endif /* ANDROID_VERSIONING_H */ |