1# Copyright (C) 1996-2008 Markus F.X.J. Oberhumer
2#
3# this is modelled after build.sh; needs GNU make 3.80 or better
4
5SHELL = /bin/sh
6
7##
8## setup flags
9##
10
11##top_srcdir ?= ../..
12top_srcdir ?= $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))../..
13AR ?= ar
14CC ?= cc
15CFLAGS ?= -O
16
17CFI = -I$(top_srcdir)/include -I$(top_srcdir)
18BNAME = lzo2
19BLIB = lib$(BNAME).a
20
21CF = $(CPPFLAGS) $(CFI) $(CFLAGS)
22LF = $(LDFLAGS) $(LZO_EXTRA_LDFLAGS)
23LL = $(BLIB) $(LIBS) $(LZO_EXTRA_LIBS)
24
25
26##
27## setup files
28##
29
30__map = $(foreach __map_v,$(2),$(call $(1),$(__map_v)))
31__object_filename = $(addsuffix .o,$(basename $(notdir $(1))))
32
33BLIB_SOURCES := $(wildcard $(top_srcdir)/src/*.c)
34BLIB_SOURCES += $(LZO_EXTRA_SOURCES)
35BLIB_OBJECTS := $(call __map,__object_filename,$(BLIB_SOURCES))
36PROGRAMS = dict.out lzopack.out precomp.out precomp2.out simple.out lzotest.out
37
38
39##
40## rules
41##
42
43all.targets ?= $(BLIB) $(PROGRAMS) testmini.out
44all: $(all.targets)
45
46clean:
47	rm -f *.d *.o $(BLIB) $(PROGRAMS) testmini.out
48
49$(BLIB): $(BLIB_OBJECTS) $(LZO_EXTRA_OBJECTS)
50	rm -f $@
51	$(AR) rcs $@ $^
52
53# dynamically construct object rules
54define BLIB_OBJECT_template
55    $(call __object_filename,$(1)) : $(1) ; $$(CC) $$(CF) $$(LZO_EXTRA_CPPFLAGS) $$(LZO_EXTRA_CFLAGS) -c $$<
56endef
57$(foreach s,$(BLIB_SOURCES),$(eval $(call BLIB_OBJECT_template,$(s))))
58
59dict.out: $(top_srcdir)/examples/dict.c
60	$(CC) $(CF) $(LF) -o $@ $< $(LL)
61lzopack.out: $(top_srcdir)/examples/lzopack.c
62	$(CC) $(CF) $(LF) -o $@ $< $(LL)
63precomp.out: $(top_srcdir)/examples/precomp.c
64	$(CC) $(CF) $(LF) -o $@ $< $(LL)
65precomp2.out: $(top_srcdir)/examples/precomp2.c
66	$(CC) $(CF) $(LF) -o $@ $< $(LL)
67simple.out: $(top_srcdir)/examples/simple.c
68	$(CC) $(CF) $(LF) -o $@ $< $(LL)
69lzotest.out: $(top_srcdir)/lzotest/lzotest.c
70	$(CC) $(CF) $(LF) -o $@ $< $(LL)
71
72testmini.out: $(top_srcdir)/minilzo/testmini.c $(top_srcdir)/minilzo/minilzo.c
73	$(CC) $(CF) $(LF) -I$(top_srcdir)/include/lzo -o $@ $^ $(LIBS)
74
75
76# dependencies
77$(PROGRAMS): $(BLIB)
78# object dependencies are generated via -MMD
79-include *.d
80
81
82# debug
83show_vars:
84	@echo "BLIB_SOURCES = $(BLIB_SOURCES)"
85	@echo "BLIB_OBJECTS = $(BLIB_OBJECTS)"
86	@echo "PROGRAMS = $(PROGRAMS)"
87	@echo "LZO_EXTRA_SOURCES = $(LZO_EXTRA_SOURCES)"
88	@echo "LZO_EXTRA_OBJECTS = $(LZO_EXTRA_OBJECTS)"
89
90.PHONY: all clean show_vars
91
92