1#
2# GNU Make and BSD Make compatible Makefile
3# This is the preferred way to build TLCI
4#
5
6CC?=	cc
7
8# Enable this flag to print heap info after each gc pass
9# DEBUG= -D_TLCI_DEBUG_HEAP
10
11# Number of heap cells. You should not change this if you don't know
12# what you are doing.
13HEAP_CELLS?=	512
14
15CFLAGS+=	-std=iso9899:1999 -pedantic -pedantic-errors \
16		-Wall -Wextra -Werror \
17		-Iinclude/ -D_XOPEN_SOURCE=600 $(DEBUG) \
18		-DHEAP_CELL_COUNT=$(HEAP_CELLS)
19
20LIBS=		-ly
21FLEX=		flex
22YACC=		yacc
23
24PREFIX?=	/usr/local/
25INSTALL?=	install
26
27OBJS=			\
28		src/heap.o \
29		src/tlci.o \
30		src/string.o \
31		src/evaluator.o
32
33.PHONY: all
34all: tlci
35
36.c.o:
37	$(CC) $(CFLAGS) -c $< -o $@
38
39tlci: lex.yy.o y.tab.o $(OBJS)
40	$(CC) $(CFLAGS) lex.yy.o y.tab.o $(OBJS) -o tlci $(LIBS)
41
42lex.yy.o: src/lexer.l y.tab.h
43	$(FLEX) src/lexer.l
44	$(CC) $(CFLAGS) -c -Iinclude/ lex.yy.c
45
46y.tab.o y.tab.h: src/parser.y
47	$(YACC) -d src/parser.y
48	$(CC) $(CFLAGS) -c -Iinclude/ y.tab.c
49
50.PHONY: install
51install: all
52	$(INSTALL) -d $(DESTDIR)/$(PREFIX)/bin
53	$(INSTALL) -C ./tlci $(DESTDIR)/$(PREFIX)/bin
54	$(INSTALL) -d $(DESTDIR)/$(PREFIX)/man/man8
55	$(INSTALL) -C docs/tlci.8.gz $(DESTDIR)/$(PREFIX)/man/man8
56
57.PHONY: clean
58clean:
59	rm $(OBJS) lex.yy.o y.tab.o lex.yy.c y.tab.c y.tab.h tlci
60