azure-core
Loading...
Searching...
No Matches
platform.hpp
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
9// The proper way to check for "UWP/NOT UWP" (*):
10// 1. Include this file, so that AZ_PLATFORM_WINDOWS becomes available.
11// 2. Include windows.h (**)
12// 3. Use "#if !defined(WINAPI_PARTITION_DESKTOP) || WINAPI_PARTITION_DESKTOP" (***) as a condition
13// meant to detect as fully-featured Win32 API (i.e. registry access, FileOpen() etc.) = "NOT UWP"
14// (4.) "#else" you are on "UWP" (*)
15// 5. Some features (i.e. WinHTTP) may have support for some non-traditional-Win32 desktops, yet not
16// the entirety of "UWP"(*). For example, WinHTTP would currently compile and work on the following:
17// WINAPI_PARTITION_DESKTOP, WINAPI_PARTITION_SYSTEM, WINAPI_PARTITION_GAMES, so more complex
18// conditions are possible (****).
19//
20// --
21// (*) - "UWP" is oversimplification, we use it in this comment as an umbrella term to represent all
22// the Windows platforms (UWP itself, Phone OS, Windows Store, etc) that do not allow some Win32
23// APIs such as registry access.
24// (**) - Including windows.h brings up WINAPI_PARTITION_DESKTOP macro (***). The reason we don't
25// simply include windows.h in this header and declare some sort of a "AZ_PLATFORM_WINDOWS_UWP"
26// macro in this file is that some places do need to include windows.h when WIN32_LEAN_AND_MEAN is
27// defined, others do not. So we defer this to each Azure SDK .cpp to do the inclusion as it best
28// fits. Plus, theoretically, you may want to check for AZ_PLATFORM_WINDOWS, yet you don't need
29// anything from windows.h header.
30// (***) - What is happening here: "WINAPI_PARTITION_DESKTOP" may not be defined on some old Windows
31// SDKs that existed before a concept of "UWP" came out. Those are your traditional "Full Win32 API"
32// platforms (Windows 7?). But IF "WINAPI_PARTITION_DESKTOP" is defined, then it can be
33// either 0 or 1 (simply put). For example, if we are being compiled for the "traditional" Windows
34// 10 desktop, it has a "Full WIn32 API", it has WINAPI_PARTITION_DESKTOP defined, and
35// WINAPI_PARTITION_DESKTOP evaluates to 1. Otherwise, it is a UWP, which also has
36// WINAPI_PARTITION_DESKTOP defined, but it evaluates as 0.
37// (****) - vcpkg could be limiting the default option, because at the moment it only distinguishes
38// between "UWP" and "Not UWP". So, if we have a default option indicating whether to build WinHTTP,
39// the best we can do is to enable build by default on (windows&!uwp). We can't remove the "!uwp"
40// part, because on some partitions compilation will fail. However, there is always an option for
41// the customer to run "vcpkg install azure-core-cpp[winhttp]" manually, and the build attempt will
42// be made (even if targeting macOS or Linux).
43
44#pragma once
45
46#if defined(_WIN32)
47#define AZ_PLATFORM_WINDOWS
48#elif defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))
49#define AZ_PLATFORM_POSIX
50#if defined(__APPLE__) || defined(__MACH__)
51#define AZ_PLATFORM_MAC
52#else
53#define AZ_PLATFORM_LINUX
54#endif
55
56#endif