Как скомпилировать coreutils с использованием Clang с пользовательским плагином и предварительно добавленным C-файлом - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть проход LLVM, который должен выполнить некоторые преобразования.Среди прочего, он должен вставлять вызовы функций в функцию, определенную в файле foo.c.

. Моя идея состоит в том, чтобы перекомпилировать coreutils, используя мой проход LLVM, чтобы я мог протестировать полученные двоичные файлы.

Процесс строительства для coreutils прост.Нужно клонировать репозиторий и затем выполнить:

$ ./bootstrap
$ ./configure
$ make

Кажется, что простые подкачки компиляторов работают правильно:

$ export CC=clang
$ ./configure
$ make

Но (насколько я знаю), чтобы загрузить мой пропуск, я долженвызовите clang следующим образом (при условии, что я настроил автоматический вызов pass, как описано здесь ):

clang -Xclang -load -Xclang path/to/Pass.so file_to_compile.c

Если я попытаюсь установить CC в приведенное выше значение следующим образом:

$ export CC="clang -Xclang -load -Xclang path/to/Pass.so foo.c"

Я получил ошибку на ./configure:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... clang -Xclang -load -Xclang myPass.so foo.c
checking whether the C compiler works... no
configure: error: in `~/coreutils':
configure: error: C compiler cannot create executables
See `config.log' for more details

config.log is:

configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -V >&5
clang-7: error: argument to '-V' is missing (expected 1 value)
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -qversion >&5
clang-7: error: unknown argument '-qversion', did you mean '--version'?
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -version >&5
clang-7: error: unknown argument '-version', did you mean '--version'?
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5276: checking whether the C compiler works
configure:5298: clang -Xclang -load -Xclang myPass.so foo.c    conftest.c  >&5
clang-7: error: no such file or directory: 'foo.c'

Подводя итог, моя основная идея - перекомпилировать coreutils используя Clang и мой пользовательский проход, который вводит вызовы внешней функции.

...