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