Merge branch 'mesa_7_5_branch'
[mesa.git] / src / gallium / include / pipe / p_config.h
index d2d2ae16172a7a084154ce0367b74fe22c8e93be..4152d6ac36a8ba053191d888402a3500244630ed 100644 (file)
  * architecture, and operating system being used. These defines should be used 
  * throughout the code to facilitate porting to new platforms. It is likely that 
  * this file is auto-generated by an autoconf-like tool at some point, as some 
- * things cannot be determined by existing defines alone. 
+ * things cannot be determined by pre-defined environment alone. 
  * 
  * See also:
  * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
  * - echo | gcc -dM -E - | sort
  * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx
+ * 
  * @author José Fonseca <jrfonseca@tungstengraphics.com>
  */
 
 #define PIPE_CC_GCC
 #endif
 
+/*
+ * Meaning of _MSC_VER value:
+ * - 1400: Visual C++ 2005
+ * - 1310: Visual C++ .NET 2003
+ * - 1300: Visual C++ .NET 2002
+ * 
+ * __MSC__ seems to be an old macro -- it is not pre-defined on recent MSVC 
+ * versions.
+ */
 #if defined(_MSC_VER) || defined(__MSC__)
 #define PIPE_CC_MSVC
 #endif
  * Processor architecture
  */
 
-#if defined(__i386__) /* gcc */ || defined(_M_IX86) /* msvc */ || defined(_X86_) || defined(__386__) || defined(i386)
+#if defined(__i386__) /* gcc */ || defined(_M_IX86) /* msvc */ || defined(_X86_) || defined(__386__) || defined(i386) || defined(__i386) /* Sun cc */
 #define PIPE_ARCH_X86
 #endif
 
-#if defined(__x86_64__) /* gcc */ || defined(_M_X64) /* msvc */ || defined(_M_AMD64) /* msvc */
+#if defined(__x86_64__) /* gcc */ || defined(_M_X64) /* msvc */ || defined(_M_AMD64) /* msvc */ || defined(__x86_64) /* Sun cc */
 #define PIPE_ARCH_X86_64
 #endif
 
-#if 0 /* FIXME */
+#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
+#if defined(PIPE_CC_GCC) && !defined(__SSE2__)
+/* #warning SSE2 support requires -msse -msse2 compiler options */
+#else
+#define PIPE_ARCH_SSE
+#endif
+#endif
+
+#if defined(__PPC__)
 #define PIPE_ARCH_PPC
+#if defined(__PPC64__)
+#define PIPE_ARCH_PPC_64
+#endif
 #endif
 
 
 /*
- * Operating system
+ * Endian detection.
+ */
+
+#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
+#define PIPE_ARCH_LITTLE_ENDIAN
+#elif defined(PIPE_ARCH_PPC) || defined(PIPE_ARCH_PPC_64)
+#define PIPE_ARCH_BIG_ENDIAN
+#else
+#define PIPE_ARCH_UNKNOWN_ENDIAN
+#endif
+
+
+/*
+ * Operating system family.
+ * 
+ * See subsystem below for a more fine-grained distinction.
  */
 
 #if defined(__linux__)
 #define PIPE_OS_LINUX
 #endif
 
+#if defined(__FreeBSD__)
+#define PIPE_OS_BSD
+#endif
+
+#if defined(__sun)
+#define PIPE_OS_SOLARIS
+#endif
+
+#if defined(__APPLE__)
+#define PIPE_OS_APPLE
+#endif
+
 #if defined(_WIN32) || defined(WIN32)
 #define PIPE_OS_WINDOWS
 #endif
 
 
 /*
- * Subsystem
+ * Subsystem.
  * 
- * XXX: There is no way to autodetect this.
+ * NOTE: There is no way to auto-detect most of these.
  */
 
-#if defined(PIPE_OS_LINUX)
+#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS)
 #define PIPE_SUBSYSTEM_DRI
-#endif
+#endif /* PIPE_OS_LINUX || PIPE_OS_BSD || PIPE_OS_SOLARIS */
 
 #if defined(PIPE_OS_WINDOWS)
-#ifndef _WIN32_WCE
-#if !defined(PIPE_SUBSYSTEM_USER) && !defined(PIPE_SUBSYSTEM_KERNEL)
-#error Neither PIPE_SUBSYSTEM_USER or PIPE_SUBSYSTEM_KERNEL defined.
-#endif
-#if defined(PIPE_SUBSYSTEM_KERNEL)
-#define PIPE_SUBSYSTEM_WINDOWS_DISPLAY
-#endif
-#if 0 /* FIXME */
-#define PIPE_SUBSYSTEM_WINDOWS_MINIPORT
-#endif
-#if defined(PIPE_SUBSYSTEM_USER)
-#define PIPE_SUBSYSTEM_WINDOWS_USER
-#endif
-#else /* _WIN32_WCE */
+#if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
+/* Windows 2000/XP Display Driver */ 
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_MINIPORT)
+/* Windows 2000/XP Miniport Driver */ 
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
+/* Windows User-space Library */
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_CE)
+/* Windows CE 5.0/6.0 */
+#else
+#ifdef _WIN32_WCE
 #define PIPE_SUBSYSTEM_WINDOWS_CE
-#endif /* _WIN32_WCE */
+#else /* !_WIN32_WCE */
+#error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 
+#endif /* !_WIN32_WCE */
+#endif
 #endif /* PIPE_OS_WINDOWS */