| # @file stuart_codeql.py | |
| # | |
| # Exports functions commonly needed for Stuart-based platforms to easily | |
| # enable CodeQL in their platform build. | |
| # | |
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent | |
| ## | |
| from edk2toolext.environment.uefi_build import UefiBuilder | |
| from edk2toollib.utility_functions import GetHostInfo | |
| from argparse import ArgumentParser, Namespace | |
| from typing import Tuple | |
| def add_command_line_option(parser: ArgumentParser) -> None: | |
| """Adds the CodeQL command to the platform command line options. | |
| Args: | |
| parser (ArgumentParser): The argument parser used in this build. | |
| """ | |
| parser.add_argument( | |
| '--codeql', | |
| dest='codeql', | |
| action='store_true', | |
| default=False, | |
| help="Optional - Produces CodeQL results from the build. See " | |
| "BaseTools/Plugin/CodeQL/Readme.md for more info.") | |
| def get_scopes(codeql_enabled: bool) -> Tuple[str, ...]: | |
| """Returns the active CodeQL scopes for this build. | |
| Args: | |
| codeql_enabled (bool): Whether CodeQL is enabled. | |
| Returns: | |
| Tuple[str]: A tuple of strings containing scopes that enable the | |
| CodeQL plugin. | |
| """ | |
| active_scopes = () | |
| if codeql_enabled: | |
| if GetHostInfo().os == "Linux": | |
| active_scopes += ("codeql-linux-ext-dep",) | |
| else: | |
| active_scopes += ("codeql-windows-ext-dep",) | |
| active_scopes += ("codeql-build", "codeql-analyze") | |
| return active_scopes | |
| def is_codeql_enabled_on_command_line(args: Namespace) -> bool: | |
| """Returns whether CodeQL was enabled on the command line. | |
| Args: | |
| args (Namespace): Object holding a string representation of command | |
| line arguments. | |
| Returns: | |
| bool: True if CodeQL is enabled on the command line. Otherwise, false. | |
| """ | |
| return args.codeql | |
| def set_audit_only_mode(uefi_builder: UefiBuilder) -> None: | |
| """Configures the CodeQL plugin to run in audit only mode. | |
| Args: | |
| uefi_builder (UefiBuilder): The UefiBuilder object for this platform | |
| build. | |
| """ | |
| uefi_builder.env.SetValue( | |
| "STUART_CODEQL_AUDIT_ONLY", | |
| "true", | |
| "Platform Defined") |