aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: b20c9256baba08f6dcd0066f9707bcc2180ad39f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
CC        := gcc
CFLAGS    := -Wall -g -I.
BISON     := bison
FLEX      := flex

BUILD_DIR := build

PARSER_Y  := parser.y
LEXER_L   := lexer.l
DRIVER_C  := driver.c
AST_C     := ast.c
AST_H     := ast.h

PARSER_C  := $(BUILD_DIR)/parser.tab.c
PARSER_H  := $(BUILD_DIR)/parser.tab.h
LEXER_C   := $(BUILD_DIR)/lex.yy.c
OBJS      := $(BUILD_DIR)/parser.tab.o $(BUILD_DIR)/lex.yy.o $(BUILD_DIR)/driver.o $(BUILD_DIR)/ast.o

TARGET    := $(BUILD_DIR)/imp

.PHONY: all clean run

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(PARSER_C) $(PARSER_H): $(PARSER_Y) | $(BUILD_DIR)
	$(BISON) -d --defines=$(PARSER_H) -o $(PARSER_C) $(PARSER_Y)

$(LEXER_C): $(LEXER_L) $(PARSER_H) | $(BUILD_DIR)
	$(FLEX) -o $@ $<

$(BUILD_DIR)/imp_parser.tab.o: $(PARSER_C) $(PARSER_H)
	$(CC) $(CFLAGS) -c $(PARSER_C) -o $@

$(BUILD_DIR)/lex.yy.o: $(LEXER_C) $(PARSER_H)
	$(CC) $(CFLAGS) -c $(LEXER_C) -o $@

$(BUILD_DIR)/driver.o: $(DRIVER_C) $(PARSER_H) $(AST_H) | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $(DRIVER_C) -o $@

$(BUILD_DIR)/ast.o: $(AST_C) $(AST_H) | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $(AST_C) -o $@

run: $(TARGET)
	./$(TARGET) example.imp

clean:
	rm -rf $(BUILD_DIR)