1/*
2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * This file handles shared library symbol export decorations. It is recommended
26 * that all WebKit projects use these definitions so that symbol exports work
27 * properly on all platforms and compilers that WebKit builds under.
28 */
29
30#pragma once
31
32#include <wtf/Platform.h>
33
34// Different platforms have different defaults for symbol visibility. Usually
35// the compiler and the linker just take care of it. However for references to
36// runtime routines from JIT stubs, it matters to be able to declare a symbol as
37// being local to the target being generated, and thus not subject to (e.g.) ELF
38// symbol interposition rules.
39
40#if USE(DECLSPEC_ATTRIBUTE)
41#define HAVE_INTERNAL_VISIBILITY 1
42#define WTF_INTERNAL
43#elif USE(VISIBILITY_ATTRIBUTE)
44#define HAVE_INTERNAL_VISIBILITY 1
45#define WTF_INTERNAL __attribute__((visibility("hidden")))
46#else
47#define WTF_INTERNAL
48#endif
49
50#if USE(DECLSPEC_ATTRIBUTE)
51
52#define WTF_EXPORT_DECLARATION __declspec(dllexport)
53#define WTF_IMPORT_DECLARATION __declspec(dllimport)
54#define WTF_HIDDEN_DECLARATION
55
56#elif USE(VISIBILITY_ATTRIBUTE)
57
58#define WTF_EXPORT_DECLARATION __attribute__((visibility("default")))
59#define WTF_IMPORT_DECLARATION WTF_EXPORT_DECLARATION
60#define WTF_HIDDEN_DECLARATION __attribute__((visibility("hidden")))
61
62#else
63
64#define WTF_EXPORT_DECLARATION
65#define WTF_IMPORT_DECLARATION
66#define WTF_HIDDEN_DECLARATION
67
68#endif
69
70#if USE(EXPORT_MACROS)
71
72#define WTF_EXPORT WTF_EXPORT_DECLARATION
73#define WTF_IMPORT WTF_IMPORT_DECLARATION
74#define WTF_HIDDEN WTF_IMPORT_DECLARATION
75
76#if defined(BUILDING_WTF) || defined(STATICALLY_LINKED_WITH_WTF)
77#define WTF_EXPORT_PRIVATE WTF_EXPORT
78#else
79#define WTF_EXPORT_PRIVATE WTF_IMPORT
80#endif
81
82#else // !USE(EXPORT_MACROS)
83
84#define WTF_EXPORT
85#define WTF_IMPORT
86#define WTF_HIDDEN
87#define WTF_EXPORT_PRIVATE
88
89#endif // USE(EXPORT_MACROS)
90