You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.2 KiB
126 lines
4.2 KiB
/*
|
|
* Copyright 2011-2012, The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_ // NOLINT
|
|
#define _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_
|
|
|
|
#include <climits>
|
|
|
|
#define RS_DEVELOPMENT_API UINT_MAX
|
|
|
|
// API levels used by the standard Android SDK.
|
|
// MR -> Maintenance Release
|
|
// HC -> Honeycomb
|
|
// ICS -> Ice Cream Sandwich
|
|
// JB -> Jelly Bean
|
|
// KK -> KitKat
|
|
// M -> Marshmallow
|
|
enum SlangTargetAPI {
|
|
SLANG_MINIMUM_TARGET_API = 11,
|
|
SLANG_HC_TARGET_API = 11,
|
|
SLANG_HC_MR1_TARGET_API = 12,
|
|
SLANG_HC_MR2_TARGET_API = 13,
|
|
SLANG_ICS_TARGET_API = 14,
|
|
SLANG_ICS_MR1_TARGET_API = 15,
|
|
SLANG_JB_TARGET_API = 16,
|
|
SLANG_JB_MR1_TARGET_API = 17,
|
|
SLANG_JB_MR2_TARGET_API = 18,
|
|
SLANG_KK_TARGET_API = 19,
|
|
SLANG_L_TARGET_API = 21,
|
|
SLANG_M_TARGET_API = 23,
|
|
SLANG_N_TARGET_API = 24,
|
|
SLANG_N_MR1_TARGET_API = 25,
|
|
SLANG_O_TARGET_API = 26,
|
|
SLANG_O_MR1_TARGET_API = 27,
|
|
SLANG_P_TARGET_API = 28,
|
|
SLANG_Q_TARGET_API = 29,
|
|
SLANG_R_TARGET_API = 30,
|
|
SLANG_S_TARGET_API = 31,
|
|
SLANG_MAXIMUM_TARGET_API = RS_VERSION,
|
|
// The maximum API level that is acceptable for the "-target-api" commandline option.
|
|
SLANG_MAXIMUM_CMDLINE_TARGET_API = SLANG_S_TARGET_API,
|
|
SLANG_DEVELOPMENT_TARGET_API = RS_DEVELOPMENT_API
|
|
};
|
|
// Note that RS_VERSION is defined at build time (see Android.mk for details).
|
|
|
|
// API levels where particular features exist.
|
|
// . Open (feature appears at a particular level and continues to exist):
|
|
// SLANG_FEAT_FOO_API
|
|
// . Closed (feature exists only through a particular range of API levels):
|
|
// SLANG_FEAT_BAR_API_MIN, SLANG_FEAT_BAR_API_MAX
|
|
enum SlangFeatureAPI {
|
|
SLANG_FEATURE_GENERAL_REDUCTION_API = SLANG_N_TARGET_API,
|
|
SLANG_FEATURE_GENERAL_REDUCTION_HALTER_API = SLANG_DEVELOPMENT_TARGET_API,
|
|
SLANG_FEATURE_SINGLE_SOURCE_API = SLANG_N_TARGET_API,
|
|
};
|
|
|
|
// SlangVersion refers to the released compiler version, for which
|
|
// certain behaviors could change.
|
|
//
|
|
// The SlangVersion is recorded in the generated bitcode. A bitcode
|
|
// consumer (for example: runtime, driver, bcc) is expected to use
|
|
// this version number as follows:
|
|
//
|
|
// If version number is at least $VERSION, then I can assume that
|
|
// $PROPERTY holds.
|
|
//
|
|
// However, a bitcode consumer is not obligated to act on this
|
|
// information (for example, the consumer may be too old to know about
|
|
// that version number). So slang must not change its behavior for
|
|
// $VERSION in such a way that a backend needs to know about $VERSION
|
|
// in order to behave properly.
|
|
//
|
|
// For example:
|
|
//
|
|
// If version number is at least N_STRUCT_EXPLICIT_PADDING, then I
|
|
// can assume that no field of any struct is followed by implicit
|
|
// padding.
|
|
//
|
|
// bcc can take advantage of this (by turning off analyses and
|
|
// transformations that are needed because of implicit padding), but
|
|
// slang must still generate code that works properly with a bcc
|
|
// that is too old to know about the N_STRUCT_EXPLICIT_PADDING
|
|
// guarantee.
|
|
//
|
|
// Note that we CANNOT say
|
|
//
|
|
// If version number is at least $VERSION_LO but lower than
|
|
// $VERSION_HI, then I can assume that $PROPERTY holds.
|
|
//
|
|
// because a bitcode consumer might know about $VERSION_LO (where it
|
|
// could start taking advantage of $PROPERTY) without knowing about
|
|
// $VERSION_HI (where it would have to stop taking advantage of
|
|
// $PROPERTY).
|
|
namespace SlangVersion {
|
|
enum {
|
|
LEGACY = 0,
|
|
ICS = 1400,
|
|
JB = 1600,
|
|
JB_MR1 = 1700,
|
|
JB_MR2 = 1800,
|
|
KK = 1900,
|
|
KK_P1 = 1901,
|
|
L = 2100,
|
|
M = 2300,
|
|
M_RS_OBJECT = 2310,
|
|
N = 2400,
|
|
N_STRUCT_EXPLICIT_PADDING = 2410,
|
|
CURRENT = N_STRUCT_EXPLICIT_PADDING
|
|
};
|
|
} // namespace SlangVersion
|
|
|
|
#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_ NOLINT
|