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
Antwortet nicht wirklich auf Ihre Frage, aber haben Sie versucht, clang den Pass direkt ausführen lassen? –
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