CC=gcc
CFLAGS=-Wall -Os -g -DDLL_EXPORT -DFD_SETSIZE=16384 -DZMQ_USE_SELECT -I.
LIBS=-lws2_32 -lIphlpapi -lsodium

OBJS = ctx.o reaper.o dist.o err.o \
	clock.o metadata.o random.o \
	object.o own.o \
	io_object.o io_thread.o \
	lb.o fq.o \
	address.o tcp_address.o ipc_address.o \
	ipc_connecter.o ipc_listener.o \
	tcp_connecter.o tcp_listener.o \
	mailbox.o msg.o mtrie.o \
	pipe.o precompiled.o proxy.o \
	signaler.o stream_engine.o \
	thread.o trie.o \
	ip.o tcp.o \
	pgm_socket.o pgm_receiver.o pgm_sender.o \
	raw_decoder.o raw_encoder.o \
	v1_decoder.o v1_encoder.o v2_decoder.o v2_encoder.o \
        udp_address.o udp_engine.o radio.o dish.o \
	socket_base.o session_base.o options.o \
	req.o rep.o push.o pull.o pub.o sub.o pair.o \
	dealer.o router.o xpub.o xsub.o stream.o \
	poller_base.o select.o poll.o epoll.o kqueue.o devpoll.o \
	curve_client.o curve_server.o \
	mechanism.o null_mechanism.o plain_client.o plain_server.o \
	socks.o server.o decoder_allocators.o socks_connecter.o \
	socket_poller.o mailbox_safe.o plain_server.o client.o timers.o \
	zmq.o zmq_utils.o gather.o scatter.o dgram.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 -static -O2 -s -o $@ $^ -Wl,--out-implib,$@.a $(LIBS)

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

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