如果我有3个文件,function.h,function.c和my_program.c,它们在同一个目录中调用function.h中的一个方法,那么写一个makefile的最佳方法是什么,这样我最终得到的我输入lli my_program.bc时实际运行的my_program.bc? (我需要运行一个用户定义的传递,它会将东西插入到函数中 - 我应该在function.bc和test.bc上运行传递,还是应该在运行传递之前链接?)
我已经尝试过llvm-link function.bc my_program.bc但没有运气。我觉得我要么缺少一些简单的东西,要么就是整个错误。
当前可怕的无法工作的makefile:
.PHONY: all clean
CC = clang
CFLAGS = -std=gnu99 -D_POSIX_C_SOURCE=200809L -g -Wall
IRFLAGS = -O3 -emit-llvm
TARGET = test
DEPS = functions.h
all: $(TARGET)
bc: test2
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
%.bc: %.c $(DEPS)
$(CC) $(IRFLAGS) -c -o $@ $<
test2: test.bc functions.bc
llvm-link -o test2.bc $< functions.bc
test: test.o functions.o
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(TARGET) *.o *.bc
答案 0 :(得分:0)
为什么不写一个普通的Makefile来生成所需的可执行文件, 然后使用wllvm?
wllvm的无耻插件:
https://github.com/SRI-CSL/whole-program-llvm
我不使用lli,所以我很想知道它是如何解决的 任何依赖stdlibc的程序可能都有。