code: def build_extension(self, ext):
      # Decide the build type: release/debug
      build_type = os.getenv("CHAINERX_BUILD_TYPE", None)
      if build_type is not None:
          # Use environment variable
          pass
      elif self.debug:
          # Being built with `python setup.py build --debug`
          build_type = "Debug"
      elif os.getenv("READTHEDOCS", None) == "True":
          # on ReadTheDocs
          build_type = "Debug"
      else:
          # default
          build_type = "Release"
  
      extdir = os.path.abspath(
          os.path.dirname(self.get_ext_fullpath(ext.name))
      )
      cmake_args = ["-GNinja"] if self.use_ninja else []
      cmake_args += [
          "-DCHAINERX_BUILD_PYTHON=1",
          "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=" + extdir,
          "-DPYTHON_EXECUTABLE=" + sys.executable,
          "-DCHAINERX_BUILD_TEST=OFF",
          "-DCMAKE_BUILD_TYPE=" + build_type,
      ]
  
      build_args = ["--config", build_type]
  
      if platform.system() == "Windows":
          cmake_args += [
              "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}".format(
                  build_type.upper(), extdir
              )
          ]
  
          if not self.use_ninja:
              if sys.maxsize > 2**32:
                  cmake_args += ["-A", "x64"]
              build_args += ["--", "/m"]
      else:
          build_args += ["--"]
          build_args += ext.build_targets
  
      env = os.environ.copy()
      env["CXXFLAGS"] = '{} -DVERSION_INFO=\\"{}\\"'.format(
          env.get("CXXFLAGS", ""), self.distribution.get_version()
      )
      if not os.path.exists(self.build_temp):
          os.makedirs(self.build_temp)
      subprocess.check_call(
          ["cmake", ext.sourcedir] + cmake_args,
          cwd=self.build_temp,
          env=env,
      )
      subprocess.check_call(
          ["cmake", "--build", "."] + build_args, cwd=self.build_temp
      )
  
file_path: chainer/chainerx_build_helper.py
imports: import distutils
  import os
  import platform
  import re
  import subprocess
  import sys
  import setuptools
  from setuptools.command import build_ext
label_desc: Use image node_id 2 for calling the CMakeBuild obj's underlying member method code with example usage: obj.build_extension(ext) without return types