blob: e527ff6bc45af61150b1cc7513a19dd2a81345fe [file] [log] [blame]
Anders Carlsson7bca8ca2018-08-30 09:30:29 +02001/*
2 * Copyright 2016 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef SDK_OBJC_BASE_RTCMACROS_H_
12#define SDK_OBJC_BASE_RTCMACROS_H_
13
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020014// Internal macros used to correctly concatenate symbols.
15#define RTC_SYMBOL_CONCAT_HELPER(a, b) a##b
16#define RTC_SYMBOL_CONCAT(a, b) RTC_SYMBOL_CONCAT_HELPER(a, b)
17
18// RTC_OBJC_TYPE_PREFIX
19//
20// Macro used to prepend a prefix to the API types that are exported with
21// RTC_OBJC_EXPORT.
22//
23// Clients can patch the definition of this macro locally and build
24// WebRTC.framework with their own prefix in case symbol clashing is a
25// problem.
26//
27// This macro must only be defined here and not on via compiler flag to
28// ensure it has a unique value.
29#define RTC_OBJC_TYPE_PREFIX
30
31// RCT_OBJC_TYPE
32//
33// Macro used internally to declare API types. Declaring an API type without
34// using this macro will not include the declared type in the set of types
35// that will be affected by the configurable RTC_OBJC_TYPE_PREFIX.
36#define RTC_OBJC_TYPE(type_name) RTC_SYMBOL_CONCAT(RTC_OBJC_TYPE_PREFIX, type_name)
37
Mirko Bonadeie8d57242018-09-17 10:22:56 +020038#define RTC_OBJC_EXPORT __attribute__((visibility("default")))
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020039
40#if defined(__cplusplus)
Mirko Bonadeie8d57242018-09-17 10:22:56 +020041#define RTC_EXTERN extern "C" RTC_OBJC_EXPORT
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020042#else
Mirko Bonadeie8d57242018-09-17 10:22:56 +020043#define RTC_EXTERN extern RTC_OBJC_EXPORT
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020044#endif
45
46#ifdef __OBJC__
47#define RTC_FWD_DECL_OBJC_CLASS(classname) @class classname
48#else
49#define RTC_FWD_DECL_OBJC_CLASS(classname) typedef struct objc_object classname
50#endif
51
52#endif // SDK_OBJC_BASE_RTCMACROS_H_