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