1# Hard coded Makefile for windows
2#
3# Tip: If you want to be able to build 32bit and 64 bit versions
4#      on the same machine you can install libevent and pthreads in
5#      let's say: /usr/local32 and /usr/local64 and you should
6#      be able to compile with:
7#      make -f win32/Makefile.mingw LOCAL=/usr/local32
8#      make -f win32/Makefile.mingw LOCAL=/usr/local64 CC=x86_64-w64-mingw32-gcc
9#
10
11CC = gcc
12LOCAL=/usr/local
13LOCALLIB=-L${LOCAL}/lib
14LOCALINC=-I${LOCAL}/include
15DEST=${LOCAL}
16INSTALLDIRS=${DEST}/bin ${DEST}/lib ${DEST}/include/memcached
17
18OBJDIR = .libs \
19	 .libs/engines \
20         .libs/daemon \
21         .libs/engines/default_engine \
22         .libs/extensions/daemon \
23         .libs/extensions/loggers \
24         .libs/extensions/protocol \
25         .libs/programs \
26         .libs/testsuite \
27         .libs/utilities \
28         .libs/win32
29
30BINARIES= mcstat.exe \
31          memcached.exe \
32          engine_testapp.exe \
33	  sizes.exe \
34	  .libs/ascii_scrub.so \
35          .libs/basic_engine_testsuite.so \
36          .libs/default_engine.so \
37          .libs/example_protocol.so \
38          .libs/eventlog_logger.so \
39          .libs/stdin_term_handler.so
40
41LIB=${LOCALLIB}
42INCLUDE=-Iinclude -I. -Idaemon -Iprograms -Iextensions -Iwin32 -I.libs ${LOCALINC}
43
44all: ${BINARIES}
45
46install: ${BINARIES} ${INSTALLDIRS}
47	cp memcached.exe .libs/default_engine.so .libs/ascii_scrub.so ${DEST}/lib
48	cp mcstat.exe ${DEST}/bin
49	cp include/memcached/* ${DEST}/include/memcached
50
51CFLAGS = -std=gnu99 -O2 -g -DNDEBUG -fno-strict-aliasing -Wall \
52 -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
53 -Wredundant-decls \
54 ${INCLUDE} -DHAVE_CONFIG_H
55
56MCSTAT_SRC = programs/mcstat.c win32/win32.c
57MCSTAT_OBJS = ${MCSTAT_SRC:%.c=.libs/%.o}
58
59MEMCACHED_SRC = \
60	      daemon/cache.c \
61	      daemon/hash.c \
62	      daemon/isasl.c \
63	      daemon/memcached.c \
64	      daemon/sasl_defs.c \
65	      daemon/stats.c \
66	      daemon/thread.c \
67	      daemon/topkeys.c \
68	      utilities/config_parser.c \
69	      utilities/engine_loader.c \
70	      utilities/extension_loggers.c\
71	      utilities/genhash.c \
72	      utilities/util.c \
73	      win32/defs.c \
74	      win32/dlfcn.c \
75	      win32/win32.c
76MEMCACHED_OBJS = ${MEMCACHED_SRC:%.c=.libs/%.o}
77
78ENGINE_TESTAPP_SRC = \
79		   programs/engine_testapp.c \
80		   programs/mock_server.c \
81		   utilities/config_parser.c \
82		   utilities/engine_loader.c \
83		   utilities/extension_loggers.c \
84		   utilities/util.c \
85		   win32/dlfcn.c
86ENGINE_TESTAPP_OBJS = ${ENGINE_TESTAPP_SRC:%.c=.libs/%.o}
87
88SIZES_SRC = programs/sizes.c
89SIZES_OBJS = ${SIZES_SRC:%.c=.libs/%.o}
90
91DEFAULT_ENGINE_SRC = \
92		   engines/default_engine/assoc.c \
93		   engines/default_engine/default_engine.c \
94		   engines/default_engine/items.c \
95		   engines/default_engine/slabs.c \
96		   utilities/util.c
97DEFAULT_ENGINE_OBJS = ${DEFAULT_ENGINE_SRC:%.c=.libs/%.o}
98
99ASCII_SCRUB_SRC = extensions/protocol/ascii_scrub.c
100ASCII_SCRUB_OBJS = ${ASCII_SCRUB_SRC:%.c=.libs/%.o}
101
102EXAMPLE_PROTOCOL_SRC = extensions/protocol/example_protocol.c
103EXAMPLE_PROTOCOL_OBJS = ${EXAMPLE_PROTOCOL_SRC:%.c=.libs/%.o}
104
105STDIN_TERM_HANDLER_SRC = extensions/daemon/stdin_check.c
106STDIN_TERM_HANDLER_OBJS = ${STDIN_TERM_HANDLER_SRC:%.c=.libs/%.o}
107
108EVENTLOG_LOGGER_SRC = extensions/loggers/eventlog_logger.c
109EVENTLOG_LOGGER_OBJS = ${EVENTLOG_LOGGER_SRC:%.c=.libs/%.o}
110
111BASIC_ENGINE_TESTSUITE_SRC = testsuite/basic_engine_testsuite.c
112BASIC_ENGINE_TESTSUITE_OBJS = ${BASIC_ENGINE_TESTSUITE_SRC:%.c=.libs/%.o}
113
114GENFILES=.libs/config_version.h
115
116mcstat.exe: ${OBJDIR} ${GENFILES} $(MCSTAT_OBJS)
117	${LINK.c} -o $@ $(MCSTAT_OBJS) \
118                  ${LIB} -lmswsock -lws2_32
119
120memcached.exe: ${OBJDIR} ${GENFILES} $(MEMCACHED_OBJS)
121	${LINK.c} -o $@ $(MEMCACHED_OBJS) \
122                  ${LIB} -levent -lmswsock \
123                  -lws2_32 -lpthread
124
125engine_testapp.exe: ${OBJDIR} ${GENFILES} $(ENGINE_TESTAPP_OBJS)
126	${LINK.c} -o $@ $(ENGINE_TESTAPP_OBJS) \
127                  ${LIB} -levent -lmswsock \
128                  -lws2_32 -lpthread
129
130sizes.exe: ${OBJDIR} ${GENFILES} $(SIZES_OBJS)
131	${LINK.c} -o $@ $(SIZES_OBJS)
132
133.libs/default_engine.so: ${OBJDIR} $(DEFAULT_ENGINE_OBJS)
134	${LINK.c} -o $@ -shared ${DEFAULT_ENGINE_OBJS} \
135                  ${LIB} -lws2_32 -lpthread
136
137.libs/ascii_scrub.so: ${OBJDIR} $(ASCII_SCRUB_OBJS)
138	${LINK.c} -o $@ -shared ${ASCII_SCRUB_OBJS}
139
140.libs/example_protocol.so: ${OBJDIR} $(EXAMPLE_PROTOCOL_OBJS)
141	${LINK.c} -o $@ -shared ${EXAMPLE_PROTOCOL_OBJS}
142
143.libs/stdin_term_handler.so: ${OBJDIR} $(STDIN_TERM_HANDLER_OBJS)
144	${LINK.c} -o $@ -shared ${STDIN_TERM_HANDLER_OBJS} ${LIBS} \
145                  ${LIB} -lpthread
146
147.libs/eventlog_logger.so: ${OBJDIR} $(EVENTLOG_LOGGER_OBJS)
148	${LINK.c} -o $@ -shared ${EVENTLOG_LOGGER_OBJS} ${LIBS} \
149                  ${LIB}
150
151.libs/basic_engine_testsuite.so: ${OBJDIR} $(BASIC_ENGINE_TESTSUITE_OBJS)
152	${LINK.c} -o $@ -shared ${BASIC_ENGINE_TESTSUITE_OBJS} ${LIB} -lpthread -lws2_32
153
154.libs/config_version.h:
155	./win32/config.sh
156
157${OBJDIR} ${INSTALLDIRS}:; -@mkdir -p $@
158
159.libs/%.o: %.c
160	${COMPILE.c} -MMD $< -o $@
161
162clean:
163	$(RM) ${BINARIES} \
164              ${ASCII_SCRUB_OBJS:.o=.d} \
165              ${ASCII_SCRUB_OBJS} \
166              ${BASIC_ENGINE_TESTSUITE_OBJS:.o=.d} \
167              ${BASIC_ENGINE_TESTSUITE_OBJS} \
168              ${DEFAULT_ENGINE_OBJS:.o=.d} \
169              ${DEFAULT_ENGINE_OBJS} \
170              ${ENGINE_TESTAPP_OBJS:.o=.d} \
171              ${ENGINE_TESTAPP_OBJS} \
172              ${EXAMPLE_PROTOCOL_OBJS:.o=.d} \
173              ${EXAMPLE_PROTOCOL_OBJS} \
174              ${GENFILES} \
175              ${MCSTAT_OBJS:.o=.d} \
176              ${MCSTAT_OBJS} \
177              ${MEMCACHED_OBJS:.o=.d} \
178              ${MEMCACHED_OBJS} \
179              ${SIZES_OBJS:.o=.d} \
180              ${SIZES_OBJS} \
181              ${EVENTLOG_LOGGER_OBJS:.o=.d} \
182              ${EVENTLOG_LOGGER_OBJS} \
183              ${STDIN_TERM_HANDLER_OBJS:.o=.d} \
184              ${STDIN_TERM_HANDLER_OBJS}
185
186-include ${ASCII_SCRUB_OBJS:.o=.d} \
187         ${BASIC_ENGINE_TESTSUITE_OBJS:.o=.d} \
188         ${DEFAULT_ENGINE_OBJS:.o=.d} \
189         ${ENGINE_TESTAPP_OBJS:.o=.d} \
190         ${EXAMPLE_PROTOCOL_OBJS:.o=.d} \
191         ${MEMCACHED_OBJS:.o=.d} \
192         ${MCSTAT_OBJS:.o=.d} \
193         ${SIZES_OBJS:.o=.d} \
194         ${EVENTLOG_LOGGER_OBJS:.o=.d} \
195         ${STDIN_TERM_HANDLER_OBJS:.o=.d}
196