1da58bf6f8b0078f8508e0692d80ca439cd89cac
[YACASL2.git] / src / Makefile
1 CC ?= gcc
2 CFLAGS ?= -g -Wall -Wextra -I $(INCLUDE)
3 RMF ?= rm -f
4 WHICH ?= which
5 CTAGS ?= ctags
6 ETAGS ?= etags
7 SED ?= sed
8
9 INCLUDE := ../include
10
11 COMMONSRC := word.c cmem.c cerr.c
12 CASL2SRC := struct.c hash.c
13 ASSRC := assemble.c token.c label.c
14 EXECSRC := exec.c dump.c
15
16 .PHONY: all version clean
17
18 all: version ../casl2 ../comet2 ../dumpword ctags etags
19
20 version:
21         $(MAKE) -C .. version
22
23 ../casl2: casl2.o $(subst .c,.o,$(COMMONSRC) $(CASL2SRC) $(ASSRC) $(EXECSRC))
24         $(CC) $(CFLAGS) -o $@ $^
25         @$(RMF) *.d
26
27 ../comet2: comet2.o $(subst .c,.o,$(COMMONSRC) $(CASL2SRC) $(EXECSRC))
28         $(CC) $(CFLAGS) -o $@ $^
29         @$(RMF) *.d
30
31 ../dumpword: dumpword.o $(subst .c,.o,$(COMMONSRC))
32         $(CC) $(CFLAGS) -o $@ $^
33         @$(RMF) *.d
34
35 %.o: %.c
36         $(CC) -c $(CFLAGS) $<
37
38 %.d: %.c
39         @$(CC) -MM -I $(INCLUDE) $< | $(SED) 's/\($*\.o\):/\1 $@:/g' >$@
40
41 -include $(subst .c,.d,casl2.c comet2.c dumpword.c $(COMMONSRC) $(CASL2SRC) $(ASSRC) $(EXECSRC))
42
43 ctags: $(INCLUDE)/*.h *.c
44         @$(WHICH) $(CTAGS) >/dev/null && $(CTAGS) $^
45
46 etags: $(INCLUDE)/*.h *.c
47         @$(WHICH) $(ETAGS) >/dev/null && $(ETAGS) $^
48
49 clean: clean_cmd clean_build clean_tags
50
51 clean_cmd:
52         @$(RMF) ../casl2 ../comet2 ../dumpword
53
54 clean_build:
55         @$(RMF) *.o *.d
56
57 clean_tags:
58         @$(RMF) TAGS tags