Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qtsymbolmacros.h
Go to the documentation of this file.
1
// Copyright (C) 2023 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#ifndef QTSYMBOLMACROS_H
5
#define QTSYMBOLMACROS_H
6
7
#if 0
8
# pragma qt_sync_stop_processing
9
#endif
10
11
// For GHS symbol keeping.
12
#include <QtCore/qcompilerdetection.h>
13
#include <QtCore/qtpreprocessorsupport.h>
14
15
// For handling namespaced resources.
16
#ifdef QT_NAMESPACE
17
# define QT_RCC_MANGLE_NAMESPACE0(x) x
18
# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b
19
# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)
20
# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \
21
QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))
22
#else
23
# define QT_RCC_MANGLE_NAMESPACE(name) name
24
#endif
25
26
// GHS needs special handling to keep a symbol around.
27
#if defined(Q_CC_GHS)
28
# define Q_GHS_KEEP_REFERENCE(S) QT_DO_PRAGMA(ghs reference S ##__Fv)
29
#else
30
# define Q_GHS_KEEP_REFERENCE(S)
31
#endif
32
33
// Macros to ensure a symbol is not dropped by the linker even if it's not used.
34
#define QT_DECLARE_EXTERN_SYMBOL(NAME, RETURN_TYPE) \
35
extern RETURN_TYPE NAME(); \
36
Q_GHS_KEEP_REFERENCE(NAME)
37
38
#define QT_DECLARE_EXTERN_SYMBOL_INT(NAME) \
39
QT_DECLARE_EXTERN_SYMBOL(NAME, int)
40
41
#define QT_DECLARE_EXTERN_SYMBOL_VOID(NAME) \
42
QT_DECLARE_EXTERN_SYMBOL(NAME, void)
43
44
#define QT_KEEP_SYMBOL_VAR_NAME(NAME) NAME ## _keep
45
46
#define QT_KEEP_SYMBOL_HELPER(NAME, VAR_NAME) \
47
volatile auto VAR_NAME = &NAME; \
48
Q_UNUSED(VAR_NAME)
49
50
#define QT_KEEP_SYMBOL(NAME) \
51
QT_KEEP_SYMBOL_HELPER(NAME, QT_KEEP_SYMBOL_VAR_NAME(NAME))
52
53
54
// Similar to the ones above, but for rcc resource symbols specifically.
55
#define QT_GET_RESOURCE_INIT_SYMBOL(NAME) \
56
QT_RCC_MANGLE_NAMESPACE(qInitResources_ ## NAME)
57
58
#define QT_DECLARE_EXTERN_RESOURCE(NAME) \
59
QT_DECLARE_EXTERN_SYMBOL_INT(QT_GET_RESOURCE_INIT_SYMBOL(NAME))
60
61
#define QT_KEEP_RESOURCE(NAME) \
62
QT_KEEP_SYMBOL(QT_GET_RESOURCE_INIT_SYMBOL(NAME))
63
64
#endif
// QTSYMBOLMACROS_H
65
qtbase
src
corelib
global
qtsymbolmacros.h
Generated by
1.10.0