class_docstr: Customize the process for building the extension by chaning 
  the options for compiling swig files and cu files.
  
  Ref: https://github.com/python/cpython/blob/master/Lib/distutils/command/build_ext.py
code: def build_extensions(self):
      options = prepare_extension_options()
      for key, val in options.items():
          singa_wrap.__dict__[key] = val
      customize_compiler_for_nvcc(self.compiler)
      build_ext.build_extensions(self)
  
imports: from setuptools import find_packages, setup, Command, Extension
  from setuptools.command.build_ext import build_ext
  from distutils.errors import CompileError, DistutilsSetupError
  import os
  import io
  import sys
  import subprocess
  import shutil
  import shlex
  from pathlib import Path
  import numpy
  from datetime import date
label_desc: Use image node_id 2 for calling the custom_build_ext obj's underlying member method code with example usage: obj.build_extensions() without return types