Я хочу что-то сделать с clang, и теперь я написал проход, который будет обрабатывать исходный код (вставлять некоторые вызовы функций в исходный код), например:
int main(){
...
func1(para1, para2 ...);//func1 is inserted by pass, which is defined in my runtime library.
...
return 0;
}
Я закончил всевсе вышеперечисленное и, как правило, если мы хотим выполнить наш проход, мы просто делаем следующее:
clang++ -S -emit-llvm xx.cpp -o xx.ll
opt -load xx.so -xx xx.ll -o xx.ll
... -o xx.o
... xx.o -L/runtime_library_path -lxx(.a or .so) -o xxx
Но теперь я хочу завершить все вышеперечисленные шаги, передав флаг для лязга.например: clang++ -useMypassAndrtlib xx.cpp
, и тогда он выполнит мой проход во время периода компиляции и свяжет мою библиотеку времени выполнения во время периода соединения.
До сих пор я достиг половины своих целей.
Я могу выполнить свой проходпросто передав флаг clang
, но мне все еще нужно иметь явную ссылку на мой rt-lib
.
, например: clang++ -useMyPass xx.cpp -L/runtime_library_path -lmyrtlib -o xxx
Итак, что я должен сделать, чтобы интегрировать свой пропуск (включая rt-Lib часть) в LLVM полностью?
какой исходный файл я должен изменить?Изменить что?Я просто хочу использовать " clang ++ -useMyPassAndrtlib xx.cpp " для запуска моего прохода и автоматического использования моего rt-lib.