14a49301eSmrg/************************************************************************** 24a49301eSmrg * 3af69d88dSmrg * Copyright 2008 VMware, Inc. 44a49301eSmrg * All Rights Reserved. 54a49301eSmrg * 64a49301eSmrg * Permission is hereby granted, free of charge, to any person obtaining a 74a49301eSmrg * copy of this software and associated documentation files (the 84a49301eSmrg * "Software"), to deal in the Software without restriction, including 94a49301eSmrg * without limitation the rights to use, copy, modify, merge, publish, 104a49301eSmrg * distribute, sub license, and/or sell copies of the Software, and to 114a49301eSmrg * permit persons to whom the Software is furnished to do so, subject to 124a49301eSmrg * the following conditions: 134a49301eSmrg * 144a49301eSmrg * The above copyright notice and this permission notice (including the 154a49301eSmrg * next paragraph) shall be included in all copies or substantial portions 164a49301eSmrg * of the Software. 174a49301eSmrg * 184a49301eSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 194a49301eSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 204a49301eSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21af69d88dSmrg * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 224a49301eSmrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 234a49301eSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 244a49301eSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 254a49301eSmrg * 264a49301eSmrg **************************************************************************/ 274a49301eSmrg 284a49301eSmrg/** 294a49301eSmrg * @file 304a49301eSmrg * Gallium configuration defines. 314a49301eSmrg * 324a49301eSmrg * This header file sets several defines based on the compiler, processor 334a49301eSmrg * architecture, and operating system being used. These defines should be used 344a49301eSmrg * throughout the code to facilitate porting to new platforms. It is likely that 354a49301eSmrg * this file is auto-generated by an autoconf-like tool at some point, as some 364a49301eSmrg * things cannot be determined by pre-defined environment alone. 374a49301eSmrg * 384a49301eSmrg * See also: 394a49301eSmrg * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html 404a49301eSmrg * - echo | gcc -dM -E - | sort 414a49301eSmrg * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx 424a49301eSmrg * 43af69d88dSmrg * @author José Fonseca <jfonseca@vmware.com> 444a49301eSmrg */ 454a49301eSmrg 464a49301eSmrg#ifndef P_CONFIG_H_ 474a49301eSmrg#define P_CONFIG_H_ 484a49301eSmrg 493464ebd5Sriastradh#include <limits.h> 504a49301eSmrg/* 514a49301eSmrg * Compiler 524a49301eSmrg */ 534a49301eSmrg 544a49301eSmrg#if defined(__GNUC__) 554a49301eSmrg#define PIPE_CC_GCC 56cdc920a0Smrg#define PIPE_CC_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) 574a49301eSmrg#endif 584a49301eSmrg 594a49301eSmrg/* 604a49301eSmrg * Meaning of _MSC_VER value: 61af69d88dSmrg * - 1800: Visual Studio 2013 62af69d88dSmrg * - 1700: Visual Studio 2012 63af69d88dSmrg * - 1600: Visual Studio 2010 64af69d88dSmrg * - 1500: Visual Studio 2008 654a49301eSmrg * - 1400: Visual C++ 2005 664a49301eSmrg * - 1310: Visual C++ .NET 2003 674a49301eSmrg * - 1300: Visual C++ .NET 2002 684a49301eSmrg * 694a49301eSmrg * __MSC__ seems to be an old macro -- it is not pre-defined on recent MSVC 704a49301eSmrg * versions. 714a49301eSmrg */ 724a49301eSmrg#if defined(_MSC_VER) || defined(__MSC__) 734a49301eSmrg#define PIPE_CC_MSVC 744a49301eSmrg#endif 754a49301eSmrg 764a49301eSmrg#if defined(__ICL) 774a49301eSmrg#define PIPE_CC_ICL 784a49301eSmrg#endif 794a49301eSmrg 804a49301eSmrg 814a49301eSmrg/* 824a49301eSmrg * Processor architecture 834a49301eSmrg */ 844a49301eSmrg 854a49301eSmrg#if defined(__i386__) /* gcc */ || defined(_M_IX86) /* msvc */ || defined(_X86_) || defined(__386__) || defined(i386) || defined(__i386) /* Sun cc */ 864a49301eSmrg#define PIPE_ARCH_X86 874a49301eSmrg#endif 884a49301eSmrg 894a49301eSmrg#if defined(__x86_64__) /* gcc */ || defined(_M_X64) /* msvc */ || defined(_M_AMD64) /* msvc */ || defined(__x86_64) /* Sun cc */ 904a49301eSmrg#define PIPE_ARCH_X86_64 914a49301eSmrg#endif 924a49301eSmrg 934a49301eSmrg#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) 944a49301eSmrg#if defined(PIPE_CC_GCC) && !defined(__SSE2__) 954a49301eSmrg/* #warning SSE2 support requires -msse -msse2 compiler options */ 964a49301eSmrg#else 974a49301eSmrg#define PIPE_ARCH_SSE 984a49301eSmrg#endif 997e995a2eSmrg#if defined(PIPE_CC_GCC) && (__GNUC__ * 100 + __GNUC_MINOR__) < 409 && !defined(__SSSE3__) 1007e995a2eSmrg/* #warning SSE3 support requires -msse3 compiler options before GCC 4.9 */ 1013464ebd5Sriastradh#else 1023464ebd5Sriastradh#define PIPE_ARCH_SSSE3 1033464ebd5Sriastradh#endif 1044a49301eSmrg#endif 1054a49301eSmrg 1063464ebd5Sriastradh#if defined(__ppc__) || defined(__ppc64__) || defined(__PPC__) 1074a49301eSmrg#define PIPE_ARCH_PPC 1083464ebd5Sriastradh#if defined(__ppc64__) || defined(__PPC64__) 1094a49301eSmrg#define PIPE_ARCH_PPC_64 1104a49301eSmrg#endif 1114a49301eSmrg#endif 1124a49301eSmrg 113af69d88dSmrg#if defined(__s390x__) 114af69d88dSmrg#define PIPE_ARCH_S390 115af69d88dSmrg#endif 116af69d88dSmrg 117af69d88dSmrg#if defined(__arm__) 118af69d88dSmrg#define PIPE_ARCH_ARM 119af69d88dSmrg#endif 120af69d88dSmrg 1211463c08dSmrg#if defined(__aarch64__) || defined(_M_ARM64) 122af69d88dSmrg#define PIPE_ARCH_AARCH64 123af69d88dSmrg#endif 1244a49301eSmrg 1251463c08dSmrg#if defined(__mips64) && defined(__LP64__) 1261463c08dSmrg#define PIPE_ARCH_MIPS64 1271463c08dSmrg#endif 1281463c08dSmrg 1291463c08dSmrg#if defined(__mips__) 1301463c08dSmrg#define PIPE_ARCH_MIPS 1311463c08dSmrg#endif 1321463c08dSmrg 1334a49301eSmrg/* 1344a49301eSmrg * Endian detection. 1354a49301eSmrg */ 1364a49301eSmrg 1377e995a2eSmrg#include "util/u_endian.h" 138cdc920a0Smrg 1394a49301eSmrg/* 140cdc920a0Smrg * Auto-detect the operating system family. 1414a49301eSmrg */ 1421463c08dSmrg#include "util/detect_os.h" 1434a49301eSmrg 1441463c08dSmrg#if DETECT_OS_LINUX 1454a49301eSmrg#define PIPE_OS_LINUX 1461463c08dSmrg#endif 1471463c08dSmrg 1481463c08dSmrg#if DETECT_OS_UNIX 1494a49301eSmrg#define PIPE_OS_UNIX 1504a49301eSmrg#endif 1514a49301eSmrg 1521463c08dSmrg#if DETECT_OS_ANDROID 153af69d88dSmrg#define PIPE_OS_ANDROID 154af69d88dSmrg#endif 155af69d88dSmrg 1561463c08dSmrg#if DETECT_OS_FREEBSD 1574a49301eSmrg#define PIPE_OS_FREEBSD 1581463c08dSmrg#endif 1591463c08dSmrg 1601463c08dSmrg#if DETECT_OS_BSD 1614a49301eSmrg#define PIPE_OS_BSD 1624a49301eSmrg#endif 1634a49301eSmrg 1641463c08dSmrg#if DETECT_OS_OPENBSD 1654a49301eSmrg#define PIPE_OS_OPENBSD 1664a49301eSmrg#endif 1674a49301eSmrg 1681463c08dSmrg#if DETECT_OS_NETBSD 1694a49301eSmrg#define PIPE_OS_NETBSD 1704a49301eSmrg#endif 1714a49301eSmrg 1721463c08dSmrg#if DETECT_OS_DRAGONFLY 1737e995a2eSmrg#define PIPE_OS_DRAGONFLY 1747e995a2eSmrg#endif 1757e995a2eSmrg 1761463c08dSmrg#if DETECT_OS_HURD 1773464ebd5Sriastradh#define PIPE_OS_HURD 1783464ebd5Sriastradh#endif 1793464ebd5Sriastradh 1801463c08dSmrg#if DETECT_OS_SOLARIS 1814a49301eSmrg#define PIPE_OS_SOLARIS 1824a49301eSmrg#endif 1834a49301eSmrg 1841463c08dSmrg#if DETECT_OS_APPLE 1854a49301eSmrg#define PIPE_OS_APPLE 1864a49301eSmrg#endif 1874a49301eSmrg 1881463c08dSmrg#if DETECT_OS_WINDOWS 1894a49301eSmrg#define PIPE_OS_WINDOWS 1904a49301eSmrg#endif 1914a49301eSmrg 1921463c08dSmrg#if DETECT_OS_HAIKU 1934a49301eSmrg#define PIPE_OS_HAIKU 1944a49301eSmrg#endif 1954a49301eSmrg 1961463c08dSmrg#if DETECT_OS_CYGWIN 1973464ebd5Sriastradh#define PIPE_OS_CYGWIN 1983464ebd5Sriastradh#endif 1993464ebd5Sriastradh 2004a49301eSmrg#endif /* P_CONFIG_H_ */ 201