如何为llvm IR编写makefile

时间:2016-07-23 16:46:58

标签: makefile llvm llvm-clang llvm-ir

如果我有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

1 个答案:

答案 0 :(得分:0)

为什么不写一个普通的Makefile来生成所需的可执行文件, 然后使用wllvm?

wllvm的无耻插件:

https://github.com/SRI-CSL/whole-program-llvm

我不使用lli,所以我很想知道它是如何解决的 任何依赖stdlibc的程序可能都有。