def METHOD_NAME(self):
    logging.info("Running Python version: " + str(sys.version_info))
    (build_env, shell_env) = self_describing_environment.BootstrapEnvironment(
        self.GetWorkspaceRoot(), self.GetActiveScopes())
    # # Bind our current execution environment into the shell vars.
    ph = os.path.dirname(sys.executable)
    if " " in ph:
        ph = '"' + ph + '"'
    shell_env.set_shell_var("PYTHON_HOME", ph)
    # PYTHON_COMMAND is required to be set for using edk2 python builds.
    pc = sys.executable
    if " " in pc:
        pc = '"' + pc + '"'
    shell_env.set_shell_var("PYTHON_COMMAND", pc)
    if self.tool_chain_tag.lower().startswith("vs"):
        # # Update environment with required VC vars.
        interesting_keys = ["ExtensionSdkDir", "INCLUDE", "LIB"]
        interesting_keys.extend(
            ["LIBPATH", "Path", "UniversalCRTSdkDir", "UCRTVersion", "WindowsLibPath", "WindowsSdkBinPath"])
        interesting_keys.extend(
            ["WindowsSdkDir", "WindowsSdkVerBinPath", "WindowsSDKVersion", "VCToolsInstallDir"])
        vc_vars = QueryVcVariables(
            interesting_keys, 'x86', vs_version=self.tool_chain_tag.lower())
        for key in vc_vars.keys():
            logging.debug(f"Var - {key} = {vc_vars[key]}")
            if key.lower() == 'path':
                shell_env.set_path(vc_vars[key])
            else:
                shell_env.set_shell_var(key, vc_vars[key])
        self.OutputDir = os.path.join(
            shell_env.get_shell_var("EDK_TOOLS_PATH"), "Bin", "Win32")
        # compiled tools need to be added to path because antlr is referenced
        shell_env.insert_path(self.OutputDir)
        # Actually build the tools.
        ret = RunCmd('nmake.exe', None,
                     workingdir=shell_env.get_shell_var("EDK_TOOLS_PATH"))
        if ret != 0:
            raise Exception("Failed to build.")
        self.WritePathEnvFile(self.OutputDir)
        return ret
    elif self.tool_chain_tag.lower().startswith("gcc"):
        cpu_count = self.GetCpuThreads()
        ret = RunCmd("make", f"-C .  -j {cpu_count}", workingdir=shell_env.get_shell_var("EDK_TOOLS_PATH"))
        if ret != 0:
            raise Exception("Failed to build.")
        self.OutputDir = os.path.join(
            shell_env.get_shell_var("EDK_TOOLS_PATH"), "Source", "C", "bin")
        self.WritePathEnvFile(self.OutputDir)
        return ret
    logging.critical("Tool Chain not supported")
    return -1