1##
2## nmake file - to build in compiler console window for
3##    microsoft compiler (cl) or compilers (like intel's icl)
4##    which try to be mostly compatible (but better)
5##
6## this nmake file builds a static utilib
7##
8## it expects to find a writeable utilib/src source directory at TOP
9##
10## (nmake libutilib.dll will make a shared library)
11##
12TOP=..\..
13
14UTILIB=$(TOP)\src
15STUDIES=$(TOP)\test\studies
16
17INCLUDE_DIRS= /I . /I $(UTILIB)
18
19RANLIB_LOC=$(UTILIB)\libs
20ADT_LOC=$(UTILIB)\libs
21MATH_LOC=$(UTILIB)\libs
22CORE_LOC=$(UTILIB)\libs
23IO_LOC=$(UTILIB)\libs
24SYS_LOC=$(UTILIB)\libs
25TYPEMNGR_LOC=$(UTILIB)\libs
26
27CPPFLAGS=$(CPPFLAGS) /wd4244 /wd4996 /wd4530 /wd4552    # suppress warnings
28
29all: libutilib.lib libutilib.dll
30
31check: test_utilib.exe
32
33help:
34   @echo "nmake all" will build the library
35   @echo "nmake clean" will delete all generated files
36   @echo "nmake check" will build and run an executable
37   @echo "nmake /?" lists all nmake options
38
39RANLIB_C_SRC =        \
40  $(RANLIB_LOC)\gencau.c   \
41  $(RANLIB_LOC)\scauchy.c  \
42  $(RANLIB_LOC)\genbet.c   \
43  $(RANLIB_LOC)\genchi.c   \
44  $(RANLIB_LOC)\genexp.c   \
45  $(RANLIB_LOC)\genf.c     \
46  $(RANLIB_LOC)\gengam.c   \
47  $(RANLIB_LOC)\genmn.c    \
48  $(RANLIB_LOC)\gennch.c   \
49  $(RANLIB_LOC)\gennf.c    \
50  $(RANLIB_LOC)\gennor.c   \
51  $(RANLIB_LOC)\genunf.c   \
52  $(RANLIB_LOC)\ignbin.c   \
53  $(RANLIB_LOC)\ignpoi.c   \
54  $(RANLIB_LOC)\sexpo.c    \
55  $(RANLIB_LOC)\sgamma.c   \
56  $(RANLIB_LOC)\snorm.c    \
57  $(RANLIB_LOC)\genprm.c   \
58  $(RANLIB_LOC)\global_rng.c \
59  $(RANLIB_LOC)\ParkMiller.c
60
61RANLIB_CPP_SRC =        \
62  $(RANLIB_LOC)\globals.cpp  \
63  $(RANLIB_LOC)\LCG.cpp    \
64  $(RANLIB_LOC)\PM_LCG.cpp
65
66RANLIB_OBJ = $(RANLIB_CPP_SRC:.cpp=.obj) $(RANLIB_C_SRC:.c=.obj)
67RANLIB_SRC= $(RANLIB_C_SRC) $(RANLIB_CPP_SRC)
68
69ADT_CPP_SRC =             \
70  $(ADT_LOC)\CharString.cpp   \
71  $(ADT_LOC)\BitArray.cpp     \
72  $(ADT_LOC)\MixedIntVars.cpp \
73  $(ADT_LOC)\lookupa.cpp      \
74  $(ADT_LOC)\hash_fn.cpp      \
75  $(ADT_LOC)\Factory.cpp      \
76  $(ADT_LOC)\Ereal.cpp
77
78ADT_OBJ = $(ADT_CPP_SRC:.cpp=.obj)
79ADT_SRC= $(ADT_CPP_SRC)
80
81MATH_C_SRC =  $(MATH_LOC)\cov.c  $(MATH_LOC)\math.c
82
83MATH_CPP_SRC =    \
84  $(MATH_LOC)\median.cpp   \
85  $(MATH_LOC)\cholesky.cpp \
86  $(MATH_LOC)\math_basic.cpp
87
88MATH_OBJ = $(MATH_CPP_SRC:.cpp=.obj) $(MATH_C_SRC:.c=.obj)
89MATH_SRC= $(MATH_C_SRC) $(MATH_CPP_SRC)
90
91SYS_C_SRC = $(SYS_LOC)\misc.c
92
93SYS_CPP_SRC =  $(SYS_LOC)\seconds.cpp $(SYS_LOC)\memdebug.cpp
94
95SYS_OBJ = $(SYS_CPP_SRC:.cpp=.obj) $(SYS_C_SRC:.c=.obj)
96SYS_SRC= $(SYS_C_SRC) $(SYS_CPP_SRC)
97
98CORE_CPP_SRC = \
99  $(CORE_LOC)\CommonIO.cpp     \
100  $(CORE_LOC)\exception_mngr.cpp
101
102CORE_OBJ = $(CORE_CPP_SRC:.cpp=.obj)
103CORE_SRC = $(CORE_SRC)
104
105IO_CPP_SRC = \
106  $(IO_LOC)\comments.cpp     \
107  $(IO_LOC)\mpiUtil.cpp      \
108  $(IO_LOC)\logEvent.cpp     \
109  $(IO_LOC)\nicePrint.cpp    \
110  $(IO_LOC)\OptionParser.cpp    \
111  $(IO_LOC)\TinyXML_helper.cpp    \
112  $(IO_LOC)\Property.cpp \
113  $(IO_LOC)\PropertyDict.cpp \
114  $(IO_LOC)\Parameter.cpp \
115  $(IO_LOC)\ParameterSet.cpp \
116  $(IO_LOC)\ParameterList.cpp
117
118IO_OBJ = $(IO_CPP_SRC:.cpp=.obj)
119IO_SRC = $(IO_CPP_SRC)
120
121TYPEMNGR_CPP_SRC = \
122  $(TYPEMNGR_LOC)\Any.cpp      \
123  $(TYPEMNGR_LOC)\PackBuf.cpp      \
124  $(TYPEMNGR_LOC)\Serialize.cpp    \
125  $(TYPEMNGR_LOC)\SerialStream.cpp \
126  $(TYPEMNGR_LOC)\BinarySerialStream.cpp \
127  $(TYPEMNGR_LOC)\fSerialStream.cpp \
128  $(TYPEMNGR_LOC)\sSerialStream.cpp \
129  $(TYPEMNGR_LOC)\MPIStream.cpp \
130  $(TYPEMNGR_LOC)\XMLSerialStream.cpp \
131  $(TYPEMNGR_LOC)\fXMLSerialStream.cpp \
132  $(TYPEMNGR_LOC)\TypeManager.cpp
133
134TYPEMNGR_OBJ = $(TYPEMNGR_CPP_SRC:.cpp=.obj)
135TYPEMNGR_SRC = $(TYPEMNGR_CPP_SRC)
136
137SOURCE_FILES= $(RANLIB_SRC) $(ADT_SRC) $(MATH_SRC) $(SYS_SRC) $(IO_SRC) $(CORE_SRC) $(TYPEMNGR_SRC)
138
139OBJ_FILES= $(RANLIB_OBJ) $(ADT_OBJ) $(MATH_OBJ) $(SYS_OBJ) $(IO_OBJ) $(CORE_OBJ) $(TYPEMNGR_OBJ)
140
141libutilib.lib: static/libutilib.lib
142
143libutilib.dll: shared/libutilib.dll
144
145static/libutilib.lib: headers $(OBJ_FILES)
146    @if not exist static mkdir static
147    lib /out:static/libutilib.lib /verbose $(OBJ_FILES)
148
149shared/libutilib.dll: headers $(OBJ_FILES)
150    @if not exist shared mkdir shared
151    link /dll /out:shared/libutilib.dll /implib:shared/libutilib.lib $(OBJ_FILES)
152
153headers:
154    @if not exist utilib mkdir utilib
155    @copy utilib_config.txt utilib_config.h
156
157{$(RANLIB_LOC)}.cpp.{$(RANLIB_LOC)}.obj:
158    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
159
160{$(RANLIB_LOC)}.c.{$(RANLIB_LOC)}.obj:
161    $(CC) $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.c
162
163{$(ADT_LOC)}.cpp.{$(ADT_LOC)}.obj:
164    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
165
166{$(MATH_LOC)}.cpp.{$(MATH_LOC)}.obj:
167    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
168
169{$(MATH_LOC)}.c.{$(MATH_LOC)}.obj:
170    $(CC) $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.c
171
172{$(SYS_LOC)}.cpp.{$(SYS_LOC)}.obj:
173    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
174
175{$(SYS_LOC)}.c.{$(SYS_LOC)}.obj:
176    $(CC) $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.c
177
178{$(IO_LOC)}.cpp.{$(IO_LOC)}.obj:
179    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
180
181{$(CORE_LOC)}.cpp.{$(CORE_LOC)}.obj:
182    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
183
184{$(TYPEMNGR_LOC)}.cpp.{$(TYPEMNGR_LOC)}.obj:
185    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
186
187clean:
188        @-del /Q $(OBJ_FILES)
189        @-del /Q static\*.lib
190	@-rmdir static
191        @-del /Q *.lib
192        @-del /Q *.exe
193        @-del /Q *.obj
194        @-del /Q *.temp
195        @-del /Q *.tmp
196        @-del /Q iotest.*
197        @-del /Q testfile
198        @-del /Q utilib\*.h
199	@-rmdir utilib
200
201TEST_UTILIB_SRC= \
202    $(STUDIES)\olist.cpp \
203    $(STUDIES)\sort_test.cpp \
204    $(STUDIES)\array.cpp \
205    $(STUDIES)\bitarray.cpp \
206    $(STUDIES)\multibitarray.cpp \
207    $(STUDIES)\timing.cpp \
208    $(STUDIES)\tuple.cpp \
209    $(STUDIES)\iotest.cpp \
210    $(STUDIES)\rngtest.cpp \
211    $(STUDIES)\triang.cpp \
212    $(STUDIES)\vectest.cpp \
213    $(STUDIES)\stltest.cpp \
214    $(STUDIES)\hash.cpp \
215    $(STUDIES)\splay.cpp \
216    $(STUDIES)\factory.cpp \
217    $(STUDIES)\ereal.cpp \
218    $(STUDIES)\heap.cpp \
219    $(STUDIES)\calloc.cpp \
220    $(STUDIES)\malloc.cpp \
221    $(STUDIES)\pvector.cpp \
222    $(STUDIES)\exception_test.cpp \
223    $(STUDIES)\class_options.cpp \
224    $(STUDIES)\option_parser.cpp \
225    $(STUDIES)\sharedval.cpp \
226    $(STUDIES)\any.cpp \
227    $(STUDIES)\smartptr.cpp \
228    $(STUDIES)\commonio.cpp \
229    $(STUDIES)\stringtest.cpp \
230    $(STUDIES)\listtest.cpp \
231    $(STUDIES)\iotest_debug.cpp \
232    $(STUDIES)\commonio_debug.cpp \
233    $(STUDIES)\packbuf.cpp \
234    $(STUDIES)\lphash.cpp \
235    $(STUDIES)\hashedset.cpp \
236    $(STUDIES)\matrix.cpp \
237    $(STUDIES)\namespace.cpp \
238    $(STUDIES)\qlist.cpp \
239    $(STUDIES)\typeManager.cpp \
240    $(STUDIES)\math.cpp \
241    $(STUDIES)\sregistry.cpp \
242    $(STUDIES)\paramTest.cpp \
243    $(STUDIES)\serialize.cpp \
244    $(STUDIES)\sserialstream.cpp \
245    $(STUDIES)\fserialstream.cpp \
246    $(STUDIES)\fserialstream-ref.cpp \
247    $(STUDIES)\fxmlserialstream.cpp \
248    $(STUDIES)\tests.cpp
249
250TEST_UTILIB_OBJ = $(TEST_UTILIB_SRC:.cpp=.obj)
251
252test_utilib.exe: headers $(TEST_UTILIB_OBJ)  libutilib.lib
253   $(CPP) /Fe$@ $(TEST_UTILIB_OBJ)  static/libutilib.lib
254   test_utilib.exe
255   @if errorlevel 1 echo "FAIL"
256   @if not errorlevel 1 echo "PASS"
257
258{$(STUDIES)}.cpp.{$(STUDIES)}.obj:
259    $(CPP) $(CPPFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $*.cpp
260