1CC ?= gcc 2DESTDIR ?= /usr/local 3LD ?= gcc 4C_COMMON_FLAGS ?= -fPIC -Wall -W -Wno-unused-parameter -Wno-pointer-sign -I./include -I./uthash -I./src -I./klib 5MAJOR_VERSION = 0 6MINOR_VERSION = 2 7PATCH_VERSION = 9 8VERSION = "$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)" 9SONAME = libucl.so 10SONAME_FULL = $(SONAME).$(MAJOR_VERSION) 11OBJDIR ?= .obj 12TESTDIR ?= tests 13SRCDIR ?= src 14INCLUDEDIR ?= include 15MKDIR ?= mkdir 16INSTALL ?= install 17RM ?= rm 18RMDIR ?= rmdir 19LN ?= ln 20LD_SHARED_FLAGS ?= -Wl,-soname,$(SONAME) -shared -lm 21LD_UCL_FLAGS ?= -L$(OBJDIR) -Wl,-rpath,$(OBJDIR) -lucl 22LD_ADD ?= -lrt 23COPT_FLAGS ?= -O2 24HDEPS = $(SRCDIR)/ucl_hash.h \ 25 $(SRCDIR)/ucl_chartable.h \ 26 $(SRCDIR)/ucl_internal.h \ 27 $(INCLUDEDIR)/ucl.h \ 28 $(SRCDIR)/mum.h 29OBJECTS = $(OBJDIR)/ucl_hash.o \ 30 $(OBJDIR)/ucl_util.o \ 31 $(OBJDIR)/ucl_parser.o \ 32 $(OBJDIR)/ucl_emitter.o \ 33 $(OBJDIR)/ucl_schema.o 34 35all: $(OBJDIR) $(OBJDIR)/$(SONAME) 36 37$(OBJDIR)/$(SONAME): $(OBJDIR)/$(SONAME_FULL) 38 $(LN) -sf $(SONAME_FULL) $(OBJDIR)/$(SONAME) 39 40$(OBJDIR)/$(SONAME_FULL): $(OBJECTS) 41 $(CC) -o $(OBJDIR)/$(SONAME_FULL) $(OBJECTS) $(LD_SHARED_FLAGS) $(LDFLAGS) $(SSL_LIBS) $(FETCH_LIBS) 42 43$(OBJDIR): 44 @$(MKDIR) -p $(OBJDIR) 45 46# Compile rules 47$(OBJDIR)/ucl_util.o: $(SRCDIR)/ucl_util.c $(HDEPS) 48 $(CC) -o $(OBJDIR)/ucl_util.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_util.c 49$(OBJDIR)/ucl_parser.o: $(SRCDIR)/ucl_parser.c $(HDEPS) 50 $(CC) -o $(OBJDIR)/ucl_parser.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_parser.c 51$(OBJDIR)/ucl_emitter.o: $(SRCDIR)/ucl_emitter.c $(HDEPS) 52 $(CC) -o $(OBJDIR)/ucl_emitter.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_emitter.c 53$(OBJDIR)/ucl_hash.o: $(SRCDIR)/ucl_hash.c $(HDEPS) 54 $(CC) -o $(OBJDIR)/ucl_hash.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_hash.c 55$(OBJDIR)/ucl_schema.o: $(SRCDIR)/ucl_schema.c $(HDEPS) 56 $(CC) -o $(OBJDIR)/ucl_schema.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_schema.c 57 58clean: 59 $(RM) $(OBJDIR)/*.o $(OBJDIR)/$(SONAME_FULL) $(OBJDIR)/$(SONAME) $(OBJDIR)/chargen $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/objdump $(OBJDIR)/test_generate $(OBJDIR)/test_schema || true 60 $(RMDIR) $(OBJDIR) 61 62# Utils 63 64chargen: utils/chargen.c $(OBJDIR)/$(SONAME) 65 $(CC) -o $(OBJDIR)/chargen $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) utils/chargen.c 66objdump: utils/objdump.c $(OBJDIR)/$(SONAME) 67 $(CC) -o $(OBJDIR)/objdump $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) utils/objdump.c $(LD_UCL_FLAGS) 68 69# Tests 70 71test: $(OBJDIR) $(OBJDIR)/$(SONAME) $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/test_generate $(OBJDIR)/test_schema 72 73run-test: test 74 TEST_DIR=$(TESTDIR) $(TESTDIR)/run_tests.sh $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/test_generate $(OBJDIR)/test_schema 75 76$(OBJDIR)/test_basic: $(TESTDIR)/test_basic.c $(OBJDIR)/$(SONAME) 77 $(CC) -o $(OBJDIR)/test_basic $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_basic.c $(LD_UCL_FLAGS) 78$(OBJDIR)/test_schema: $(TESTDIR)/test_schema.c $(OBJDIR)/$(SONAME) 79 $(CC) -o $(OBJDIR)/test_schema $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_schema.c $(LD_UCL_FLAGS) 80$(OBJDIR)/test_speed: $(TESTDIR)/test_speed.c $(OBJDIR)/$(SONAME) 81 $(CC) -o $(OBJDIR)/test_speed $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_speed.c $(LD_UCL_FLAGS) $(LD_ADD) 82$(OBJDIR)/test_generate: $(TESTDIR)/test_generate.c $(OBJDIR)/$(SONAME) 83 $(CC) -o $(OBJDIR)/test_generate $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_generate.c $(LD_UCL_FLAGS) $(LD_ADD) 84 85install: $(OBJDIR)/$(SONAME) 86 $(INSTALL) -m0755 $(SONAME) $(DESTDIR)/lib/$(SONAME) 87 $(INSTALL) -m0644 include/ucl.h $(DESTDIR)/include/ucl.h 88 89.PHONY: clean $(OBJDIR) 90