2016-07-23 21 views
0

Wenn ich 3 Dateien habe, function.h, function.c und my_program.c, die eine Methode in function.h alle im selben Verzeichnis aufrufen, was wäre die beste Art zu schreiben ein Makefile, so dass ich mit einem my_program.bc enden, das tatsächlich laufen würde, wenn ich lli my_program.bc eintippe? (Ich muss einen benutzerdefinierten Durchlauf laufen lassen, der Zeug in die Funktionen einfügen würde - sollte ich die Funktion function.bc und test.bc weiterleiten, oder sollte ich vor der Ausführung des Passes verknüpfen?)Wie schreibe ich ein Makefile für llvm IR

Ich habe llvm versucht -link function.bc mein_programm.bc ohne glück. Ich fühle, dass ich entweder etwas Einfaches vermisse oder die ganze Sache falsch mache.

Aktuelle schrecklich keine arbeitende Make-Datei:

.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 [email protected] $< $(CFLAGS) 

%.bc: %.c $(DEPS) 
    $(CC) $(IRFLAGS) -c -o [email protected] $< 

test2: test.bc functions.bc 
    llvm-link -o test2.bc $< functions.bc 


test: test.o functions.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 


clean: 
    $(RM) $(TARGET) *.o *.bc 
+0

Antwortet nicht wirklich auf Ihre Frage, aber haben Sie versucht, clang den Pass direkt ausführen lassen? –

+0

Ja, der Pass funktioniert und läuft, und die ausführbare Testdatei funktioniert auch. Mein Problem ist die Verknüpfung und die Ausführung des ursprünglichen Programms im BC-Format. – Ellyl

Antwort

0

Warum nicht einfach eine normale Makefile schreiben die gewünschte ausführbare Datei zu erzeugen, verwenden Sie dann wllvm?

Shameless Stecker für wllvm:

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

Ich benutze LLI nicht, so würde mich interessieren, um zu hören, wie es gelöst jede Abhängigkeit von stdlibc, die Ihr Programm haben.