-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile.common
118 lines (88 loc) · 3.53 KB
/
Makefile.common
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
DEPDIR=.d
SRCDIR=../src
OBJDIR=obj
BINDIR=bin
LIBDIR=lib
SCRIPTDIR=scripts
$(shell mkdir -p $(DEPDIR) > /dev/null)
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td
POSTCOMPILE = @mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d && touch $@
ifeq "$(TARGET)" "LINUX"
EXECEXT:=
LIBEXT:=.so
TEMP:=-Wl,-soname,libslat$(LIBEXT)
endif
ifeq "$(TARGET)" "WIN"
EXECEXT:=.EXE
LIBEXT:=.dll
TEMP:=-Wl,--dll -Wl,--export-all-symbols -Wl,--out-implib,$(LIBDIR)/libslat.a
endif
LIBSRCS=functions.cpp relationships.cpp maq.cpp fragility.cpp lognormaldist.cpp loss_functions.cpp \
comp_group.cpp caching.cpp structure.cpp context.cpp
LIBHDRS=$(addprefix $(SRCDIR)/,$(LIBSRCS:.cpp=.h))
LIBOBJS=$(addprefix $(OBJDIR)/,$(LIBSRCS:.cpp=.o))
UNIT_SRCS = unit_test.cpp functions_test.cpp relationships_test.cpp maq_test.cpp \
fragility_test.cpp lognormaldist_test.cpp comp_group_test.cpp structure_test.cpp \
loss_function_test.cpp caching_test.cpp replaceable_test.cpp
UNIT_OBJS = $(addprefix $(OBJDIR)/,$(UNIT_SRCS:.cpp=.o))
#SRCS=$(addprefix $(SRCDIR)/,$(LIBSRCS) $(UNIT_SRCS))
SRCS=$(LIBSRCS) $(UNIT_SRCS)
all: $(OBJDIR) $(BINDIR) $(LIBDIR) $(SCRIPTDIR) \
$(BINDIR)/main$(EXECEXT) $(BINDIR)/unit_tests$(EXECEXT) $(LIBDIR)/$(PYSLATCORE) \
$(BINDIR)/example2$(EXECEXT) interp $(LIBDIR)/pyslatcore.py
$(OBJDIR):
mkdir $(OBJDIR)
$(BINDIR):
mkdir $(BINDIR)
$(LIBDIR):
mkdir $(LIBDIR)
$(SCRIPTDIR):
mkdir $(SCRIPTDIR)
clean:
rm -rf $(OBJDIR) $(BINDIR) $(LIBDIR) $(SCRIPTDIR)
%.o : %.cpp
$(OBJDIR)/%.o : $(SRCDIR)/%.cpp $(DEPDIR)/%.d
$(CC) $(DEPFLAGS) -c $(CFLAGS) $< -o $@
$(POSTCOMPILE)
$(LIBDIR)/libslat$(LIBEXT): $(LIBOBJS)
$(CC) -shared $(TEMP) -o $(LIBDIR)/libslat$(LIBEXT) $(LIBOBJS) $(LDFLAGS)
$(BINDIR)/main$(EXECEXT): $(OBJDIR)/main.o $(LIBDIR)/libslat$(LIBEXT)
$(CC) -fPIC $(OBJDIR)/main.o -L$(LIBDIR) -lslat -o $(BINDIR)/main$(EXECEXT) ${LDFLAGS}
$(BINDIR)/example2$(EXECEXT): $(OBJDIR)/example2.o $(LIBDIR)/libslat$(LIBEXT)
$(CC) -fPIC $(OBJDIR)/example2.o -L$(LIBDIR) -lslat -o $(BINDIR)/example2$(EXECEXT) ${LDFLAGS}
$(BINDIR)/unit_tests$(EXECEXT): $(OBJDIR)/unit_test.o $(UNIT_OBJS) $(LIBDIR)/libslat$(LIBEXT)
$(CC) -fPIC $(UNIT_OBJS) -L$(LIBDIR) -lslat -o $(BINDIR)/unit_tests$(EXECEXT) ${LDFLAGS}
doc: $(OBJS) $(HEADERS)
cd .. && doxygen
interp: $(LIBDIR)/slatLexer.py $(LIBDIR)/slatParser.py $(SCRIPTDIR)/SlatInterpreter.py $(LIBDIR)/pyslat.py
$(LIBDIR)/slatParser.py: $(SRCDIR)/slatParser.g4
cd $(SRCDIR) && $(ANTLR) -o $(realpath $(LIBDIR)) slatParser.g4
$(LIBDIR)/slatLexer.py: $(SRCDIR)/slatLexer.g4
cd $(SRCDIR) && $(ANTLR) -o $(realpath $(LIBDIR)) slatLexer.g4
$(SCRIPTDIR)/SlatInterpreter.py: $(SRCDIR)/SlatInterpreter.py
cp $(SRCDIR)/SlatInterpreter.py $(SCRIPTDIR)
$(LIBDIR)/pyslat.py: $(SRCDIR)/pyslat.py
cp $(SRCDIR)/pyslat.py $(LIBDIR)
$(LIBDIR)/pyslatcore.py: $(OBJDIR)/pyslatcore.py
cp $(OBJDIR)/pyslatcore.py $(LIBDIR)
$(OBJDIR)/wrap_pyslatcore.cpp: $(SRCDIR)/pyslatcore.i $(SRCDIR)/pyslatcore.h
swig -python -c++ -py3 -modern \
-fastdispatch \
-nosafecstrings \
-fvirtual \
-noproxydel \
-fastproxy \
-nofastinit \
-fastunpack \
-fastquery \
-modernargs \
-castmode \
-nobuildnone \
-o $(OBJDIR)/wrap_pyslatcore.cpp $(SRCDIR)/pyslatcore.i
$(OBJDIR)/wrap_pyslatcore.o: $(OBJDIR)/wrap_pyslatcore.cpp $(SRCDIR)/functions.h
$(CC) -c $(CFLAGS) -I$(SRCDIR) $< -o $@
$(LIBDIR)/$(PYSLATCORE): $(OBJDIR)/wrap_pyslatcore.o $(OBJDIR)/pyslatcore.o
$(CC) $(PYLIBFLAGS) $(OBJDIR)/wrap_pyslatcore.o $(OBJDIR)/pyslatcore.o -o $@ -L$(LIBDIR) -lslat $(LDFLAGS)
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
include $(wildcard $(patsubst %,$(DEPDIR)/%.d, $(basename $(SRCS))))