Makefile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # Makefile for libyrmcds
  2. PREFIX = /usr/local
  3. CC = gcc
  4. CXX = g++ -std=gnu++11
  5. CPPFLAGS = -D_GNU_SOURCE
  6. # Uncomment the next line to remove the internal lock used to
  7. # serialize sending commands.
  8. #
  9. #CPPFLAGS += -DLIBYRMCDS_NO_INTERNAL_LOCK
  10. OPTFLAGS = -gdwarf-3 -O2
  11. CFLAGS = -Wall -Wconversion $(OPTFLAGS)
  12. CXXFLAGS = $(CFLAGS) -Wnon-virtual-dtor -Woverloaded-virtual
  13. LDFLAGS = -L.
  14. LDLIBS = -lyrmcds -lpthread
  15. EXE = yc yc-cnt
  16. LIB = libyrmcds.a
  17. PACKAGES = build-essential subversion doxygen
  18. CHEADERS = $(wildcard *.h)
  19. CSOURCES = $(wildcard *.c)
  20. COBJECTS = $(patsubst %.c,%.o,$(CSOURCES))
  21. LIB_OBJECTS = $(filter-out yc.o yc-cnt.o,$(COBJECTS))
  22. TEST_SOURCES = $(wildcard t/*.c)
  23. TESTS = $(patsubst %.c,%,$(TEST_SOURCES))
  24. all: lib $(EXE)
  25. lib: $(LIB)
  26. # LZ4 is optional. Run "make lz4; make" to build LZ4 enabled library.
  27. LZ4_TAG = r127
  28. WGET = wget -q -P lz4/lib
  29. lz4:
  30. mkdir -p lz4/lib
  31. $(WGET) https://raw.githubusercontent.com/Cyan4973/lz4/$(LZ4_TAG)/lib/lz4.c
  32. $(WGET) https://raw.githubusercontent.com/Cyan4973/lz4/$(LZ4_TAG)/lib/lz4.h
  33. ifeq ($(wildcard lz4), lz4)
  34. $(info LZ4 transparent compression is *enabled*)
  35. CPPFLAGS += -DLIBYRMCDS_USE_LZ4
  36. LZ4_CFLAGS = -std=c99 -O3
  37. lz4/lib/lz4.o: lz4/lib/lz4.c
  38. $(CC) $(LZ4_CFLAGS) -Ilz4/lib -c -o $@ $<
  39. LIB_OBJECTS += lz4/lib/lz4.o
  40. endif
  41. yc: yc.o
  42. $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)
  43. yc-cnt: yc-cnt.o
  44. $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)
  45. $(COBJECTS): $(CHEADERS)
  46. $(EXE): $(LIB)
  47. $(LIB): $(LIB_OBJECTS)
  48. $(AR) rcs $@ $^
  49. t/%.exe: t/%.c $(LIB)
  50. $(CC) -I$(shell pwd) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)
  51. $(TESTS): $(LIB)
  52. @$(MAKE) -s $@.exe
  53. @echo Running ./$@.exe
  54. @./$@.exe
  55. @echo
  56. test: $(TESTS)
  57. html:
  58. rm -rf html
  59. doxygen
  60. serve: html
  61. @cd html; python -m SimpleHTTPServer 8888 || true
  62. clean:
  63. rm -rf *.o t/*.exe html $(EXE) $(LIB)
  64. setup:
  65. sudo apt-get install -y $(PACKAGES)
  66. .PHONY: all lib test html serve clean setup