## @file WinRcPath.py # Plugin to find Windows SDK Resource Compiler rc.exe ## # This plugin works in conjuncture with the tools_def to support rc.exe # # Copyright (c) Microsoft Corporation # SPDX-License-Identifier: BSD-2-Clause-Patent ## import logging from edk2toolext.environment.plugintypes.uefi_build_plugin import IUefiBuildPlugin import edk2toollib.windows.locate_tools as locate_tools from edk2toolext.environment import shell_environment from edk2toolext.environment import version_aggregator from pathlib import Path class WinRcPath(IUefiBuildPlugin): def do_pre_build(self, thebuilder): # Check if the rc.exe path is already cached and still exists cache_path = Path(thebuilder.ws, "Conf", ".rc_path") if cache_path.exists(): with open(cache_path, "r") as f: rc_path = Path(f.readline().strip()).absolute() if (rc_path / "rc.exe").exists(): logging.debug(f"Found rc.exe folder in cache: {rc_path}") self._set_path(rc_path) return 0 # If it does not exist, try to find it with FindToolInWinSdk path = locate_tools.FindToolInWinSdk("rc.exe") if path is None: logging.critical("Failed to find rc.exe") return 1 path = Path(path).absolute().parent self._set_path(path) cache_path.unlink(missing_ok=True) with cache_path.open("w") as f: f.write(str(path)) return 0 def _set_path(self, path: Path): shell_environment.GetEnvironment().set_shell_var("WINSDK_PATH_FOR_RC_EXE", str(path)) version_aggregator.GetVersionAggregator().ReportVersion("WINSDK_PATH_FOR_RC_EXE", str(path), version_aggregator.VersionTypes.INFO)