Makefile 2.3 KB

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