aboutsummaryrefslogtreecommitdiff
path: root/makefile
blob: 0e65dec2f39a69d8ac7017f8fea8601bd8c7fb1e (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# UPEM / Compilation / Projet
# Pacien TRAN-GIRARD, Adam NAILI

# DIRECTORIES
SRC_DIR := src
RES_DIR := res
OUT_DIR := out
DOC_DIR := doc

# INPUT
LEX_SRC := tpc.lex
YACC_SRC := tpc.y
PDF_SRC := rapport.md
ST_SRC := symbol_table
GEN_SRC := generator

# INTERMEDIATE
LEX_GEN := tpc.yy
YACC_GEN := tpc.tab

# OUTPUT
COMPIL_BIN := tcompil
COMMIT_LOG := commits.log
REPORT_PDF := rapport.pdf

# CC PARAMS
CC := gcc
LEX := flex
YACC := bison
ASM := nasm
AFLAGS := -f elf64
CFLAGS := -ansi -pedantic -Wall -std=gnu99 -O2
LFLAGS := -lfl -ly
IFLAGS += -I$(SRC_DIR) -I$(OUT_DIR)

# RULES
all: clean $(OUT_DIR)/$(COMPIL_BIN)

test: $(OUT_DIR)/$(FILE_TEST).o
	$(CC) $< -o $(OUT_DIR)/$(FILE_TEST) -nostartfiles -no-pie

$(OUT_DIR)/$(FILE_TEST).o: $(OUT_DIR)/$(FILE_TEST).asm
	$(ASM) $(AFLAGS) $< -o $@

$(OUT_DIR)/$(FILE_TEST).asm: $(RES_DIR)/$(FILE_TEST).tpc $(OUT_DIR)/$(COMPIL_BIN)
	$(OUT_DIR)/$(COMPIL_BIN) < $< > $@

$(OUT_DIR)/$(LEX_GEN).c: $(SRC_DIR)/$(LEX_SRC)
	$(LEX) -o $@ $^

$(OUT_DIR)/$(YACC_GEN).c $(OUT_DIR)/$(YACC_GEN).h: $(SRC_DIR)/$(YACC_SRC) $(SRC_DIR)/$(ST_SRC).h $(SRC_DIR)/$(GEN_SRC).h
	$(YACC) --output=$(OUT_DIR)/$(YACC_GEN).c --defines=$(OUT_DIR)/$(YACC_GEN).h -v $<

$(OUT_DIR)/$(LEX_GEN).o: $(OUT_DIR)/$(LEX_GEN).c $(OUT_DIR)/$(YACC_GEN).h
	$(CC) -o $@ -c $< $(IFLAGS) $(LFLAGS) $(CFLAGS)

$(OUT_DIR)/$(YACC_GEN).o: $(OUT_DIR)/$(YACC_GEN).c
	$(CC) -o $@ -c $^ $(IFLAGS) $(LFLAGS) $(CFLAGS)

$(OUT_DIR)/$(ST_SRC).o: $(SRC_DIR)/$(ST_SRC).c
	$(CC) -o $@ -c $^ $(IFLAGS) $(LFLAGS) $(CFLAGS)

$(OUT_DIR)/$(GEN_SRC).o: $(SRC_DIR)/$(GEN_SRC).c
	$(CC) -o $@ -c $^ $(IFLAGS) $(LFLAGS) $(CFLAGS)

$(OUT_DIR)/$(COMPIL_BIN): $(OUT_DIR)/$(LEX_GEN).o $(OUT_DIR)/$(YACC_GEN).o $(OUT_DIR)/$(ST_SRC).o $(OUT_DIR)/$(GEN_SRC).o
	$(CC) -o $@ $^ $(IFLAGS) $(LFLAGS) $(CFLAGS)

$(OUT_DIR)/$(REPORT_PDF): $(DOC_DIR)/$(PDF_SRC)
	pandoc --template $(DOC_DIR)/report-template.tex --number-sections --listings --output $@ $^

$(OUT_DIR)/$(COMMIT_LOG):
	git log > $@

clean:
	rm -rf $(OUT_DIR)/*