1 |
SOURCE_ROOT = ../.. |
2 |
|
3 |
CXX = g++ |
4 |
CC = gcc |
5 |
|
6 |
SO_SUFF = @SO_SUFF@ |
7 |
PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@ |
8 |
|
9 |
COVERAGE_FLAGS = @COVERAGE_FLAGS@ |
10 |
|
11 |
CXXFLAGS = -c -g $(COVERAGE_FLAGS) |
12 |
|
13 |
LD = libtool --mode=link gcc |
14 |
LD_CXX = libtool --mode=link g++ |
15 |
|
16 |
# -lieee -ldl |
17 |
LDFLAGS = -g -lm -lstdc++ $(COVERAGE_FLAGS) |
18 |
|
19 |
# Are you on a dual processor machine? |
20 |
_smp_mflags = -j2 |
21 |
|
22 |
CLASSES = library type module symchar \ |
23 |
instance instanceinterfacedata \ |
24 |
method name \ |
25 |
reporter simulation set units dimensions extmethod \ |
26 |
variable relation \ |
27 |
solver curve plot \ |
28 |
solverparameters solverparameter solverparameteriterator \ |
29 |
solverstatus solverreporter \ |
30 |
incidencematrix |
31 |
|
32 |
OBJS = $(CLASSES:%=%.o) |
33 |
HDRS = $(CLASSES:%=%.h) |
34 |
|
35 |
all: |
36 |
@echo "SO SUFF: $(SO_SUFF)" |
37 |
@echo "OS TYPE: $(OSTYPE)" |
38 |
|
39 |
ASCEND_CPPFLAGS = -I../../base/generic -I../../base/generic/solver -I../../base/generic/compiler -I../../base/generic/utilities -I../../base/generic/general -I../../base/generic/packages |
40 |
|
41 |
#------------------------- |
42 |
# Linking with ASCEND |
43 |
|
44 |
USE_JAM_LIBS = 1 |
45 |
|
46 |
ARDIR = $(SOURCE_ROOT)/base/autotools/archive |
47 |
ASC_BUILD_LIBS = cd $(SOURCE_ROOT)/base/autotools; make libs |
48 |
|
49 |
# Libs now are named the same way on both autotools and jam builds... |
50 |
ASC_LIBS_STEM = compiler packages solver utilities general |
51 |
ASC_LIBS = $(ASC_LIBS_STEM:%=$(ARDIR)/libasc%.a) |
52 |
|
53 |
$(ASC_LIBS): libs |
54 |
|
55 |
.PHONY: libs |
56 |
|
57 |
libs: |
58 |
@echo $(ASC_LIBS) |
59 |
$(ASC_BUILD_LIBS) |
60 |
|
61 |
#------------------ |
62 |
# PYTHON STUFF |
63 |
|
64 |
USE_PYTHON := 1 |
65 |
|
66 |
ifeq ($(USE_PYTHON),1) |
67 |
ifeq ($(OSTYPE),msys) |
68 |
PYTHON_VERSION := 24 |
69 |
PYTHON_ROOT := /c/Python$(PYTHON_VERSION) |
70 |
PYTHON_CPPFLAGS := -I$(PYTHON_ROOT)/include |
71 |
PYTHON_LDFLAGS := -L$(PYTHON_ROOT)/libs -lpython$(PYTHON_VERSION) |
72 |
else |
73 |
ifeq ($(TERM),cygwin) |
74 |
PYTHON_VERSION := 24 |
75 |
PYTHON_ROOT := /cygdrive/c/Python$(PYTHON_VERSION) |
76 |
PYTHON_CPPFLAGS := -I$(PYTHON_ROOT)/include |
77 |
PYTHON_LDFLAGS := -L$(PYTHON_ROOT)/libs -lpython24 |
78 |
else |
79 |
PYTHON_VERSION := $(shell python -V 2>&1 | sed s/Python\ // | sed s/^\\\([0-9][0-9]*\\.[0-9][0-9]*\\\).*/\\1/ ) |
80 |
PYTHON_CPPFLAGS := -I/usr/include/python$(PYTHON_VERSION) |
81 |
PYTHON_LDFLAGS := -lpython$(PYTHON_VERSION) |
82 |
endif |
83 |
endif |
84 |
endif |
85 |
|
86 |
ifeq ($(USE_PYTHON),1) |
87 |
ASCXX_CPPFLAGS := $(ASCEND_CPPFLAGS) $(PYTHON_CPPFLAGS) -DASCXX_USE_PYTHON |
88 |
ASCXX_PYTHON_LDFLAGS := $(PYTHON_LDFLAGS) |
89 |
else |
90 |
ASCXX_CPPFLAGS := $(ASCEND_CPPFLAGS) |
91 |
ASCXX_PYTHON_LDFLAGS := |
92 |
endif |
93 |
|
94 |
clean: |
95 |
-rm *$(SO_SUFF) *.so *.dll |
96 |
-rm *.o |
97 |
-rm *_wrap.cxx |
98 |
-rm *_wrap.c |
99 |
-rm *_wrap.o |
100 |
-rm ascend.py |
101 |
-rm main |
102 |
-rm *.pyc |
103 |
-rm *.gcno |
104 |
-rm *.gcda |
105 |
-rmdir .libs |
106 |
|
107 |
cleanall: clean |
108 |
cd $(SOURCE_ROOT)/jam; \ |
109 |
jam clean; |
110 |
|
111 |
|
112 |
#------------------------ |
113 |
# SWIG targets |
114 |
|
115 |
SWIG_MODULE = ascend |
116 |
|
117 |
ifeq ($(OSTYPE),msys) |
118 |
SWIG=~/swigwin-1.3.28/swig |
119 |
SWIG_LIB = $(shell $(SWIG) -swiglib) |
120 |
SWIG_VERSION = $(shell $(SWIG) -version | grep "^SWIG Version " | sed s/SWIG\ Version\ \\\([0-9][0-9]*\\\(\\.[0-9][0-9]*\\\)*\\\).*/\\1/) |
121 |
SWIG_INCLUDES = -I$(SWIG_LIB) |
122 |
else |
123 |
SWIG=swig |
124 |
SWIG_VERSION = $(shell $(SWIG) -version | grep "^SWIG Version " | sed s/SWIG\ Version\ \\\([0-9][0-9]*\\\(\\.[0-9][0-9]*\\\)*\\\).*/\\1/) |
125 |
SWIG_INCLUDES = |
126 |
endif |
127 |
|
128 |
# optimize for SWIG 1.3.28 and newer |
129 |
SWIG_MAJOR = $(shell echo $(SWIG_VERSION) | sed s/^\\\([0-9]*\\\).*/\\1/) |
130 |
SWIG_MINOR = $(shell echo $(SWIG_VERSION) | sed s/^[0-9]*\\.\\\([0-9]*\\\).*/\\1/) |
131 |
SWIG_PATCH = $(shell echo $(SWIG_VERSION) | sed s/^[0-9]*\\.[0-9]*\\.\\\([0-9]*\\\).*/\\1/) |
132 |
|
133 |
SWIG_FEATURES = |
134 |
ifeq ($(SWIG_MAJOR),1) |
135 |
ifeq ($(SWIG_MINOR),3) |
136 |
ifeq ($(shell test $(SWIG_PATCH) -ge 28 && echo 1),1) |
137 |
SWIG_FEATURES="-O" |
138 |
endif |
139 |
endif |
140 |
endif |
141 |
|
142 |
SWIGFLAGS = -c++ -python $(SWIG_INCLUDES) |
143 |
SWIG_CFLAGS = -c -fPIC |
144 |
SWIG_CPPFLAGS = $(ASCXX_CPPFLAGS) $(PLATFORM_CPPFLAGS) |
145 |
|
146 |
SWIG_OBJS = $(SWIG_MODULE:%=%_wrap.o) |
147 |
SWIG_PY = $(SWIG_MODULE:%=%.py) |
148 |
|
149 |
LIB = _ascend$(SO_SUFF) |
150 |
|
151 |
all: $(LIB) |
152 |
|
153 |
SWIGS = plot.i solver.i |
154 |
|
155 |
# FIXME add ' $(ASC_LIBS)' to deps once Jam build is fixed: |
156 |
%_wrap.cxx %.py: %.i $(SWIGS) $(HDRS) |
157 |
@echo "SWIG = $(SWIG), VERSION = $(SWIG_VERSION)" |
158 |
SWIG_FEATURES=$(SWIG_FEATURES) $(SWIG) $(SWIGFLAGS) $< |
159 |
|
160 |
.precious: $(SWIG_MODULE:%=%_wrap.cxx) |
161 |
.precious: _ascend$(SO_SUFF) |
162 |
|
163 |
%_wrap.o: %_wrap.cxx |
164 |
$(CC) $(SWIG_CFLAGS) -o $@ $^ $(SWIG_CPPFLAGS) |
165 |
|
166 |
$(LIB): $(ASC_LIBS) $(OBJS) $(SWIG_OBJS) $(SWIG_PY) |
167 |
@echo "OS TYPE = $(OSTYPE)" |
168 |
@echo "SO_SUFF = $(SO_SUFF)" |
169 |
@echo "CREATING LIBRARY FILE '$(LIB)'" |
170 |
$(LD) -module -shared -o $@ $(ASC_LIBS) $(OBJS) $(SWIG_OBJS) $(LDFLAGS) $(ASCXX_PYTHON_LDFLAGS) |
171 |
|
172 |
|
173 |
#-------------------------- |
174 |
# Pure C++ tests (no swigging required) |
175 |
|
176 |
CPPFLAGS := $(ASCXX_CPPFLAGS) $(PLATFORM_CPPFLAGS) |
177 |
|
178 |
main: main.o $(OBJS) $(ASC_LIBS) |
179 |
$(LD) -o $@ $^ $(LDFLAGS) $(ASCXX_PYTHON_LDFLAGS) |
180 |
|
181 |
#------------------------ |
182 |
# Trying to debug this GDPITA '3' problem, bug #178 |
183 |
|
184 |
testsolverinit.o: testsolverinit.cpp |
185 |
$(CXX) -c $(CPPFLAGS) $(CFLAGS) -o $@ $^ |
186 |
|
187 |
testsolverinit: testsolverinit.o $(OBJS) $(ASC_LIBS) |
188 |
$(LD) -o $@ $^ $(LDFLAGS) $(ASCXX_PYTHON_LDFLAGS) |
189 |
|
190 |
|
191 |
#------------------------ |
192 |
# Trying to fix implementation of external functions |
193 |
|
194 |
testextfn.o: testextfn.cpp |
195 |
$(CXX) -c $(CPPFLAGS) $(CFLAGS) -o $@ $^ |
196 |
|
197 |
testextfn: testextfn.o $(OBJS) $(ASC_LIBS) |
198 |
$(LD) -o $@ $^ $(LDFLAGS) $(ASCXX_PYTHON_LDFLAGS) |
199 |
|
200 |
|
201 |
#------------------------ |
202 |
# Testing the Python module |
203 |
|
204 |
test: $(LIB) |
205 |
# @echo "Does module include 'do_solve_eval' symbol?" |
206 |
# nm $(LIB) | grep "do_solve_eval" | egrep -v "U" |
207 |
# @echo "Does module include 'system_build' symbol?" |
208 |
# nm $(LIB) | grep "system_build" | egrep -v "U" |
209 |
@echo "Can python load the $(LIB) file?" |
210 |
python -c "import _ascend" |
211 |
python librarytest.py |
212 |
|
213 |
|
214 |
#-------------------------- |
215 |
# tarfile |
216 |
|
217 |
tar: clean |
218 |
pushd $(SOURCE_ROOT) && \ |
219 |
tar jcvf pygtk.tar.bz2 pygtk/ && \ |
220 |
popd |
221 |
mv ../../pygtk.tar.bz2 . |
222 |
|
223 |
#-------------------------- |
224 |
# storing a patch |
225 |
|
226 |
patch: clean |
227 |
pushd $(SOURCE_ROOT)/base && \ |
228 |
svn diff > ../pygtk/interface/ascend-base.patch && \ |
229 |
popd |
230 |
pushd $(SOURCE_ROOT)/tcltk && \ |
231 |
svn diff > ../pygtk/interface/ascend-tcltk.patch && \ |
232 |
popd |
233 |
|
234 |
#--------------------------- |
235 |
patchapplybase: clean |
236 |
pushd $(SOURCE_ROOT)/base && \ |
237 |
patch -p0 < ../pygtk/interface/ascend-base.patch && \ |
238 |
popd |
239 |
|