| /* |
| * MVKCommonEnvironment.h |
| * |
| * Copyright (c) 2015-2022 The Brenwill Workshop Ltd. (http://www.brenwill.com) |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| #pragma once |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| |
| #include <TargetConditionals.h> |
| |
| |
| /** |
| * Compiler build setting that ensures a definite value for whether this |
| * build is a debug build or not. |
| * |
| * If the standard DEBUG build setting is defined, MVK_DEBUG is set to true, |
| * otherwise, it is set to false. |
| */ |
| #ifndef MVK_DEBUG |
| # ifdef DEBUG |
| # define MVK_DEBUG 1 |
| # else |
| # define MVK_DEBUG 0 |
| # endif |
| #endif |
| |
| /** Building for macOS. */ |
| #ifndef MVK_MACOS |
| # define MVK_MACOS (TARGET_OS_OSX || TARGET_OS_MACCATALYST) |
| #endif |
| |
| /** Building for iOS. */ |
| #ifndef MVK_IOS |
| # define MVK_IOS (TARGET_OS_IOS && !TARGET_OS_MACCATALYST) |
| #endif |
| |
| /** Building for iOS on Mac Catalyst. */ |
| #ifndef MVK_MACCAT |
| # define MVK_MACCAT TARGET_OS_MACCATALYST |
| #endif |
| |
| /** Building for tvOS. */ |
| #ifndef MVK_TVOS |
| # define MVK_TVOS TARGET_OS_TV |
| #endif |
| |
| /** Building for iOS or tvOS. */ |
| #ifndef MVK_IOS_OR_TVOS |
| # define MVK_IOS_OR_TVOS (MVK_IOS || MVK_TVOS) |
| #endif |
| |
| /** Building for macOS or iOS. */ |
| #ifndef MVK_MACOS_OR_IOS |
| # define MVK_MACOS_OR_IOS (MVK_MACOS || MVK_IOS) |
| #endif |
| |
| /** Building for a Simulator. */ |
| #ifndef MVK_OS_SIMULATOR |
| # define MVK_OS_SIMULATOR TARGET_OS_SIMULATOR |
| #endif |
| |
| /** Building for Apple Silicon on iOS, tvOS, or macOS platform. */ |
| #ifndef MVK_APPLE_SILICON |
| # define MVK_APPLE_SILICON TARGET_CPU_ARM64 |
| #endif |
| |
| /** Building for macOS with support for Apple Silicon. */ |
| #ifndef MVK_MACOS_APPLE_SILICON |
| # define MVK_MACOS_APPLE_SILICON (MVK_MACOS && MVK_APPLE_SILICON) |
| #endif |
| |
| /** Building with Xcode versions. */ |
| #ifndef MVK_XCODE_14 |
| # define MVK_XCODE_14 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 130000) || \ |
| (__IPHONE_OS_VERSION_MAX_ALLOWED >= 160000)) // Also covers tvOS |
| #endif |
| #ifndef MVK_XCODE_13 |
| # define MVK_XCODE_13 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) || \ |
| (__IPHONE_OS_VERSION_MAX_ALLOWED >= 150000)) // Also covers tvOS |
| #endif |
| #ifndef MVK_XCODE_12 |
| # define MVK_XCODE_12 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 101600) || \ |
| (__IPHONE_OS_VERSION_MAX_ALLOWED >= 140000)) // Also covers tvOS |
| #endif |
| |
| /** Directive to identify public symbols. */ |
| #define MVK_PUBLIC_SYMBOL __attribute__((visibility("default"))) |
| |
| |
| /** Directive to make a public alias of another symbol. */ |
| #define MVK_PUBLIC_ALIAS(ALIAS, TARGET) asm(".globl _" #ALIAS "\n\t_" #ALIAS " = _" #TARGET) |
| |
| /** |
| * Directives to hide public symbols from the Vulkan API, to avoid library linking |
| * conflicts when bound to a Vulkan Loader that also exports identical symbols. |
| */ |
| #ifndef MVK_HIDE_VULKAN_SYMBOLS |
| # define MVK_HIDE_VULKAN_SYMBOLS 0 |
| #endif |
| #if MVK_HIDE_VULKAN_SYMBOLS |
| # define MVK_PUBLIC_VULKAN_SYMBOL |
| # define MVK_PUBLIC_VULKAN_ALIAS(ALIAS, TARGET) |
| #else |
| # define MVK_PUBLIC_VULKAN_SYMBOL MVK_PUBLIC_SYMBOL |
| # define MVK_PUBLIC_VULKAN_ALIAS(ALIAS, TARGET) MVK_PUBLIC_ALIAS(ALIAS, TARGET) |
| #endif |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif // __cplusplus |
| |