yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
4d241f2cc
master
1// Copyright 2019 The Abseil Authors. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// https://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14// 15// ----------------------------------------------------------------------------- 16// File: options.h 17// ----------------------------------------------------------------------------- 18// 19// This file contains Abseil configuration options for setting specific 20// implementations instead of letting Abseil determine which implementation to 21// use at compile-time. Setting these options may be useful for package or build 22// managers who wish to guarantee ABI stability within binary builds (which are 23// otherwise difficult to enforce). 24// 25// *** IMPORTANT NOTICE FOR PACKAGE MANAGERS: It is important that 26// maintainers of package managers who wish to package Abseil read and 27// understand this file! *** 28// 29// Abseil contains a number of possible configuration endpoints, based on 30// parameters such as the detected platform, language version, or command-line 31// flags used to invoke the underlying binary. As is the case with all 32// libraries, binaries which contain Abseil code must ensure that separate 33// packages use the same compiled copy of Abseil to avoid a diamond dependency 34// problem, which can occur if two packages built with different Abseil 35// configuration settings are linked together. Diamond dependency problems in 36// C++ may manifest as violations to the One Definition Rule (ODR) (resulting in 37// linker errors), or undefined behavior (resulting in crashes). 38// 39// Diamond dependency problems can be avoided if all packages utilize the same 40// exact version of Abseil. Building from source code with the same compilation 41// parameters is the easiest way to avoid such dependency problems. However, for 42// package managers who cannot control such compilation parameters, we are 43// providing the file to allow you to inject ABI (Application Binary Interface) 44// stability across builds. Settings options in this file will neither change 45// API nor ABI, providing a stable copy of Abseil between packages. 46// 47// Care must be taken to keep options within these configurations isolated 48// from any other dynamic settings, such as command-line flags which could alter 49// these options. This file is provided specifically to help build and package 50// managers provide a stable copy of Abseil within their libraries and binaries; 51// other developers should not have need to alter the contents of this file. 52// 53// ----------------------------------------------------------------------------- 54// Usage 55// ----------------------------------------------------------------------------- 56// 57// For any particular package release, set the appropriate definitions within 58// this file to whatever value makes the most sense for your package(s). Note 59// that, by default, most of these options, at the moment, affect the 60// implementation of types; future options may affect other implementation 61// details. 62// 63// NOTE: the defaults within this file all assume that Abseil can select the 64// proper Abseil implementation at compile-time, which will not be sufficient 65// to guarantee ABI stability to package managers. 66 67// SKIP_ABSL_INLINE_NAMESPACE_CHECK 68 69#ifndef ABSL_BASE_OPTIONS_H_ 70#define ABSL_BASE_OPTIONS_H_ 71 72// ----------------------------------------------------------------------------- 73// Type Compatibility Options 74// ----------------------------------------------------------------------------- 75 76// ABSL_OPTION_USE_STD_STRING_VIEW 77// 78// This option controls whether absl::string_view is implemented as an alias to 79// std::string_view, or as an independent implementation. 80// 81// A value of 0 means to use Abseil's implementation. This requires only C++11 82// support, and is expected to work on every toolchain we support. 83// 84// A value of 1 means to use an alias to std::string_view. This requires that 85// all code using Abseil is built in C++17 mode or later. 86// 87// A value of 2 means to detect the C++ version being used to compile Abseil, 88// and use an alias only if a working std::string_view is available. This 89// option is useful when you are building your program from source. It should 90// not be used otherwise -- for example, if you are distributing Abseil in a 91// binary package manager -- since in mode 2, absl::string_view will name a 92// different type, with a different mangled name and binary layout, depending on 93// the compiler flags passed by the end user. For more info, see 94// https://abseil.io/about/design/dropin-types. 95// 96// User code should not inspect this macro. To check in the preprocessor if 97// absl::string_view is a typedef of std::string_view, use the feature macro 98// ABSL_USES_STD_STRING_VIEW. 99 100#define ABSL_OPTION_USE_STD_STRING_VIEW 1 101 102// ABSL_OPTION_USE_STD_ORDERING 103// 104// This option controls whether absl::{partial,weak,strong}_ordering are 105// implemented as aliases to the std:: ordering types, or as an independent 106// implementation. 107// 108// A value of 0 means to use Abseil's implementation. This requires only C++11 109// support, and is expected to work on every toolchain we support. 110// 111// A value of 1 means to use aliases. This requires that all code using Abseil 112// is built in C++20 mode or later. 113// 114// A value of 2 means to detect the C++ version being used to compile Abseil, 115// and use an alias only if working std:: ordering types are available. This 116// option is useful when you are building your program from source. It should 117// not be used otherwise -- for example, if you are distributing Abseil in a 118// binary package manager -- since in mode 2, they will name different types, 119// with different mangled names and binary layout, depending on the compiler 120// flags passed by the end user. For more info, see 121// https://abseil.io/about/design/dropin-types. 122// 123// User code should not inspect this macro. To check in the preprocessor if 124// the ordering types are aliases of std:: ordering types, use the feature macro 125// ABSL_USES_STD_ORDERING. 126 127#define ABSL_OPTION_USE_STD_ORDERING 0 128 129// ABSL_OPTION_USE_INLINE_NAMESPACE 130// ABSL_OPTION_INLINE_NAMESPACE_NAME 131// 132// These options controls whether all entities in the absl namespace are 133// contained within an inner inline namespace. This does not affect the 134// user-visible API of Abseil, but it changes the mangled names of all symbols. 135// 136// This can be useful as a version tag if you are distributing Abseil in 137// precompiled form. This will prevent a binary library build of Abseil with 138// one inline namespace being used with headers configured with a different 139// inline namespace name. Binary packagers are reminded that Abseil does not 140// guarantee any ABI stability in Abseil, so any update of Abseil or 141// configuration change in such a binary package should be combined with a 142// new, unique value for the inline namespace name. 143// 144// A value of 0 means not to use inline namespaces. 145// 146// A value of 1 means to use an inline namespace with the given name inside 147// namespace absl. If this is set, ABSL_OPTION_INLINE_NAMESPACE_NAME must also 148// be changed to a new, unique identifier name. In particular "head" is not 149// allowed. 150 151#define ABSL_OPTION_USE_INLINE_NAMESPACE 0 152#define ABSL_OPTION_INLINE_NAMESPACE_NAME head 153 154// ABSL_OPTION_HARDENED 155// 156// This option enables a "hardened" build in release mode (in this context, 157// release mode is defined as a build where the `NDEBUG` macro is defined). 158// 159// A value of 0 means that "hardened" mode is not enabled. 160// 161// A value of 1 means that "hardened" mode is enabled with all checks. 162// 163// A value of 2 means that "hardened" mode is partially enabled, with 164// only a subset of checks chosen to minimize performance impact. 165// 166// Hardened builds have additional security checks enabled when `NDEBUG` is 167// defined. Defining `NDEBUG` is normally used to turn `assert()` macro into a 168// no-op, as well as disabling other bespoke program consistency checks. By 169// defining ABSL_OPTION_HARDENED to 1, a select set of checks remain enabled in 170// release mode. These checks guard against programming errors that may lead to 171// security vulnerabilities. In release mode, when one of these programming 172// errors is encountered, the program will immediately abort, possibly without 173// any attempt at logging. 174// 175// The checks enabled by this option are not free; they do incur runtime cost. 176// 177// The checks enabled by this option are always active when `NDEBUG` is not 178// defined, even in the case when ABSL_OPTION_HARDENED is defined to 0. The 179// checks enabled by this option may abort the program in a different way and 180// log additional information when `NDEBUG` is not defined. 181 182#define ABSL_OPTION_HARDENED 0 183 184#endif // ABSL_BASE_OPTIONS_H_