parameters: (self)
docstring: inject deep into distutils to customize how the dispatch
      to gcc/nvcc works.
  
      If you subclass UnixCCompiler, it's not trivial to get your subclass
      injected in, and still have the right customizations (i.e.
      distutils.sysconfig.customize_compiler) run on it. So instead of going
      the OO route, I have this. Note, it's kindof like a wierd functional
      subclassing going on.
docstring_summary: inject deep into distutils to customize how the dispatch
      to gcc/nvcc works.
docstring_tokens: inject deep into distutils to customize how the dispatch to gcc / nvcc works .
function: def customize_compiler_for_nvcc(self):
      """inject deep into distutils to customize how the dispatch
      to gcc/nvcc works.
  
      If you subclass UnixCCompiler, it's not trivial to get your subclass
      injected in, and still have the right customizations (i.e.
      distutils.sysconfig.customize_compiler) run on it. So instead of going
      the OO route, I have this. Note, it's kindof like a wierd functional
      subclassing going on."""
  
      # tell the compiler it can processes .cu
      self.src_extensions.append('.cu')
  
      # save references to the default compiler_so and _comple methods
      default_compiler_so = self.compiler_so
      super = self._compile
  
      # now redefine the _compile method. This gets executed for each
      # object but distutils doesn't have the ability to change compilers
      # based on source extension: we add it.
      def _compile(obj, src, ext, cc_args, extra_postargs, pp_opts):
          if os.path.splitext(src)[1] == '.cu':
              # use the cuda for .cu files
              self.set_executable('compiler_so', CUDA['nvcc'])
              # use only a subset of the extra_postargs, which are 1-1 translated
              # from the extra_compile_args in the Extension class
              postargs = extra_postargs['nvcc']
          else:
              postargs = extra_postargs['gcc']
  
          super(obj, src, ext, cc_args, postargs, pp_opts)
          # reset the default compiler_so, which we might have changed for cuda
          self.compiler_so = default_compiler_so
  
      # inject our redefined _compile method into the class
      self._compile = _compile
function_tokens: def customize_compiler_for_nvcc ( self ) : # tell the compiler it can processes .cu self . src_extensions . append ( '.cu' ) # save references to the default compiler_so and _comple methods default_compiler_so = self . compiler_so super = self . _compile # now redefine the _compile method. This gets executed for each # object but distutils doesn't have the ability to change compilers # based on source extension: we add it. def _compile ( obj , src , ext , cc_args , extra_postargs , pp_opts ) : if os . path . splitext ( src ) [ 1 ] == '.cu' : # use the cuda for .cu files self . set_executable ( 'compiler_so' , CUDA [ 'nvcc' ] ) # use only a subset of the extra_postargs, which are 1-1 translated # from the extra_compile_args in the Extension class postargs = extra_postargs [ 'nvcc' ] else : postargs = extra_postargs [ 'gcc' ] super ( obj , src , ext , cc_args , postargs , pp_opts ) # reset the default compiler_so, which we might have changed for cuda self . compiler_so = default_compiler_so # inject our redefined _compile method into the class self . _compile = _compile