-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
84 lines (72 loc) · 2.64 KB
/
Makefile
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
77
78
79
80
81
82
83
84
################################################################################
# Compiling Instructions
################################################################################
CC= clang
CFLAGS= -Wall -g -c
CFLAGS_LLVM= -Wall -g `llvm-config --cflags` -c
LD=clang++
LDFLAGS= -rdynamic `llvm-config --cxxflags --ldflags --libs core executionengine mcjit interpreter analysis native bitwriter --system-libs`
BISON= bison
FLEX= flex
################################################################################
# Source codes, Object files, and temporary files
################################################################################
# Source codes and object files in C
src= $(filter-out $(llvm_src), $(wildcard src/*.c))
obj= $(patsubst %.c,%.o, $(notdir $(src)))
temp= $(wildcard temp/*.*)
# Flex and Bison source file
yy= src/parser.y
ll= src/scanner.l
# Temporary files generated by Flex and Bison
tmp_src= temp/bison.c temp/flex.c
tmp_obj= $(patsubst %.c,%.o, $(notdir $(tmp_src)))
# The LLVM source code and object file
llvm_src= src/llvm.c
llvm_obj= llvm.o
# The Executable
exe= bin/ekcc
################################################################################
# Commands
################################################################################
all: \
parser \
scanner \
project.o \
llvm.o \
main
parser: $(yy)
${BISON} $(yy)
scanner: $(ll)
${FLEX} $(ll)
project.o: $(src) $(tmp_src)
${CC} ${CFLAGS} $(src) $(tmp_src)
llvm.o: $(llvm_src)
${CC} ${CFLAGS_LLVM} $(llvm_src)
main: $(obj) $(tmp_obj) $(llvm_obj)
${LD} ${LDFLAGS} -o bin/ekcc $(obj) $(tmp_obj) $(llvm_obj)
rm -f $(obj) $(tmp_obj) $(llvm_obj) $(temp)
################################################################################
# Tests
################################################################################
test1:
$(exe) -emit-ast -jit -o ./tests/test91.yaml ./tests/test91.ek 1 2 3
test2:
$(exe) -emit-ast -jit -o ./tests/test92.yaml ./tests/test92.ek 1 2 3
ctest1:
$(exe) -emit-ast -jit -o ./tests/test01.yaml ./tests/test01.ek 1 2 3
ctest2:
$(exe) -emit-llvm -jit -o ./tests/test02.ll ./tests/test02.ek 1 2 3
ctest1-O:
$(exe) -O -emit-llvm -jit -o ./tests/test01.ll ./tests/test01.ek 1 2
ctest2-O:
$(exe) -emit-llvm -jit -O -o ./tests/test02.ll ./tests/test02.ek 1 2 3
ctest4:
$(exe) -emit-llvm -jit -o ./tests/test04.ll ./tests/test04.ek
subtest:
$(exe) -emit-ast -jit -o ./tests/subtest.yaml ./tests/subtest.ek
################################################################################
# Housekeeping
################################################################################
clean:
rm -f $(exe) ./testcases/*.yaml ./testcases/*.ast *.o