Open Reality Reference Guide
arch.h
Go to the documentation of this file.
1 
4 #ifndef KARCH_ARCH_H
5 #define KARCH_ARCH_H
6 
7 /**************************************************************************************
8 
9  Copyright (C) 2001 - 2009 Autodesk, Inc. and/or its licensors.
10  All Rights Reserved.
11 
12  The coded instructions, statements, computer programs, and/or related material
13  (collectively the "Data") in these files contain unpublished information
14  proprietary to Autodesk, Inc. and/or its licensors, which is protected by
15  Canada and United States of America federal copyright law and by international
16  treaties.
17 
18  The Data may not be disclosed or distributed to third parties, in whole or in
19  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
20 
21  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
22  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
23  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
24  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE,
25  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE.
26  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
27  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE.
28 
29  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
30  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
31  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
32  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
33  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
34  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
35  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
36  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
37  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
38  OR DAMAGE.
39 
40 **************************************************************************************/
41 
42 /*
43  * Intel IA32 Architecture
44  */
45 #define KARCH_ARCH_X86 600
46 
47 /*
48  * AMD x64 Architecture
49  */
50 #define KARCH_ARCH_AMD64_GENERIC 800
51 
52 /*
53  * Intel IA64 Architecture
54  */
55 #define KARCH_ARCH_ITANIUM 1000
56 
57 #if defined(__linux__) || defined(__CYGWIN__)
58  #define KARCH_DEV_GNUC __GNUC__
59  #define KARCH_ENV_UNIX 1
60  #define KARCH_ENV_POSIX 1
61 
62  #if defined(__linux__)
63  #define KARCH_ENV_LINUX 1
64  #elif defined(__CYGWIN__)
65  #define KARCH_ENV_CYGWIN 1
66  #endif
67 
68  #if defined(__GNUC__)
69  #define KARCH_DEV_GNUC __GNUC__
70 
71  #if (__GNUC__ < 4)
72  #error "Compiler is too old !!!"
73  #endif
74 
75  #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
76 
77  // CPU Determination.
78  #if defined(__ia64__)
79  #define KARCH_CPU_IA64 KARCH_ARCH_ITANIUM
80  #elif defined(__x86_64)
81  #define KARCH_CPU_AMD64 KARCH_ARCH_AMD64_GENERIC
82  #elif defined(__i386__)
83  #define KARCH_CPU_IA32 KARCH_ARCH_X86
84  #else
85  #error "Architecture not supported"
86  #endif
87 
88  // ARCH Determination.
89  #if defined(KARCH_CPU_AMD64)
90  #define KARCH_ARCH_AMD64 KARCH_CPU_AMD64
91  #define KARCH_ARCH_64 1
92  #elif defined(KARCH_CPU_IA32)
93  #define KARCH_ARCH_IA32 KARCH_CPU_IA32
94  #endif
95  #else
96  #error "Compiler not supported"
97  #endif
98 #elif defined(_XBOX)
99  #define KARCH_ENV_WIN 1
100  #define KARCH_ENV_WIN32 _WIN32
101  #define KARCH_ENV_XBOX _XBOX
102  #define KARCH_DEV_MSC _MSC_VER
103  #define KARCH_ARCH_IA32 _M_IX86
104  #define KARCH_CPU_IA32 KARCH_ARCH_X86
105 
106 #elif defined(_WIN32) || defined(_WIN64)
107  #define KARCH_ENV_WIN 1
108  #define KARCH_ENV_WIN32 _WIN32
109  #if !defined(_WIN32_WINNT)
110  #define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7
111  #endif
112  #if !defined(WINVER)
113  #define WINVER 0x0601 // _WIN32_WINNT_WIN7
114  #endif
115 
116  #ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
117  #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
118  #endif
119  #ifndef _CRT_NONSTDC_NO_WARNINGS
120  #define _CRT_NONSTDC_NO_WARNINGS 1
121  #endif
122  #ifndef _CRT_SECURE_NO_WARNINGS
123  #define _CRT_SECURE_NO_WARNINGS 1
124  #endif
125  #ifndef _CRT_SECURE_NO_DEPRECATE
126  #define _CRT_SECURE_NO_DEPRECATE 1
127  #endif
128 
129  // Use a newer version of comctl32.dll tooltips for Sketchbook
130  #if defined _M_IX86
131  #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
132  #elif defined _M_IA64
133  #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
134  #elif defined _M_X64
135  #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
136  #else
137  #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
138  #endif
139 
140  #if defined(__MINGW32__)
141  #define KARCH_ENV_MING32 __MINGW32__
142  #endif
143  #if defined(__ICL)
144  #define KARCH_DEV_INTEL __ICL
145  #endif
146  #if defined(_MSC_VER)
147  #define KARCH_DEV_MSC _MSC_VER
148  #elif defined(__GNUC__)
149  #define KARCH_DEV_GNUC __GNUC__
150  // CPU Determination.
151  #if defined(__ia64__)
152  #define KARCH_CPU_IA64 KARCH_ARCH_ITANIUM
153  #elif defined(__x86_64)
154  #define KARCH_CPU_AMD64 KARCH_ARCH_AMD64_GENERIC
155  #elif !defined(__i386__)
156  #define KARCH_CPU_IA32 KARCH_ARCH_X86
157  #else
158  #error "Architecture not supported"
159  #endif
160  #else
161  #error "Compiler not supported"
162  #endif
163  #if defined(_M_IX86)
164  #define KARCH_ARCH_IA32 _M_IX86
165  #define KARCH_CPU_IA32 KARCH_ARCH_X86
166  #elif defined(_M_X64)
167  #define KARCH_ARCH_X64 _M_X64
168  #define KARCH_CPU_X64 KARCH_ARCH_AMD64
169  #define KARCH_ENV_WIN64 _WIN64
170  #define KARCH_ARCH_64 1
171  #else
172  #error "Architecture not supported"
173  #endif
174 
175 #elif defined(__MACH__)
176 
177  #if defined(__i386__)
178  #define KARCH_CPU_IA32 KARCH_ARCH_X86
179  #define KARCH_ARCH_IA32 KARCH_CPU_IA32
180  #elif defined(__x86_64__)
181  #define KARCH_ARCH_X64 _M_X64
182  #define KARCH_ARCH_64 1
183  #elif defined(__arm__)
184  #define KARCH_ARCH_ARM
185  #define KARCH_CPU_ARM
186  #define K_REQUIRE_DATA_ALIGNMENT
187  #else
188  #error "Architecture not supported"
189  #endif
190 
191  #define KARCH_DEV_MACOSX
192  #define KARCH_ENV_MACOSX
193  #define KARCH_DEV_GNUC __GNUC__
194  #define KARCH_ENV_UNIX 1
195  #define KARCH_ENV_POSIX 1
196 
197 #else
198  #error "Environment not supported"
199 #endif
200 
201 #endif /* KARCH_ARCH_H */