arch.h

Go to the documentation of this file.
00001 
00004 #ifndef KARCH_ARCH_H
00005 #define KARCH_ARCH_H
00006 
00007 /**************************************************************************************
00008 
00009  Copyright (C) 2001 - 2009 Autodesk, Inc. and/or its licensors.
00010  All Rights Reserved.
00011 
00012  The coded instructions, statements, computer programs, and/or related material 
00013  (collectively the "Data") in these files contain unpublished information 
00014  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00015  Canada and United States of America federal copyright law and by international 
00016  treaties. 
00017  
00018  The Data may not be disclosed or distributed to third parties, in whole or in
00019  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00020 
00021  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00022  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00023  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00024  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00025  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00026  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00027  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00028  
00029  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00030  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00031  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00032  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00033  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00034  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00035  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00036  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00037  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00038  OR DAMAGE. 
00039 
00040 **************************************************************************************/
00041 
00042 /*
00043  *  Intel IA32 Architecture
00044  */
00045 #define KARCH_ARCH_X86      600
00046 
00047 /*
00048  *  AMD x64 Architecture
00049  */
00050 #define KARCH_ARCH_AMD64_GENERIC    800
00051 
00052 /*
00053  *  Intel IA64 Architecture
00054  */
00055 #define KARCH_ARCH_ITANIUM          1000
00056 
00057 #if defined(__CYGWIN32__)
00058     #define __linux__   // fake a linux setup
00059 #endif
00060 
00061 #if defined(__linux__) //////////////////////////////////////////////// LINUX
00062     #define KARCH_DEV_GNUC          __GNUC__
00063     #define KARCH_ENV_UNIX          1
00064     #define KARCH_ENV_POSIX         1
00065     #define KARCH_ENV_LINUX         1
00066 
00067     #if defined(__GNUC__)
00068         #define KARCH_DEV_GNUC  __GNUC__
00069 
00070         #if (__GNUC__ < 4)
00071             #error "Compiler is too old !!!"
00072         #endif
00073 
00074         #define GCC_VERSION     (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
00075 
00076         // CPU Determination.
00077         #if defined(__ia64__)
00078             #define KARCH_CPU_IA64      KARCH_ARCH_ITANIUM
00079         #elif defined(__x86_64)
00080             #define KARCH_CPU_AMD64     KARCH_ARCH_AMD64_GENERIC
00081         #elif !defined(__i386__)
00082             #define KARCH_CPU_IA32      KARCH_ARCH_X86
00083         #else
00084             #error "Architecture not supported"
00085         #endif
00086 
00087         // ARCH Determination.
00088         #if defined(KARCH_CPU_IA64)
00089             #define KARCH_ARCH_IA64         KARCH_CPU_IA64
00090             #define KARCH_ARCH_64           1
00091         #elif defined(KARCH_CPU_AMD64)
00092             #define KARCH_ARCH_AMD64        KARCH_CPU_AMD64
00093             #define KARCH_ARCH_64           1
00094         #elif defined(KARCH_CPU_IA32)
00095             #define KARCH_ARCH_IA32         KARCH_CPU_IA32
00096         #endif
00097     #else
00098         #error "Compiler not supported"
00099     #endif
00100 #elif defined(_XBOX)
00101     #define KARCH_ENV_WIN               1
00102     #define KARCH_ENV_WIN32             _WIN32
00103     #define KARCH_ENV_XBOX              _XBOX
00104     #define KARCH_DEV_MSC               _MSC_VER
00105     #define KARCH_ARCH_IA32             _M_IX86 
00106     #define KARCH_CPU_IA32              KARCH_ARCH_X86  
00107 
00108 #elif defined(_WIN32) || defined(_WIN64) //////////////////////////////////////////////// WIN32/WIN64
00109     #define KARCH_ENV_WIN               1
00110     #define KARCH_ENV_WIN32             _WIN32
00111     #if defined(_WINNT)
00112         #define KARCH_ENV_WINNT         _WINNT
00113     #endif
00114     #define _WIN32_WINNT    0x0501      // for SetThreadIdealProcessor,TryEnterCriticalSection that does not work on windows 95/98
00115     #define WINVER          0x0501
00116 
00117     #ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
00118         #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
00119     #endif
00120     #ifndef _CRT_NONSTDC_NO_WARNINGS
00121         #define _CRT_NONSTDC_NO_WARNINGS 1
00122     #endif
00123     #ifndef _CRT_SECURE_NO_WARNINGS
00124         #define _CRT_SECURE_NO_WARNINGS 1
00125     #endif
00126     #ifndef _CRT_SECURE_NO_DEPRECATE
00127         #define _CRT_SECURE_NO_DEPRECATE 1
00128     #endif
00129 
00130     // Use a newer version of comctl32.dll tooltips for Sketchbook
00131     #if defined _M_IX86
00132         #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
00133     #elif defined _M_IA64
00134         #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
00135     #elif defined _M_X64
00136         #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
00137     #else
00138         #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
00139     #endif
00140 
00141     #if defined(__MINGW32__)
00142         #define KARCH_ENV_MING32    __MINGW32__
00143     #endif
00144     #if defined(__ICL)
00145         #define KARCH_DEV_INTEL     __ICL
00146     #endif
00147     #if defined(_MSC_VER)
00148         #define KARCH_DEV_MSC       _MSC_VER
00149     #elif defined(__GNUC__)
00150         #define KARCH_DEV_GNUC          __GNUC__
00151         // CPU Determination.
00152         #if defined(__ia64__)
00153             #define KARCH_CPU_IA64      KARCH_ARCH_ITANIUM
00154         #elif defined(__x86_64)
00155             #define KARCH_CPU_AMD64     KARCH_ARCH_AMD64_GENERIC
00156         #elif !defined(__i386__)
00157             #define KARCH_CPU_IA32      KARCH_ARCH_X86
00158         #else
00159             #error "Architecture not supported"
00160         #endif
00161     #else
00162         #error "Compiler not supported"
00163     #endif
00164     #if defined(_M_IX86)
00165         #define KARCH_ARCH_IA32         _M_IX86
00166         #define KARCH_CPU_IA32          KARCH_ARCH_X86
00167     #elif defined(_M_X64)
00168         #define KARCH_ARCH_X64          _M_X64
00169         #define KARCH_CPU_X64           KARCH_ARCH_AMD64
00170         #define KARCH_ENV_WIN64         _WIN64
00171         #define KARCH_ARCH_64           1
00172     #elif defined(_M_IA64)
00173         #define KARCH_ARCH_IA64         _M_IA64
00174         #define KARCH_CPU_IA64          KARCH_ARCH_ITANIUM
00175         #define KARCH_ENV_WIN64         _WIN64
00176         #define KARCH_ARCH_64           1
00177     #else
00178         #error "Architecture not supported"
00179     #endif
00180 
00181 #elif defined(__MACH__)
00182 
00183     #if defined(__i386__)
00184         #define KARCH_CPU_IA32      KARCH_ARCH_X86
00185         #define KARCH_ARCH_IA32     KARCH_CPU_IA32
00186     #elif defined(__x86_64__)
00187         #define KARCH_ARCH_X64      _M_X64
00188         #define KARCH_ARCH_64       1
00189     #elif defined(__arm__)
00190         #define KARCH_ARCH_ARM
00191         #define KARCH_CPU_ARM
00192         #define K_REQUIRE_DATA_ALIGNMENT
00193     #else
00194         #error "Architecture not supported"
00195     #endif
00196     
00197     #define KARCH_DEV_MACOSX
00198     #define KARCH_ENV_MACOSX
00199     #define KARCH_DEV_GNUC          __GNUC__
00200     #define KARCH_ENV_UNIX          1
00201     #define KARCH_ENV_POSIX         1
00202 
00203 #else   //////////////////////////////////////////////// GENERIC
00204     #error "Environment not supported"
00205 #endif
00206 
00207 #endif /* KARCH_ARCH_H */