code: def build_extensions(self):
      build_ext_options.build_options(self)
      if sys.platform in ("msvc", "win32"):
          platform_name = "windows"
      elif sys.platform == "darwin":
          platform_name = "darwin"
      else:
          platform_name = "linux"
      arch = self.get_arch_name(platform_name)
      print("BUILD ARCH:", arch)
      objects = self.compile_objects(platform_name, arch, OBJ_DIR)
      # Work around max line length in Windows, by making a local directory
      # for the objects
      short_dir = "z"
      if not os.path.exists(short_dir):
          os.mkdir(short_dir)
      short_paths = []
      for object_path in objects:
          assert os.path.exists(object_path), object_path
          dir_name, filename = os.path.split(object_path)
          new_path = os.path.join(short_dir, filename)
          shutil.copyfile(object_path, new_path)
          assert os.path.exists(new_path), new_path
          short_paths.append(new_path)
      root = os.path.abspath(os.path.dirname(__file__))
      for e in self.extensions:
          e.include_dirs.append(os.path.join(root, "include"))
          e.include_dirs.append(
              os.path.join(INCLUDE, "%s-%s" % (platform_name, arch))
          )
          e.extra_objects = list(short_paths)
      build_ext.build_extensions(self)
      shutil.rmtree(short_dir)
  
imports: import shutil
  import os
  from setuptools import Extension, setup
  import contextlib
  import io
  import os.path
  import json
  import tempfile
  from setuptools.command.build_ext import build_ext, new_compiler
  from Cython.Build import cythonize
  import subprocess
  import sys
  import platform
  import numpy
label_desc: Use image node_id 1 for calling the ExtensionBuilder obj's underlying member method code with example usage: obj.build_extensions() without return types