def _compile_unix_hipcc(self, obj: str, src: str, ext: Extension) -> None: cc_args = self._get_preprocess_options(ext) + ['-c'] # For CUDA C source files, compile them with HIPCC. rocm_path = build.get_hipcc_path() base_opts = build.get_compiler_base_options(rocm_path) compiler_so = rocm_path hip_version = build.get_hip_version() postargs = ['-O2', '-fPIC', '--include', 'hip_runtime.h'] if hip_version >= 402: postargs += ['--std=c++14'] else: postargs += ['--std=c++11'] print('HIPCC options:', postargs) self.spawn(compiler_so + base_opts + cc_args + [src, '-o', obj] + postargs)
def cythonize(extensions, ctx: Context): # Delay importing Cython as it may be installed via setup_requires if # the user does not have Cython installed. import Cython import Cython.Build cython_version = pkg_resources.parse_version(Cython.__version__) directives = { 'linetrace': ctx.linetrace, 'profile': ctx.profile, # Embed signatures for Sphinx documentation. 'embedsignature': True, } cythonize_options = {'annotate': ctx.annotate} # Compile-time constants to be used in Cython code compile_time_env = cythonize_options.get('compile_time_env') if compile_time_env is None: compile_time_env = {} cythonize_options['compile_time_env'] = compile_time_env # Enable CUDA Python. # TODO: add `cuda` to `setup_requires` only when this flag is set use_cuda_python = cupy_builder.get_context().use_cuda_python compile_time_env['CUPY_USE_CUDA_PYTHON'] = use_cuda_python if use_cuda_python: print('Using CUDA Python') compile_time_env['CUPY_CUFFT_STATIC'] = False compile_time_env['CUPY_CYTHON_VERSION'] = str(cython_version) if ctx.use_stub: # on RTD compile_time_env['CUPY_CUDA_VERSION'] = 0 compile_time_env['CUPY_HIP_VERSION'] = 0 elif use_hip: # on ROCm/HIP compile_time_env['CUPY_CUDA_VERSION'] = 0 compile_time_env['CUPY_HIP_VERSION'] = build.get_hip_version() else: # on CUDA compile_time_env['CUPY_CUDA_VERSION'] = build.get_cuda_version() compile_time_env['CUPY_HIP_VERSION'] = 0 return Cython.Build.cythonize(extensions, verbose=True, language_level=3, compiler_directives=directives, **cythonize_options)
def _compile_unix_hipcc(self, obj, src, ext, cc_args, extra_postargs, pp_opts): # For CUDA C source files, compile them with HIPCC. rocm_path = build.get_hipcc_path() base_opts = build.get_compiler_base_options(rocm_path) compiler_so = rocm_path hip_version = build.get_hip_version() postargs = ['-O2', '-fPIC', '--include', 'hip_runtime.h'] if hip_version >= 402: postargs += ['--std=c++14'] else: postargs += ['--std=c++11'] print('HIPCC options:', postargs) try: self.spawn(compiler_so + base_opts + cc_args + [src, '-o', obj] + postargs) except errors.DistutilsExecError as e: raise errors.CompileError(str(e))
def test_check_hip_version(self): with self.assertRaises(RuntimeError): build.get_hip_version() assert build.check_hip_version(self.compiler, self.settings) assert isinstance(build.get_hip_version(), int) assert isinstance(build.get_hip_version(True), str)