1############################################################################
2# File:		makefile
3#
4# Purpose:	Makefile for the UNIXem project, for the Open Watcom C/C++ 1.7
5#           compiler, on Win32
6#
7# Created:	15th Feburary 2005
8# Updated:	12th August 2010
9#
10############################################################################
11
12
13############################################################################
14# Symbols
15
16########################################
17# Project & compiler version
18
19COMP_TAG            =   ow17
20ARCH_TAG            =
21OS_TAG				=
22PROJ_TAG			=	unixem
23PROJ_VER_MAJOR		=	1
24PROJ_TAG_VER		=	$(PROJ_TAG).$(PROJ_VER_MAJOR)
25
26PROJ_MAKEFILE_NAME  =   makefile
27
28########################################
29# Testing verbosity
30
31TEST_VERBOSITY		=	2
32
33########################################
34# Directories
35
36PROJ_BASE_DIR			=	..\..
37PROJ_BIN_DIR			=	$(PROJ_BASE_DIR)\bin
38PROJ_INCLUDE_DIR		=	$(PROJ_BASE_DIR)\include
39PROJ_LIB_DIR			=	$(PROJ_BASE_DIR)\lib
40PROJ_OBJ_DIR			=	.
41PROJ_SRC_DIR			=	$(PROJ_BASE_DIR)\src
42PROJ_EXAMPLES_DIR		=	$(PROJ_BASE_DIR)\examples
43PROJ_SAMPLES_DIR        =   $(PROJ_BASE_DIR)\samples
44PROJ_TEST_ROOT_DIR		=	$(PROJ_BASE_DIR)\test
45PROJ_TEST_COMPONENT_DIR	=	$(PROJ_TEST_ROOT_DIR)\component
46PROJ_TEST_SCRATCH_DIR	=	$(PROJ_TEST_ROOT_DIR)\scratch
47PROJ_TEST_UNIT_DIR		=	$(PROJ_TEST_ROOT_DIR)\unit
48
49########################################
50# tools
51
52CC						=	wcc386
53CPPC                    =   wpp386
54AR						=	wlib
55LD						=	wcl386
56RM						=	del /f
57CP						=	copy
58RC                      =   rc
59
60# Includes
61
62INCLUDES_LEADER			=
63
64PROJ_INCLUDE			=	-I$(PROJ_INCLUDE_DIR)
65
66ENV_INCLUDES 	=
67
68COMMON_INCLUDES		=
69
70CC_INCLUDES_BASE=\
71$(INCLUDES_LEADER)\
72$(PROJ_INCLUDE)\
73-I"$(STLSOFT)\include"\
74$(COMMON_INCLUDES)\
75$(ENV_INCLUDES)\
76 \
77
78CC_INCLUDES =\
79$(CC_INCLUDES_BASE)\
80 \
81
82CPPC_INCLUDES_BASE=\
83$(INCLUDES_LEADER)\
84$(PROJ_INCLUDE)\
85-I"$(STLSOFT)\include"\
86$(COMMON_INCLUDES)\
87$(ENV_INCLUDES)\
88 \
89
90CPPC_INCLUDES=\
91$(CPPC_INCLUDES_BASE)\
92 \
93
94
95# Lib
96
97LIBS_LEADER			=
98
99# lib paths
100
101ENV_LIBPATHS		=
102COMMON_LIBPATHS			=
103
104
105
106LIBPATHS=\
107 $(LIBS_LEADER)\
108 $(COMMON_LIBPATHS)\
109 $(ENV_LIBPATHS)\
110\
111
112
113# lib names
114
115TARGET_LIB_ST_D	=
116TARGET_LIB_ST_R	=
117
118# #defines
119
120COMMON_DEFS			=	-DWIN32
121
122CUSTOM_DEFS			=
123
124CC_CUSTOM_DEFS		=	$(CUSTOM_DEFS)
125
126CPPC_CUSTOM_DEFS	=	$(CUSTOM_DEFS)
127
128CC_DEFS 			=	$(COMMON_DEFS) $(CC_CUSTOM_DEFS)
129
130CPPC_DEFS			=	$(COMMON_DEFS) $(CPPC_CUSTOM_DEFS)
131
132# CC flags
133
134CC_F_NOLOGO				=	-zq
135CC_F_COMPILE_ONLY		=
136CC_F_WARNING_MAX		=	-w=9
137CC_F_WARNING_ERR		=	-we
138CC_F_WARNINGS_LIMIT		=
139CC_F_MINIMUM_SIZE		=
140#CC_F_MAXIMUM_SPEED		=
141CC_APP_F_WARNING_MAX	=	$(CC_F_WARNING_MAX)
142CC_APP_F_WARNING_ERR	=	$(CC_F_WARNING_ERR)
143
144# CPPC flags
145
146CPPC_F_NOLOGO			=	-zq
147CPPC_F_COMPILE_ONLY 	=
148CPPC_F_WARNING_MAX		=	-w=9
149CPPC_F_WARNING_ERR		=	-we
150CPPC_F_WARNINGS_LIMIT	=
151CPPC_F_MINIMUM_SIZE 	=
152#CPPC_F_MAXIMUM_SPEED	=
153CPPC_F_EXCEPTIONS		=	-xs
154CPPC_F_NO_EXCEPTIONS	=
155CPPC_F_WITH_EXCEPTIONS	=
156CPPC_F_RTTI 			=	-xr
157CPPC_APP_F_WARNING_MAX	=	$(CPPC_F_WARNING_MAX)
158CPPC_APP_F_WARNING_ERR	=	$(CPPC_F_WARNING_ERR)
159
160
161
162CC_TOOL_FLAGS		=
163
164CPPC_TOOL_FLAGS 	=
165
166
167
168CC_FLAGS =\
169 $(CC_TOOL_FLAGS)\
170 $(CC_F_NOLOGO)\
171 $(CC_F_COMPILE_ONLY)\
172 $(CC_F_WARNING_MAX)\
173 $(CC_F_WARNING_ERR)\
174 $(CC_F_WARNINGS_LIMIT)\
175 $(CC_F_MINIMUM_SIZE)\
176 \
177
178CPPC_FLAGS=\
179 $(CPPC_TOOL_FLAGS)\
180 $(CPPC_F_NOLOGO)\
181 $(CPPC_F_COMPILE_ONLY)\
182 $(CPPC_F_WARNING_MAX)\
183 $(CPPC_F_WARNING_ERR)\
184 $(CPPC_F_WARNINGS_LIMIT)\
185 $(CPPC_F_MINIMUM_SIZE)\
186 $(CPPC_F_EXCEPTIONS)\
187 $(CPPC_F_RTTI)\
188 \
189
190
191
192# Arguments (= flags + defines + includes)
193
194CC_ARGS_ST_D				=	 $(CC_FLAGS) $(CC_DEFS) $(CC_INCLUDES)
195CC_ARGS_ST_R				=	 $(CC_FLAGS) $(CC_DEFS) $(CC_INCLUDES)
196
197AR_ARGS				=	-q -c
198
199LD_ARGS				=	-zq $(COMMON_LIB)
200
201############################################################################
202# Targets
203
204TARGET_LIB_ST_D			=	$(PROJ_LIB_DIR)\$(PROJ_TAG_VER).$(COMP_TAG)$(OS_TAG)$(ARCH_TAG).debug.lib
205TARGET_LIB_UN_ST_D		=	$(PROJ_LIB_DIR)\$(PROJ_TAG).$(COMP_TAG)$(OS_TAG)$(ARCH_TAG).debug.lib
206TARGET_LIB_ST_R			=	$(PROJ_LIB_DIR)\$(PROJ_TAG_VER).$(COMP_TAG)$(OS_TAG)$(ARCH_TAG).lib
207TARGET_LIB_UN_ST_R		=	$(PROJ_LIB_DIR)\$(PROJ_TAG).$(COMP_TAG)$(OS_TAG)$(ARCH_TAG).lib
208
209
210
211TARGETS = \
212 $(TARGET_LIB_ST_D)\
213 $(TARGET_LIB_UN_ST_D)\
214 $(TARGET_LIB_ST_R)\
215 $(TARGET_LIB_UN_ST_R)\
216 \
217
218OBJ_PROJ_atomic__ST_D = $(PROJ_OBJ_DIR)\atomic.debug.obj
219OBJ_PROJ_dirent__ST_D = $(PROJ_OBJ_DIR)\dirent.debug.obj
220OBJ_PROJ_dlfcn__ST_D = $(PROJ_OBJ_DIR)\dlfcn.debug.obj
221OBJ_PROJ_glob__ST_D = $(PROJ_OBJ_DIR)\glob.debug.obj
222OBJ_PROJ_hostname__ST_D = $(PROJ_OBJ_DIR)\hostname.debug.obj
223OBJ_PROJ_mmap__ST_D = $(PROJ_OBJ_DIR)\mmap.debug.obj
224OBJ_PROJ_resource__ST_D = $(PROJ_OBJ_DIR)\resource.debug.obj
225OBJ_PROJ_setenv__ST_D = $(PROJ_OBJ_DIR)\setenv.debug.obj
226OBJ_PROJ_time__ST_D = $(PROJ_OBJ_DIR)\time.debug.obj
227OBJ_PROJ_uio__ST_D = $(PROJ_OBJ_DIR)\uio.debug.obj
228OBJ_PROJ_unistd__ST_D = $(PROJ_OBJ_DIR)\unistd.debug.obj
229OBJ_PROJ_internal_util__ST_D = $(PROJ_OBJ_DIR)\internal.util.debug.obj
230
231OBJ_PROJ_ST_D = \
232 $(OBJ_PROJ_atomic__ST_D)\
233 $(OBJ_PROJ_dirent__ST_D)\
234 $(OBJ_PROJ_dlfcn__ST_D)\
235 $(OBJ_PROJ_glob__ST_D)\
236 $(OBJ_PROJ_hostname__ST_D)\
237 $(OBJ_PROJ_mmap__ST_D)\
238 $(OBJ_PROJ_resource__ST_D)\
239 $(OBJ_PROJ_setenv__ST_D)\
240 $(OBJ_PROJ_time__ST_D)\
241 $(OBJ_PROJ_uio__ST_D)\
242 $(OBJ_PROJ_unistd__ST_D)\
243 $(OBJ_PROJ_internal_util__ST_D)\
244 \
245
246OBJ_PROJ_ST_D_P = \
247 +$(OBJ_PROJ_atomic__ST_D)\
248 +$(OBJ_PROJ_dirent__ST_D)\
249 +$(OBJ_PROJ_dlfcn__ST_D)\
250 +$(OBJ_PROJ_glob__ST_D)\
251 +$(OBJ_PROJ_hostname__ST_D)\
252 +$(OBJ_PROJ_mmap__ST_D)\
253 +$(OBJ_PROJ_resource__ST_D)\
254 +$(OBJ_PROJ_setenv__ST_D)\
255 +$(OBJ_PROJ_time__ST_D)\
256 +$(OBJ_PROJ_uio__ST_D)\
257 +$(OBJ_PROJ_unistd__ST_D)\
258 +$(OBJ_PROJ_internal_util__ST_D)\
259 \
260
261
262OBJ_PROJ_atomic__ST_R = $(PROJ_OBJ_DIR)\atomic.obj
263OBJ_PROJ_dirent__ST_R = $(PROJ_OBJ_DIR)\dirent.obj
264OBJ_PROJ_dlfcn__ST_R = $(PROJ_OBJ_DIR)\dlfcn.obj
265OBJ_PROJ_glob__ST_R = $(PROJ_OBJ_DIR)\glob.obj
266OBJ_PROJ_hostname__ST_R = $(PROJ_OBJ_DIR)\hostname.obj
267OBJ_PROJ_mmap__ST_R = $(PROJ_OBJ_DIR)\mmap.obj
268OBJ_PROJ_resource__ST_R = $(PROJ_OBJ_DIR)\resource.obj
269OBJ_PROJ_setenv__ST_R = $(PROJ_OBJ_DIR)\setenv.obj
270OBJ_PROJ_time__ST_R = $(PROJ_OBJ_DIR)\time.obj
271OBJ_PROJ_uio__ST_R = $(PROJ_OBJ_DIR)\uio.obj
272OBJ_PROJ_unistd__ST_R = $(PROJ_OBJ_DIR)\unistd.obj
273OBJ_PROJ_internal_util__ST_R = $(PROJ_OBJ_DIR)\internal.util.obj
274
275OBJ_PROJ_ST_R = \
276 $(OBJ_PROJ_atomic__ST_R)\
277 $(OBJ_PROJ_dirent__ST_R)\
278 $(OBJ_PROJ_dlfcn__ST_R)\
279 $(OBJ_PROJ_glob__ST_R)\
280 $(OBJ_PROJ_hostname__ST_R)\
281 $(OBJ_PROJ_mmap__ST_R)\
282 $(OBJ_PROJ_resource__ST_R)\
283 $(OBJ_PROJ_setenv__ST_R)\
284 $(OBJ_PROJ_time__ST_R)\
285 $(OBJ_PROJ_uio__ST_R)\
286 $(OBJ_PROJ_unistd__ST_R)\
287 $(OBJ_PROJ_internal_util__ST_R)\
288 \
289
290OBJ_PROJ_ST_R_P = \
291 +$(OBJ_PROJ_atomic__ST_R)\
292 +$(OBJ_PROJ_dirent__ST_R)\
293 +$(OBJ_PROJ_dlfcn__ST_R)\
294 +$(OBJ_PROJ_glob__ST_R)\
295 +$(OBJ_PROJ_hostname__ST_R)\
296 +$(OBJ_PROJ_mmap__ST_R)\
297 +$(OBJ_PROJ_resource__ST_R)\
298 +$(OBJ_PROJ_setenv__ST_R)\
299 +$(OBJ_PROJ_time__ST_R)\
300 +$(OBJ_PROJ_uio__ST_R)\
301 +$(OBJ_PROJ_unistd__ST_R)\
302 +$(OBJ_PROJ_internal_util__ST_R)\
303 \
304
305
306OBJS = \
307 $(OBJ_PROJ_ST_D)\
308 $(OBJ_PROJ_ST_R)\
309 \
310
311all:	target
312
313usage:
314	@echo "make [usage | clean | all | test | target] - default is 'all'"
315
316clean:
317	@-$(RM) $(TARGET_LIB_ST_D)
318	@-$(RM) $(TARGET_LIB_UN_ST_D)
319	@-$(RM) $(TARGET_LIB_ST_R)
320	@-$(RM) $(TARGET_LIB_UN_ST_R)
321	@-$(RM) $(OBJ_PROJ_ST_D)
322	@-$(RM) $(OBJ_PROJ_ST_R)
323
324
325# targets
326
327target:		check.lib.dir $(TARGETS)
328
329compile.libs.core:	$(OBJS)
330
331compile.libs:		compile.libs.core
332
333compile:			compile.libs
334
335build.libs.core:	$(TARGETS)
336
337build.libs:			build.libs.core
338
339build:				build.libs
340
341check.lib.dir:
342	@-if not exist $(PROJ_LIB_DIR)\NUL mkdir $(PROJ_LIB_DIR)
343
344check.bin.dir:
345	@-if not exist $(PROJ_BIN_DIR)\NUL mkdir $(PROJ_BIN_DIR)
346
347
348test_:
349#	$(TARGET_TEST_C_ST_D) --unittest
350#	$(TARGET_TEST_C_ST_R) --unittest
351
352test:	target test_
353
354
355# build targets
356
357# library
358
359
360$(TARGET_LIB_UN_ST_D): $(TARGET_LIB_ST_D)
361	@$(CP) $(TARGET_LIB_ST_D) $@
362
363$(TARGET_LIB_ST_D): $(OBJ_PROJ_ST_D) makefile
364	@-if not exist $(B64_LIB_DIR)\NUL mkdir $(B64_LIB_DIR)
365	@-$(RM) $(TARGET_LIB_ST_D)
366	$(AR) $(AR_ARGS) $@ $(OBJ_PROJ_ST_D_P)
367
368$(OBJ_PROJ_atomic__ST_D):	$(PROJ_SRC_DIR)\atomic.c $(PROJ_INCLUDE_DIR)\asm\atomic.h makefile
369	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\atomic.c
370$(OBJ_PROJ_dirent__ST_D):	$(PROJ_SRC_DIR)\dirent.c $(PROJ_INCLUDE_DIR)\dirent.h makefile
371	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\dirent.c
372$(OBJ_PROJ_dlfcn__ST_D):	$(PROJ_SRC_DIR)\dlfcn.c $(PROJ_INCLUDE_DIR)\dlfcn.h makefile
373	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\dlfcn.c
374$(OBJ_PROJ_glob__ST_D):	$(PROJ_SRC_DIR)\glob.c $(PROJ_INCLUDE_DIR)\glob.h makefile
375	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\glob.c
376$(OBJ_PROJ_hostname__ST_D):	$(PROJ_SRC_DIR)\hostname.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
377	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\hostname.c
378$(OBJ_PROJ_mmap__ST_D):	$(PROJ_SRC_DIR)\mmap.c $(PROJ_INCLUDE_DIR)\sys\mman.h makefile
379	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\mmap.c
380$(OBJ_PROJ_resource__ST_D):	$(PROJ_SRC_DIR)\resource.c $(PROJ_INCLUDE_DIR)\sys\resource.h makefile
381	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\resource.c
382$(OBJ_PROJ_setenv__ST_D):	$(PROJ_SRC_DIR)\setenv.c $(PROJ_INCLUDE_DIR)\unixem\setenv.h makefile
383	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\setenv.c
384$(OBJ_PROJ_time__ST_D):	$(PROJ_SRC_DIR)\time.c $(PROJ_INCLUDE_DIR)\sys\time.h makefile
385	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\time.c
386$(OBJ_PROJ_uio__ST_D):	$(PROJ_SRC_DIR)\uio.c $(PROJ_INCLUDE_DIR)\sys\uio.h makefile
387	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\uio.c
388$(OBJ_PROJ_unistd__ST_D):	$(PROJ_SRC_DIR)\unistd.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
389	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\unistd.c
390$(OBJ_PROJ_internal_util__ST_D): $(PROJ_SRC_DIR)\internal\util.c $(PROJ_INCLUDE_DIR)\unixem\internal\util.h makefile
391	$(CC) $(CC_ARGS_ST_D) -fo=$@ $(PROJ_SRC_DIR)\internal\util.c
392
393
394
395$(TARGET_LIB_UN_ST_R): $(TARGET_LIB_ST_R)
396	@$(CP) $(TARGET_LIB_ST_R) $@
397
398$(TARGET_LIB_ST_R): $(OBJ_PROJ_ST_R) makefile
399	@-if not exist $(B64_LIB_DIR)\NUL mkdir $(B64_LIB_DIR)
400	@-$(RM) $(TARGET_LIB_ST_R)
401	$(AR) $(AR_ARGS) $@ $(OBJ_PROJ_ST_R_P)
402
403$(OBJ_PROJ_atomic__ST_R):	$(PROJ_SRC_DIR)\atomic.c $(PROJ_INCLUDE_DIR)\asm\atomic.h makefile
404	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\atomic.c
405$(OBJ_PROJ_dirent__ST_R):	$(PROJ_SRC_DIR)\dirent.c $(PROJ_INCLUDE_DIR)\dirent.h makefile
406	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\dirent.c
407$(OBJ_PROJ_dlfcn__ST_R):	$(PROJ_SRC_DIR)\dlfcn.c $(PROJ_INCLUDE_DIR)\dlfcn.h makefile
408	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\dlfcn.c
409$(OBJ_PROJ_glob__ST_R):	$(PROJ_SRC_DIR)\glob.c $(PROJ_INCLUDE_DIR)\glob.h makefile
410	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\glob.c
411$(OBJ_PROJ_hostname__ST_R):	$(PROJ_SRC_DIR)\hostname.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
412	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\hostname.c
413$(OBJ_PROJ_mmap__ST_R):	$(PROJ_SRC_DIR)\mmap.c $(PROJ_INCLUDE_DIR)\sys\mman.h makefile
414	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\mmap.c
415$(OBJ_PROJ_resource__ST_R):	$(PROJ_SRC_DIR)\resource.c $(PROJ_INCLUDE_DIR)\sys\resource.h makefile
416	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\resource.c
417$(OBJ_PROJ_setenv__ST_R):	$(PROJ_SRC_DIR)\setenv.c $(PROJ_INCLUDE_DIR)\unixem\setenv.h makefile
418	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\setenv.c
419$(OBJ_PROJ_time__ST_R):	$(PROJ_SRC_DIR)\time.c $(PROJ_INCLUDE_DIR)\sys\time.h makefile
420	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\time.c
421$(OBJ_PROJ_uio__ST_R):	$(PROJ_SRC_DIR)\uio.c $(PROJ_INCLUDE_DIR)\sys\uio.h makefile
422	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\uio.c
423$(OBJ_PROJ_unistd__ST_R):	$(PROJ_SRC_DIR)\unistd.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
424	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\unistd.c
425$(OBJ_PROJ_internal_util__ST_R): $(PROJ_SRC_DIR)\internal\util.c $(PROJ_INCLUDE_DIR)\unixem\internal\util.h makefile
426	$(CC) $(CC_ARGS_ST_R) -fo=$@ $(PROJ_SRC_DIR)\internal\util.c
427
428
429
430############################################################################
431