code: def __call__(
      self, build_dir="build", generator="Ninja", build_cmd="ninja"
  ):
      logging.info(
          "CMake / {} build in directory {}".format(
              generator, os.path.abspath(build_dir)
          )
      )
      cmd_lst = self.cmake_command()
      os.makedirs(build_dir, exist_ok=True)
      with remember_cwd():
          os.chdir(build_dir)
          cmd_lst.extend(["-G{}".format(generator), ".."])
          logging.info("Executing: {}".format("\t\n".join(cmd_lst)))
          check_call(cmd_lst)
          logging.info("Now building")
          check_call(shlex.split(build_cmd))
  
imports: import argparse
  import os
  import sys
  from subprocess import check_call
  import shlex
  from ci.util import retry, remember_cwd
  from typing import List
  from collections import OrderedDict
  import logging
  import yaml
  import shutil
label_desc: Use image node_id 3 for calling the CMake obj's underlying member method code with example usage: obj.__call__(build_dir, generator, build_cmd) without return types