【问题标题】:How to write a makefile for llvm IR如何为 llvm IR 编写 makefile
【发布时间】:2016-07-23 16:46:57
【问题描述】:

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

【问题讨论】:

  • 没有真正回答你的问题,但是你试过让clang直接运行pass吗?
  • 是的,通行证可以运行,测试可执行文件也可以运行。我的问题是链接并使原始程序以 bc 格式运行。

标签: makefile llvm llvm-clang llvm-ir


【解决方案1】:

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

wllvm 的无耻插件:

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

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

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多