2015-09-07 2 views
2

Я хотел бы использовать Clang's static analyzer для анализа параллельного кода, то есть кода с необходимыми оболочками компилятора MPI. При настройке с CMake, однако, я всегда получаюСтатический анализ Clang с MPI

$ scan-build cmake /path/to/source 
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer 
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer -- works 

и последующей компиляции (make) терпит неудачу с

/usr/include/some/header.hpp:56:17: fatal error: mpi.h: No such file or directory 

#include "mpi.h"

Как правильно использовать scan-build Вот?

+0

Пробовали ли вы экспорт CFLAGS = '- I/путь/к/mpi.h? –

ответ

0

У вас должна быть оболочка MPI для вашего c-компилятора. Это означает, что библиотека MPI скомпилирована с помощью CLang. После этого вам нужно установить компилятор c в вашей среде сборки в mpicc. Это должно предоставить вам правильные варианты и ссылки.

1

Я не нашел способ использования обложек компилятора MPI непосредственно с scan-build. Тем не менее, вы можете обойти обертки и предоставить флаги вашему компилятору вручную. например это работает для моей среды:

$ export CXXFLAGS=`mpicxx --showme:compile` 
$ export LDFLAGS=`mpicxx --showme:link` 
$ export CXX=`mpicxx --showme:command` 
$ scan-build ./configure && scan-build make #Or your cmake equivalent 

В --showme: флагах, кажется, немного отличается между версиями, но mpicc --showme:help обычно дает список команд вашей конкретной обертке опор.

1

См MPI-Checker/examples:

Для вызова Clang Static Analyzer, рекомендуется использовать пакет scan-build реализованный в Python. Вы можете использовать сценарии , которые содержатся в магистрали LLVM (llvm/tools/clang/tools/scan-build-py/bin) или установить сценарии с pip install scan-build. Обратите внимание, что при make install LLVM копирует старые Perl версии скриптов на /usr/local/bin, которые поэтому могут перезаписывать версии, установленные с помощью pip.

Как оберточной компилятор MPI вмешивается в сценарии сканирования сборки, это рекомендуется вызвать анализ, основанный на базе компиляции, генерируется intercept-build (make|ninja|...). Обратите внимание, что базы данных , сгенерированные CMake, могут отличаться от баз данных, созданных intercept-build. Если файл compile_commands.json обозначает mpicc | mpiC++ в качестве используемого компилятора , никаких отчетов не поступает.

После создания базы данных компиляции, анализ может быть вызвано с:
analyze-build --enable-checker your.check --use-analyzer /path/to/clang

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