-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
88 lines (68 loc) · 2.04 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# -- MATLAB configuration
# path to MATLAB installation
MATLABROOT=/Applications/MATLAB_R2011b.app
# architecture
MATLABARCH=maci64
# -- Cap'n'proto configuration
# path to Cap'n'proto installation
CAPNPPATH=capnproto-c++-0.4.1
# path to Cap'n'proto compiler
CAPNP=capnp
# -- Compiler configuration
CXX=g++
CC=gcc
CFLAGS=-Iinclude -I$(CAPNPPATH)/src
LDFLAGS=
DEBUG=
# -- Output
SERVER=mex_server
CLIENT=mex_client
# -- MATLAB options
MEXLINKOPTS=-pthread
MEXLINKOPTS2=-L$(MATLABROOT)/bin/$(MATLABARCH)
# -- Main rules
all: $(SERVER) $(CLIENT)
debug: DEBUG += -g
debug: $(SERVER) $(CLIENT)
# Cap'n'proto interface
src/proto.capnp.c++ include/proto.capnp.h:
$(CAPNP) compile -oc++:src/ capnp/proto.capnp; \
mv src/proto.capnp.h include/proto.capnp.h
.PHONY: clean
# -- Server
$(SERVER): start_server.sh src/proto.capnp.c++ src/matlab_serialize.cpp src/mex_server.cpp
$(CXX) -D_THREAD_SAFE $(LDFLAGS) $(CFLAGS) \
-I$(MATLABROOT)/extern/include \
-L$(MATLABROOT)/bin/$(MATLABARCH) \
$(DEBUG) \
-std=c++11 \
$(MEXLINKOPTS) \
-o $@ \
src/proto.capnp.c++ src/matlab_serialize.cpp src/mex_server.cpp \
$(MEXLINKOPTS2) \
-lcapnp -lcapnp-rpc -lkj -lkj-async -lmx -leng
start_server.sh:
echo '#!/bin/bash' > $@
echo 'IP=localhost' >> $@
echo 'PORT=$$1' >> $@
echo 'MEX="your-mex-file.mexmaci64"' >> $@
echo "PATHADD=$(MATLABROOT)/bin/$(MATLABARCH)" >> $@
echo 'LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$$PATHADD ./$(SERVER) $$IP:$$PORT $$MEX' >> $@
# -- Client
$(CLIENT): librpc_client.so src/matlab_serialize.cpp src/mex_client.cpp
$(MATLABROOT)/bin/mex $(CFLAGS) -L. src/matlab_serialize.cpp src/mex_client.cpp -o $@ -lrpc_client
librpc_client.so: rpc_client.o proto.capnp.o
$(CXX) $(DEBUG) $(LDFLAGS) \
-shared -o $@ \
rpc_client.o proto.capnp.o \
-lcapnp -lcapnp-rpc -lkj -lkj-async
rpc_client.o: src/proto.capnp.c++ src/rpc_client.cpp
$(CXX) -c -Wall -Werror -fPIC -std=c++11 \
$(DEBUG) $(CFLAGS) \
src/proto.capnp.c++ src/rpc_client.cpp
clean:
@rm -f *.o
@rm -f *.so
@rm -f start_server.sh
@rm -f $(CLIENT)
@rm -f $(SERVER)