1############################################################################
2# File:		makefile
3#
4# Purpose:	Makefile for the UNIXem project, for the GCC 3.3
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            =   gcc33
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						=	gcc
53CPPC                    =   g++
54AR						=	ar
55LD						=	g++
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				=
135CC_F_COMPILE_ONLY		=	-c
136CC_F_WARNING_MAX		=	-Wall -pedantic -Wno-long-long
137CC_F_WARNING_ERR		=	-Werror
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			=
147CPPC_F_COMPILE_ONLY 	=	-c
148CPPC_F_WARNING_MAX		=	-Wall -pedantic -Wno-long-long
149CPPC_F_WARNING_ERR		=	-Werror
150CPPC_F_WARNINGS_LIMIT	=
151CPPC_F_MINIMUM_SIZE 	=
152#CPPC_F_MAXIMUM_SPEED	=
153CPPC_F_EXCEPTIONS		=
154CPPC_F_NO_EXCEPTIONS	=
155CPPC_F_WITH_EXCEPTIONS	=
156CPPC_F_RTTI 			=
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				=	-D_DEBUG -UNDEBUG $(CC_FLAGS) $(CC_DEFS) $(CC_INCLUDES)
195CC_ARGS_ST_R				=	-DNDEBUG -U_DEBUG $(CC_FLAGS) $(CC_DEFS) $(CC_INCLUDES)
196
197AR_ARGS				=
198
199LD_ARGS				=	 $(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_atomic__ST_R = $(PROJ_OBJ_DIR)\atomic.obj
247OBJ_PROJ_dirent__ST_R = $(PROJ_OBJ_DIR)\dirent.obj
248OBJ_PROJ_dlfcn__ST_R = $(PROJ_OBJ_DIR)\dlfcn.obj
249OBJ_PROJ_glob__ST_R = $(PROJ_OBJ_DIR)\glob.obj
250OBJ_PROJ_hostname__ST_R = $(PROJ_OBJ_DIR)\hostname.obj
251OBJ_PROJ_mmap__ST_R = $(PROJ_OBJ_DIR)\mmap.obj
252OBJ_PROJ_resource__ST_R = $(PROJ_OBJ_DIR)\resource.obj
253OBJ_PROJ_setenv__ST_R = $(PROJ_OBJ_DIR)\setenv.obj
254OBJ_PROJ_time__ST_R = $(PROJ_OBJ_DIR)\time.obj
255OBJ_PROJ_uio__ST_R = $(PROJ_OBJ_DIR)\uio.obj
256OBJ_PROJ_unistd__ST_R = $(PROJ_OBJ_DIR)\unistd.obj
257OBJ_PROJ_internal_util__ST_R = $(PROJ_OBJ_DIR)\internal.util.obj
258
259OBJ_PROJ_ST_R = \
260 $(OBJ_PROJ_atomic__ST_R)\
261 $(OBJ_PROJ_dirent__ST_R)\
262 $(OBJ_PROJ_dlfcn__ST_R)\
263 $(OBJ_PROJ_glob__ST_R)\
264 $(OBJ_PROJ_hostname__ST_R)\
265 $(OBJ_PROJ_mmap__ST_R)\
266 $(OBJ_PROJ_resource__ST_R)\
267 $(OBJ_PROJ_setenv__ST_R)\
268 $(OBJ_PROJ_time__ST_R)\
269 $(OBJ_PROJ_uio__ST_R)\
270 $(OBJ_PROJ_unistd__ST_R)\
271 $(OBJ_PROJ_internal_util__ST_R)\
272 \
273
274OBJS = \
275 $(OBJ_PROJ_ST_D)\
276 $(OBJ_PROJ_ST_R)\
277 \
278
279all:	target
280
281usage:
282	@echo "make [usage | clean | all | test | target] - default is 'all'"
283
284clean:
285	@-$(RM) $(TARGET_LIB_ST_D)
286	@-$(RM) $(TARGET_LIB_UN_ST_D)
287	@-$(RM) $(TARGET_LIB_ST_R)
288	@-$(RM) $(TARGET_LIB_UN_ST_R)
289	@-$(RM) $(OBJ_PROJ_ST_D)
290	@-$(RM) $(OBJ_PROJ_ST_R)
291
292
293# targets
294
295target:		check.lib.dir $(TARGETS)
296
297compile.libs.core:	$(OBJS)
298
299compile.libs:		compile.libs.core
300
301compile:			compile.libs
302
303build.libs.core:	$(TARGETS)
304
305build.libs:			build.libs.core
306
307build:				build.libs
308
309check.lib.dir:
310	@-if not exist $(PROJ_LIB_DIR)\NUL mkdir $(PROJ_LIB_DIR)
311
312check.bin.dir:
313	@-if not exist $(PROJ_BIN_DIR)\NUL mkdir $(PROJ_BIN_DIR)
314
315
316test_:
317#	$(TARGET_TEST_C_ST_D) --unittest
318#	$(TARGET_TEST_C_ST_R) --unittest
319
320test:	target test_
321
322
323# build targets
324
325# library
326
327
328$(TARGET_LIB_UN_ST_D): $(TARGET_LIB_ST_D)
329	@$(CP) $(TARGET_LIB_ST_D) $@
330
331$(TARGET_LIB_ST_D): $(OBJ_PROJ_ST_D) makefile
332	@-if not exist $(B64_LIB_DIR)\NUL mkdir $(B64_LIB_DIR)
333	$(AR) $(AR_ARGS) -r $@ $(OBJ_PROJ_ST_D)
334
335$(OBJ_PROJ_atomic__ST_D):	$(PROJ_SRC_DIR)\atomic.c $(PROJ_INCLUDE_DIR)\asm\atomic.h makefile
336	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\atomic.c
337$(OBJ_PROJ_dirent__ST_D):	$(PROJ_SRC_DIR)\dirent.c $(PROJ_INCLUDE_DIR)\dirent.h makefile
338	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\dirent.c
339$(OBJ_PROJ_dlfcn__ST_D):	$(PROJ_SRC_DIR)\dlfcn.c $(PROJ_INCLUDE_DIR)\dlfcn.h makefile
340	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\dlfcn.c
341$(OBJ_PROJ_glob__ST_D):	$(PROJ_SRC_DIR)\glob.c $(PROJ_INCLUDE_DIR)\glob.h makefile
342	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\glob.c
343$(OBJ_PROJ_hostname__ST_D):	$(PROJ_SRC_DIR)\hostname.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
344	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\hostname.c
345$(OBJ_PROJ_mmap__ST_D):	$(PROJ_SRC_DIR)\mmap.c $(PROJ_INCLUDE_DIR)\sys\mman.h makefile
346	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\mmap.c
347$(OBJ_PROJ_resource__ST_D):	$(PROJ_SRC_DIR)\resource.c $(PROJ_INCLUDE_DIR)\sys\resource.h makefile
348	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\resource.c
349$(OBJ_PROJ_setenv__ST_D):	$(PROJ_SRC_DIR)\setenv.c $(PROJ_INCLUDE_DIR)\unixem\setenv.h makefile
350	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\setenv.c
351$(OBJ_PROJ_time__ST_D):	$(PROJ_SRC_DIR)\time.c $(PROJ_INCLUDE_DIR)\sys\time.h makefile
352	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\time.c
353$(OBJ_PROJ_uio__ST_D):	$(PROJ_SRC_DIR)\uio.c $(PROJ_INCLUDE_DIR)\sys\uio.h makefile
354	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\uio.c
355$(OBJ_PROJ_unistd__ST_D):	$(PROJ_SRC_DIR)\unistd.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
356	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\unistd.c
357$(OBJ_PROJ_internal_util__ST_D): $(PROJ_SRC_DIR)\internal\util.c $(PROJ_INCLUDE_DIR)\unixem\internal\util.h makefile
358	$(CC) $(CC_ARGS_ST_D) -o $@ $(PROJ_SRC_DIR)\internal\util.c
359
360
361
362$(TARGET_LIB_UN_ST_R): $(TARGET_LIB_ST_R)
363	@$(CP) $(TARGET_LIB_ST_R) $@
364
365$(TARGET_LIB_ST_R): $(OBJ_PROJ_ST_R) makefile
366	@-if not exist $(B64_LIB_DIR)\NUL mkdir $(B64_LIB_DIR)
367	$(AR) $(AR_ARGS) -r $@ $(OBJ_PROJ_ST_R)
368
369$(OBJ_PROJ_atomic__ST_R):	$(PROJ_SRC_DIR)\atomic.c $(PROJ_INCLUDE_DIR)\asm\atomic.h makefile
370	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\atomic.c
371$(OBJ_PROJ_dirent__ST_R):	$(PROJ_SRC_DIR)\dirent.c $(PROJ_INCLUDE_DIR)\dirent.h makefile
372	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\dirent.c
373$(OBJ_PROJ_dlfcn__ST_R):	$(PROJ_SRC_DIR)\dlfcn.c $(PROJ_INCLUDE_DIR)\dlfcn.h makefile
374	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\dlfcn.c
375$(OBJ_PROJ_glob__ST_R):	$(PROJ_SRC_DIR)\glob.c $(PROJ_INCLUDE_DIR)\glob.h makefile
376	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\glob.c
377$(OBJ_PROJ_hostname__ST_R):	$(PROJ_SRC_DIR)\hostname.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
378	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\hostname.c
379$(OBJ_PROJ_mmap__ST_R):	$(PROJ_SRC_DIR)\mmap.c $(PROJ_INCLUDE_DIR)\sys\mman.h makefile
380	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\mmap.c
381$(OBJ_PROJ_resource__ST_R):	$(PROJ_SRC_DIR)\resource.c $(PROJ_INCLUDE_DIR)\sys\resource.h makefile
382	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\resource.c
383$(OBJ_PROJ_setenv__ST_R):	$(PROJ_SRC_DIR)\setenv.c $(PROJ_INCLUDE_DIR)\unixem\setenv.h makefile
384	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\setenv.c
385$(OBJ_PROJ_time__ST_R):	$(PROJ_SRC_DIR)\time.c $(PROJ_INCLUDE_DIR)\sys\time.h makefile
386	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\time.c
387$(OBJ_PROJ_uio__ST_R):	$(PROJ_SRC_DIR)\uio.c $(PROJ_INCLUDE_DIR)\sys\uio.h makefile
388	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\uio.c
389$(OBJ_PROJ_unistd__ST_R):	$(PROJ_SRC_DIR)\unistd.c $(PROJ_INCLUDE_DIR)\unistd.h makefile
390	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\unistd.c
391$(OBJ_PROJ_internal_util__ST_R): $(PROJ_SRC_DIR)\internal\util.c $(PROJ_INCLUDE_DIR)\unixem\internal\util.h makefile
392	$(CC) $(CC_ARGS_ST_R) -o $@ $(PROJ_SRC_DIR)\internal\util.c
393
394
395
396############################################################################
397