У меня есть проход 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 и мой пользовательский проход, который вводит вызовы внешней функции.