|  | # Copyright 2025 The Fuchsia Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """Functions related to the Fuchsia API level.""" | 
|  |  | 
|  | # Only toolchains should need to use the API level as an integer. | 
|  | visibility(["//build/bazel/..."]) | 
|  |  | 
|  | def get_integer_for_api_level(api_level): | 
|  | """Returns the integer reprsentation of the Fuchsia `api_level`. | 
|  |  | 
|  | This should only be used to pass an integer representation of the current | 
|  | target API level to build tools, such as Clang, or to determine whether to | 
|  | include a Fuchsia package in the IDK. | 
|  | Individual target definitions should not use it. | 
|  | """ | 
|  |  | 
|  | # Numerical values associated with special API levels, as defined in | 
|  | # https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0246_api_levels_are_32_bits#special_api_levels. | 
|  | _FIRST_RESERVED_API_LEVEL = 2147483648  # 0x80000000 | 
|  | _API_LEVEL_NEXT_AS_INTEGER = 4291821568 | 
|  | _API_LEVEL_HEAD_AS_INTEGER = 4292870144 | 
|  | _API_LEVEL_PLATFORM_AS_INTEGER = 4293918720 | 
|  |  | 
|  | if api_level == "NEXT": | 
|  | return _API_LEVEL_NEXT_AS_INTEGER | 
|  | elif api_level == "HEAD": | 
|  | return _API_LEVEL_HEAD_AS_INTEGER | 
|  | elif api_level == "PLATFORM": | 
|  | return _API_LEVEL_PLATFORM_AS_INTEGER | 
|  | else: | 
|  | # If the string is not an integer, this will raise a ValueError. | 
|  | api_level_integer = int(api_level) | 
|  |  | 
|  | # `current_build_target_api_level` must be an integer. Ensure it adheres to | 
|  | # https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0246_api_levels_are_32_bits#design. | 
|  | if api_level_integer < 0: | 
|  | fail("Non-special API levels must be a positive integer, not: %s" % api_level_integer) | 
|  | if api_level_integer >= _FIRST_RESERVED_API_LEVEL: | 
|  | fail("Special API levels should be given by name, not number: %s" % api_level_integer) | 
|  |  | 
|  | return api_level_integer |