Pixar Arch 0.25.8
Loading...
Searching...
No Matches
defines.h
Go to the documentation of this file.
1// Copyright 2016 Pixar
2//
3// Licensed under the terms set forth in the LICENSE.txt file available at
4// https://openusd.org/license.
5//
6// Modified by Jeremy Retailleau.
7
8#ifndef PXR_ARCH_DEFINES_H
9#define PXR_ARCH_DEFINES_H
10
11//
12// OS
13//
14#if defined(__EMSCRIPTEN__)
15#define ARCH_OS_WASM_VM
16#elif defined(__linux__)
17#define ARCH_OS_LINUX
18#elif defined(__APPLE__)
19#include "TargetConditionals.h"
20#define ARCH_OS_DARWIN
21#if TARGET_OS_IPHONE
22// TARGET_OS_IPHONE refers to all iOS derivative platforms
23// TARGET_OS_IOS refers to iPhone/iPad
24// For now, we specialize for the umbrella TARGET_OS_IPHONE group
25#define ARCH_OS_IPHONE
26#else
27#define ARCH_OS_OSX
28#endif
29#elif defined(_WIN32) || defined(_WIN64)
30#define ARCH_OS_WINDOWS
31#endif
32
33//
34// Processor
35//
36
37#if defined(i386) || defined(__i386__) || defined(__x86_64__) || \
38 defined(_M_IX86) || defined(_M_X64)
39#define ARCH_CPU_INTEL
40#elif defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || \
41 defined(_M_ARM64)
42#define ARCH_CPU_ARM
43#endif
44
45//
46// Bits
47//
48
49#if defined(__x86_64__) || defined(__aarch64__) || defined(_M_X64) || \
50 defined(_M_ARM64) || defined(__wasm64__)
51#define ARCH_BITS_64
52#elif defined(__wasm32__)
53#define ARCH_BITS_32
54#else
55#error "Unsupported architecture. x86_64 or ARM64 required."
56#endif
57
58//
59// Compiler
60//
61
62#if defined(__clang__)
63#define ARCH_COMPILER_CLANG
64#define ARCH_COMPILER_CLANG_MAJOR __clang_major__
65#define ARCH_COMPILER_CLANG_MINOR __clang_minor__
66#define ARCH_COMPILER_CLANG_PATCHLEVEL __clang_patchlevel__
67#elif defined(__GNUC__)
68#define ARCH_COMPILER_GCC
69#define ARCH_COMPILER_GCC_MAJOR __GNUC__
70#define ARCH_COMPILER_GCC_MINOR __GNUC_MINOR__
71#define ARCH_COMPILER_GCC_PATCHLEVEL __GNUC_PATCHLEVEL__
72#elif defined(__ICC)
73#define ARCH_COMPILER_ICC
74#elif defined(_MSC_VER)
75#define ARCH_COMPILER_MSVC
76#define ARCH_COMPILER_MSVC_VERSION _MSC_VER
77#endif
78
79//
80// Features
81//
82
83// Only use the GNU STL extensions on Linux when using gcc.
84#if defined(ARCH_OS_LINUX) && defined(ARCH_COMPILER_GCC)
85#define ARCH_HAS_GNU_STL_EXTENSIONS
86#endif
87
88// The MAP_POPULATE flag for mmap calls only exists on Linux platforms.
89#if defined(ARCH_OS_LINUX)
90#define ARCH_HAS_MMAP_MAP_POPULATE
91#endif
92
93// When using MSVC, provide an easy way to detect whether the older
94// "traditional" preprocessor is being used as opposed to the newer, more
95// standards-conforming preprocessor. The traditional preprocessor may require
96// custom versions of macros.
97// See here for more detail about MSVC's preprocessors:
98// https://learn.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview
99#if defined(ARCH_COMPILER_MSVC)
100 #if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL
101 #define ARCH_PREPROCESSOR_MSVC_TRADITIONAL
102 #endif
103#endif
104
105#endif // PXR_ARCH_DEFINES_H