CC=gcc
CFLAGS=-Wall -Os -g -DDLL_EXPORT -DFD_SETSIZE=1024 -I.
LIBS=-lws2_32

OBJS = address.o clock.o ctx.o dealer.o devpoll.o dist.o epoll.o err.o fq.o \
	io_object.o io_thread.o ip.o ipc_address.o ipc_connecter.o ipc_listener.o kqueue.o lb.o \
	mailbox.o msg.o mtrie.o object.o options.o own.o pair.o pgm_receiver.o pgm_sender.o \
	pgm_socket.o pipe.o poll.o poller_base.o precompiled.o proxy.o pub.o pull.o push.o \
	random.o raw_decoder.o raw_encoder.o reaper.o rep.o req.o router.o select.o session_base.o \
	signaler.o socket_base.o stream_engine.o sub.o tcp.o tcp_address.o tcp_connecter.o tcp_listener.o \
	thread.o trie.o v1_decoder.o v1_encoder.o v2_decoder.o v2_encoder.o xpub.o xsub.o zmq.o zmq_utils.o

%.o: ../../src/%.cpp
	$(CC) -c -o $@ $< $(CFLAGS)

%.o: ../../perf/%.cpp
	$(CC) -c -o $@ $< $(CFLAGS)

all: libzmq.dll

perf: inproc_lat.exe inproc_thr.exe local_lat.exe local_thr.exe remote_lat.exe remote_thr.exe

libzmq.dll: $(OBJS)
	g++ -shared -o $@ $^ -Wl,--out-implib,$@.a $(LIBS)

%.exe: %.o libzmq.dll
	g++ -o $@ $^

clean:
	del *.o *.a *.dll *.exe