2014-11-07 2 views
1

Эти две линии были взяты из ThrustInterop.py найдены в PyCuda/ExamplesКак установить компилятор для codepy.toolchain?

import codepy.toolchain 
codepy.toolchain.guess_toolchain() 

Я понимаю, что это должно вернуть ToolChain экземпляр для компилятора C++, найденного в $HOME/.aksetup-defaults.py.

BOOST_COMPILER = 'gcc' 
BOOST_INC_DIR = ['/usr/local/Cellar/boost/1.57.0/include/'] 
BOOST_LIB_DIR = ['/usr/local/Cellar/boost/1.57.0/lib/'] 

BOOST_PYTHON_LIBNAME = ['boost_python'] 
BOOST_THREAD_LIBNAME = ['boost_thread'] 
CUDADRV_LIBNAME = ['cuda'] 
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib'] 
CUDART_LIBNAME = ['cudart'] 
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib'] 
CUDA_ENABLE_CURAND = True 
CUDA_ENABLE_GL = True 
CUDA_INC_DIR = ['${CUDA_ROOT}/include'] 
CUDA_TRACE = False 
CURAND_LIBNAME = ['curand'] 
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib'] 
USE_SHIPPED_BOOST = False 

Под Python 2.7.6, я получаю следующее исключение

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/codepy/toolchain.py", line 433, in guess_toolchain 
    raise ToolchainGuessError("unknown compiler") 
codepy.toolchain.ToolchainGuessError: unknown compiler 

В кластере с Python 3.4.1:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/cluster/home03/math/echeverl/local2/lib/python3.4/site-packages/codepy/toolchain.py", line 439, in guess_nvcc_toolchain 
    gcc_kwargs = _guess_toolchain_kwargs_from_python_config() 
    File "/cluster/home03/math/echeverl/local2/lib/python3.4/site-packages/codepy/toolchain.py", line 398, in _guess_toolchain_kwargs_from_python_config 
    so_ext=make_vars["SO"], 
KeyError: 'SO' 

После просмотра в библиотеке я обнаружил, что не распознает clang, поэтому я модифицировал 'guess_toolchain' в toolchain.py

def guess_toolchain(): 
    """Guess and return a :class:`Toolchain` instance. 

    Raise :exc:`ToolchainGuessError` if no toolchain could be found. 
    """ 
    kwargs = _guess_toolchain_kwargs_from_python_config() 

    from pytools.prefork import call_capture_output 
    result, version, stderr = call_capture_output([kwargs["cc"], "--version"]) 
    if result != 0: 
     raise ToolchainGuessError("compiler version query failed: "+stderr) 
    #Original Code 
    # if "Free Sofware Foundation" in version: 
    #Modified line to recognize clang 
    if ("Free Software Foundation" in version) or ("clang" in version): 
     if "-Wstrict-prototypes" in kwargs["cflags"]: 
      kwargs["cflags"].remove("-Wstrict-prototypes") 
     if "darwin" in version: 
      # Are we running in 32-bit mode? 
      # The python interpreter may have been compiled as a Fat binary 
      # So we need to check explicitly how we're running 
      # And update the cflags accordingly 
      import sys 
      if sys.maxint == 0x7fffffff: 
       kwargs["cflags"].extend(['-arch', 'i386']) 

     return GCCToolchain(**kwargs) 
    else: 
     raise ToolchainGuessError("unknown compiler") 

Как я могу сообщить codepy.toolchain, какой компилятор использовать?

ответ

2

Возможна установка переменной окружения CC в соответствующее значение. Также проверьте свой Python Makefile, сохраненный под config в каталоге Python lib. Именно в этом случае информация о конфигурации поступает в первую очередь.

+0

, даже если я устанавливаю 'CC = gcc-4.9', toolchain по-прежнему использует' clang' в качестве компилятора по умолчанию. Есть ли способ переопределить это? – ilciavo

0

Я изменил файл ~/.aksetup-defaults.py на:

#For CUDA 
CUDA_ROOT=['/Developer/NVIDIA/CUDA-5.0/'] 
CUDADRV_LIB_DIR=['/Developer/NVIDIA/CUDA-5.0/lib'] 
CUDA_INC_DIR=['/Developer/NVIDIA/CUDA-5.0/include'] 

#For Boost 
BOOST_INC_DIR=['${HOME}/pool/include/'] 
BOOST_LIB_DIR=['${HOME}/pool/lib'] 
USE_SHIPPED_BOOST=False 

Это решило проблему с toolchain, но я все еще пытаюсь выяснить, как компилировать.

Смежные вопросы