1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Copyright (C) 2016 Intel Corporation. 5 ** Contact: https://www.qt.io/licensing/ 6 ** 7 ** This file is part of the QtCore module of the Qt Toolkit. 8 ** 9 ** $QT_BEGIN_LICENSE:LGPL$ 10 ** Commercial License Usage 11 ** Licensees holding valid commercial Qt licenses may use this file in 12 ** accordance with the commercial license agreement provided with the 13 ** Software or, alternatively, in accordance with the terms contained in 14 ** a written agreement between you and The Qt Company. For licensing terms 15 ** and conditions see https://www.qt.io/terms-conditions. For further 16 ** information use the contact form at https://www.qt.io/contact-us. 17 ** 18 ** GNU Lesser General Public License Usage 19 ** Alternatively, this file may be used under the terms of the GNU Lesser 20 ** General Public License version 3 as published by the Free Software 21 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 22 ** packaging of this file. Please review the following information to 23 ** ensure the GNU Lesser General Public License version 3 requirements 24 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 25 ** 26 ** GNU General Public License Usage 27 ** Alternatively, this file may be used under the terms of the GNU 28 ** General Public License version 2.0 or (at your option) the GNU General 29 ** Public license version 3 or any later version approved by the KDE Free 30 ** Qt Foundation. The licenses are as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 32 ** included in the packaging of this file. Please review the following 33 ** information to ensure the GNU General Public License requirements will 34 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 35 ** https://www.gnu.org/licenses/gpl-3.0.html. 36 ** 37 ** $QT_END_LICENSE$ 38 ** 39 ****************************************************************************/ 40 41 #include "qprocessordetection.h" 42 43 // main part: processor type 44 #if defined(Q_PROCESSOR_ALPHA) 45 # define ARCH_PROCESSOR "alpha" 46 #elif defined(Q_PROCESSOR_ARM_32) 47 # define ARCH_PROCESSOR "arm" 48 #elif defined(Q_PROCESSOR_ARM_64) 49 # define ARCH_PROCESSOR "arm64" 50 #elif defined(Q_PROCESSOR_AVR32) 51 # define ARCH_PROCESSOR "avr32" 52 #elif defined(Q_PROCESSOR_BLACKFIN) 53 # define ARCH_PROCESSOR "bfin" 54 #elif defined(Q_PROCESSOR_WASM) 55 # define ARCH_PROCESSOR "wasm" 56 #elif defined(Q_PROCESSOR_X86_32) 57 # define ARCH_PROCESSOR "i386" 58 #elif defined(Q_PROCESSOR_X86_64) 59 # define ARCH_PROCESSOR "x86_64" 60 #elif defined(Q_PROCESSOR_IA64) 61 # define ARCH_PROCESSOR "ia64" 62 #elif defined(Q_PROCESSOR_MIPS_64) 63 # define ARCH_PROCESSOR "mips64" 64 #elif defined(Q_PROCESSOR_MIPS) 65 # define ARCH_PROCESSOR "mips" 66 #elif defined(Q_PROCESSOR_POWER_32) 67 # define ARCH_PROCESSOR "power" 68 #elif defined(Q_PROCESSOR_POWER_64) 69 # define ARCH_PROCESSOR "power64" 70 #elif defined(Q_PROCESSOR_RISCV_32) 71 # define ARCH_PROCESSOR "riscv32" 72 #elif defined(Q_PROCESSOR_RISCV_64) 73 # define ARCH_PROCESSOR "riscv64" 74 #elif defined(Q_PROCESSOR_S390_X) 75 # define ARCH_PROCESSOR "s390x" 76 #elif defined(Q_PROCESSOR_S390) 77 # define ARCH_PROCESSOR "s390" 78 #elif defined(Q_PROCESSOR_SH) 79 # define ARCH_PROCESSOR "sh" 80 #elif defined(Q_PROCESSORS_SPARC_64) 81 # define ARCH_PROCESSOR "sparc64" 82 #elif defined(Q_PROCESSOR_SPARC_V9) 83 # define ARCH_PROCESSOR "sparcv9" 84 #elif defined(Q_PROCESSOR_SPARC) 85 # define ARCH_PROCESSOR "sparc" 86 #else 87 # define ARCH_PROCESSOR "unknown" 88 #endif 89 90 // endianness 91 #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN 92 # define ARCH_ENDIANNESS "little_endian" 93 #elif Q_BYTE_ORDER == Q_BIG_ENDIAN 94 # define ARCH_ENDIANNESS "big_endian" 95 #endif 96 97 // pointer type 98 #if defined(Q_OS_WIN64) || (defined(Q_OS_WINRT) && defined(_M_X64)) 99 # define ARCH_POINTER "llp64" 100 #elif defined(__LP64__) || QT_POINTER_SIZE - 0 == 8 101 # define ARCH_POINTER "lp64" 102 #else 103 # define ARCH_POINTER "ilp32" 104 #endif 105 106 // qreal type, if not double (includes the dash) 107 #ifdef QT_COORD_TYPE_STRING 108 # define ARCH_COORD_TYPE "-qreal_" QT_COORD_TYPE_STRING 109 #else 110 # define ARCH_COORD_TYPE "" 111 #endif 112 113 // secondary: ABI string (includes the dash) 114 #if defined(__ARM_EABI__) || defined(__mips_eabi) 115 # define ARCH_ABI1 "-eabi" 116 #elif defined(_MIPS_SIM) 117 # if _MIPS_SIM == _ABIO32 118 # define ARCH_ABI1 "-o32" 119 # elif _MIPS_SIM == _ABIN32 120 # define ARCH_ABI1 "-n32" 121 # elif _MIPS_SIM == _ABI64 122 # define ARCH_ABI1 "-n64" 123 # elif _MIPS_SIM == _ABIO64 124 # define ARCH_ABI1 "-o64" 125 # endif 126 #else 127 # define ARCH_ABI1 "" 128 #endif 129 #if defined(__ARM_PCS_VFP) || defined(__mips_hard_float) 130 // Use "-hardfloat" for platforms that usually have no FPUs 131 // (and for the platforms which had "-hardfloat" before we established the rule) 132 # define ARCH_ABI2 "-hardfloat" 133 #elif defined(_SOFT_FLOAT) 134 // Use "-softfloat" for architectures that usually have FPUs 135 # define ARCH_ABI2 "-softfloat" 136 #else 137 # define ARCH_ABI2 "" 138 #endif 139 140 #define ARCH_ABI ARCH_ABI1 ARCH_ABI2 141 142 #define ARCH_FULL ARCH_PROCESSOR "-" ARCH_ENDIANNESS "-" ARCH_POINTER ARCH_COORD_TYPE ARCH_ABI 143