source: trunk/make/process.mak@ 8197

Last change on this file since 8197 was 8197, checked in by bird, 23 years ago

Moved from tools\make.

File size: 12.9 KB
Line 
1# $Id: process.mak,v 1.1 2002-04-06 20:25:04 bird Exp $
2
3#
4# Unix-like tools for OS/2
5#
6# The common build process rules
7#
8# Note: this makefile is supposed to be included from the
9# current source path.
10#
11
12#
13# This makefile expects setup.mak and the specific setup to be included
14# already. Plus there are several prerequisite environment variables
15# subsystem makefiles need to set:
16# TARGET_NAME is obligatory
17
18!ifndef TARGET_NAME
19!error fatal error: TARGET_NAME is not defined!
20!endif
21
22# provide overridable defaults
23!ifndef TARGET
24TARGET=$(PATH_TARGET)\$(TARGET_NAME).$(TARGET_EXT)
25!endif
26
27!ifndef TARGET_OBJS
28TARGET_OBJS=$(PATH_TARGET)\$(TARGET_NAME).$(EXT_OBJ)
29!endif
30
31!ifndef TARGET_LIBS
32TARGET_LIBS=$(LIB_C_DLL) $(LIB_OS) $(LIB_C_RTDLL)
33!endif
34
35!ifndef TARGET_DEF
36TARGET_DEF=$(MAKEDIR)\$(PATH_DEF)\$(TARGET_NAME).def
37!endif
38
39!ifndef TARGET_IDEF
40TARGET_IDEF=$(TARGET_DEF)
41!endif
42
43!ifndef TARGET_MAP
44TARGET_MAP=$(PATH_TARGET)\$(TARGET_NAME).map
45!endif
46
47!ifndef TARGET_LNK
48TARGET_LNK=$(PATH_TARGET)\$(TARGET_NAME).lnk
49!endif
50
51!ifndef TARGET_MODE
52TARGET_MODE=EXE
53!endif
54
55!ifndef TARGET_EXT
56!if "$(TARGET_MODE)" == "CRT" || "$(TARGET_MODE)" == "DLL"
57TARGET_EXT=$(EXT_DLL)
58!endif
59!if "$(TARGET_MODE)" == "SYS"
60TARGET_EXT=$(EXT_SYS)
61!endif
62!if "$(TARGET_MODE)" == "EXE"
63TARGET_EXT=$(EXT_EXE)
64!endif
65!if "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB" || "$(TARGET_MODE)" == "SYSLIB"
66TARGET_EXT=$(EXT_LIB)
67!endif
68!if "$(TARGET_MODE)" == "EMPTY"
69TARGET_EXT=empty
70!endif
71!ifndef TARGET_EXT
72!error Error: TARGET_EXT not set
73!endif
74!endif
75
76!ifndef TARGET_ILIB
77!if "$(TARGET_MODE)" == "CRT" || "$(TARGET_MODE)" == "DLL"
78TARGET_ILIB=$(PATH_LIB)\$(TARGET_NAME).$(EXT_ILIB)
79!endif
80!endif
81
82!if "$(TARGET_MODE)" == "PUBLIB"
83TARGET_PUBLIB=$(PATH_LIB)\$(TARGET_NAME).$(TARGET_EXT)
84!else
85TARGET_PUBLIB=
86!endif
87
88
89!ifndef TARGET_STACKSIZE
90# check if 16-bit target compiler
91! if "$(BUILD_ENV)" == "MSCV6"
92TARGET_STACKSIZE=0x2000
93! else
94TARGET_STACKSIZE=0x10000
95! endif
96!endif
97
98!ifndef MAKEFILE
99MAKEFILE = makefile
100!endif
101
102
103# ensure the platform-specific target path exists
104PATH_TARGET=$(PATH_OBJ)\$(TARGET_NAME).$(TARGET_EXT)
105!if "$(PATH_TARGET)" != ""
106! if [$(TOOL_EXISTS) $(PATH_TARGET)] != 0
107! if [$(ECHO) Target path $(CLRFIL)$(PATH_TARGET)$(CLRTXT) does NOT exist. Creating. $(CLRRST)]
108! endif
109! if [$(TOOL_CREATEPATH) $(PATH_TARGET)]
110! error Could not create $(PATH_TARGET)
111! endif
112! endif
113!endif
114
115
116# Tell user what we're building.
117!if [$(ECHO) Target is $(CLRFIL)$(TARGET)$(CLRRST)]
118!endif
119
120
121# build the target filenames
122BUILD_TARGET_DEPEND=$(PATH_TARGET)\.depend
123
124
125# ----------------------
126# common inference rules
127# ----------------------
128
129.SUFFIXES:
130.SUFFIXES: .dll .exe .$(EXT_OBJ) .c .cpp .asm .res .rc .pre-c .pre-cpp # .h .def
131
132
133# Assembling assembly source.
134.asm{$(PATH_TARGET)}.$(EXT_OBJ):
135 @$(ECHO) Assembling $(CLRFIL)$< $(CLRRST)
136!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
137 @$(AS) $(AS_FLAGS_SYS) $< $(AS_OBJ_OUT)$@
138!else
139 @$(AS) $(AS_FLAGS) $< $(AS_OBJ_OUT)$@
140!endif
141
142.asm.$(EXT_OBJ):
143 @$(ECHO) Assembling $(CLRFIL)$< $(CLRRST)
144!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
145 @$(AS) $(AS_FLAGS_SYS) $< $(AS_OBJ_OUT)$(PATH_TARGET)\$(@F)
146!else
147 @$(AS) $(AS_FLAGS) $< $(AS_OBJ_OUT)$(PATH_TARGET)\$(@F)
148!endif
149
150
151# Compiling C++ source.
152.cpp{$(PATH_TARGET)}.$(EXT_OBJ):
153 @$(ECHO) C++ Compiler $(CLRFIL)$< $(CLRRST)
154 @$(CXX) \
155!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
156 $(CXX_FLAGS_EXE) \
157!endif
158!if "$(TARGET_MODE)" == "CRT"
159 $(CXX_FLAGS_CRT) \
160!endif
161!if "$(TARGET_MODE)" == "DLL"
162 $(CXX_FLAGS_DLL) \
163!endif
164!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
165 $(CXX_FLAGS_SYS) \
166!endif
167 $(CXX_OBJ_OUT)$@ $<
168
169.cpp.$(EXT_OBJ):
170 @$(ECHO) C++ Compiler $(CLRFIL)$< $(CLRRST)
171 @$(CXX) \
172!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
173 $(CXX_FLAGS_EXE) \
174!endif
175!if "$(TARGET_MODE)" == "CRT"
176 $(CXX_FLAGS_CRT) \
177!endif
178!if "$(TARGET_MODE)" == "DLL"
179 $(CXX_FLAGS_DLL) \
180!endif
181!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
182 $(CXX_FLAGS_SYS) \
183!endif
184 $(CXX_OBJ_OUT)$(PATH_TARGET)\$(@F) $<
185
186
187# Pre-Compiling C++ source.
188.cpp.pre-cpp:
189 @$(ECHO) C++ Compiler $(CLRFIL)$< $(CLRRST)
190 @$(CXX) \
191!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
192 $(CXX_FLAGS_EXE) \
193!endif
194!if "$(TARGET_MODE)" == "CRT"
195 $(CXX_FLAGS_CRT) \
196!endif
197!if "$(TARGET_MODE)" == "DLL"
198 $(CXX_FLAGS_DLL) \
199!endif
200!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
201 $(CXX_FLAGS_SYS) \
202!endif
203 $(CXX_PC_2_STDOUT) $< > $@
204
205
206# Compiling C source.
207.c{$(PATH_TARGET)}.$(EXT_OBJ):
208 @$(ECHO) C Compiler $(CLRFIL)$< $(CLRRST)
209 @$(CC) \
210!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
211 $(CC_FLAGS_EXE) \
212!endif
213!if "$(TARGET_MODE)" == "CRT"
214 $(CC_FLAGS_CRT) \
215!endif
216!if "$(TARGET_MODE)" == "DLL"
217 $(CC_FLAGS_DLL) \
218!endif
219!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
220 $(CC_FLAGS_SYS) \
221!endif
222 $(CC_OBJ_OUT)$@ $<
223
224.c.$(EXT_OBJ):
225 @$(ECHO) C Compiler $(CLRFIL)$< $(CLRRST)
226 @$(CC) \
227!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
228 $(CC_FLAGS_EXE) \
229!endif
230!if "$(TARGET_MODE)" == "CRT"
231 $(CC_FLAGS_CRT) \
232!endif
233!if "$(TARGET_MODE)" == "DLL"
234 $(CC_FLAGS_DLL) \
235!endif
236!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
237 $(CC_FLAGS_SYS) \
238!endif
239 $(CC_OBJ_OUT)$(PATH_TARGET)\$(@F) $<
240
241
242# Pre-Compiling C source.
243.c.pre-c:
244 @$(ECHO) C PreCompiler $(CLRFIL)$< $(CLRRST)
245 @$(CC) \
246!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB"
247 $(CC_FLAGS_EXE) \
248!endif
249!if "$(TARGET_MODE)" == "CRT"
250 $(CC_FLAGS_CRT) \
251!endif
252!if "$(TARGET_MODE)" == "DLL"
253 $(CC_FLAGS_DLL) \
254!endif
255!if "$(TARGET_MODE)" == "SYS" || "$(TARGET_MODE)" == "SYSLIB"
256 $(CC_FLAGS_SYS) \
257!endif
258 $(CC_PC_2_STDOUT) $< > $@
259
260
261# Compiling resources.
262.rc{$(PATH_TARGET)}.res:
263 @$(ECHO) RC Compiler $(CLRFIL)$< $(CLRRST)
264 @$(RC) $(RC_FLAGS) $< $@
265
266.rc.res:
267 @$(ECHO) RC Compiler $(CLRFIL)$< $(CLRRST)
268 @$(RC) $(RC_FLAGS) $< $(PATH_TARGET)\$(@F)
269
270
271#
272# establish root dependency
273# by removing the extension from the BUILD_TARGET
274# and replacing it with .obj
275#
276all: build
277
278
279#
280# Build the main target.
281#
282!ifdef SUBDIRS
283SUBDIRS_BUILD = subbuild
284$(SUBDIRS_BUILD):
285 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) build
286!endif
287
288!ifdef PREMAKEFILES
289PREMAKEFILES_BUILD = premakefiles_build
290$(PREMAKEFILES_BUILD):
291 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) build
292!endif
293
294build: $(SUBDIRS_BUILD) $(PREMAKEFILES_BUILD) $(TARGET) $(TARGET_ILIB) $(TARGET_PUBLIB)
295 @$(ECHO) Successfully Built $(CLRFIL)$(TARGET) $(TARGET_ILIB)$(CLRRST)
296!ifdef POSTMAKEFILES
297 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) $@
298!endif
299
300
301#
302# Make Public libraries.
303#
304!ifdef SUBDIRS
305SUBDIRS_LIB = subdir_lib
306$(SUBDIRS_LIB):
307 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) lib
308!endif
309
310!ifdef PREMAKEFILES
311PREMAKEFILES_LIB = premakefiles_lib
312$(PREMAKEFILES_LIB):
313 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) lib
314!endif
315
316lib: $(SUBDIRS_LIB) $(TARGET_ILIB) $(TARGET_PUBLIB)
317!ifdef POSTMAKEFILES
318 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) $@
319!endif
320
321
322#
323# Copies target to main binary directory.
324#
325install:
326!if "$(TARGET_MODE)" == "EXE"
327 if exist $(TARGET) $(TOOL_COPY) $(TARGET) $(PATH_BIN)
328!endif
329!if "$(TARGET_MODE)" == "DLL" || "$(TARGET_MODE)" == "CRT"
330 if exist $(TARGET) $(TOOL_COPY) $(TARGET) $(PATH_DLL)
331!endif
332!if "$(TARGET_MODE)" == "SYS"
333 if exist $(TARGET) $(TOOL_COPY) $(TARGET) $(PATH_SYS)
334!endif
335!if "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB" || "$(TARGET_MODE)" == "SYSLIB"
336# if exist $(TARGET) $(TOOL_COPY) $(TARGET) $(PATH_LIB)
337!endif
338!if "$(TARGET_DOCS)" != ""
339 $(TOOL_COPY) $(TARGET_DOCS) $(PATH_DOC)
340!endif
341!ifdef SUBDIRS
342 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) $@
343!endif
344!ifdef PREMAKEFILES
345 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) $@
346!endif
347!ifdef POSTMAKEFILES
348 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) $@
349!endif
350
351
352#
353# Run evt. testcase
354#
355!ifndef BUILD_NO_TESTCASE
356testcase: install
357!if [$(TOOL_EXISTS) testcase] == 0
358 @$(TOOL_DODIRS) "testcase" $(TOOL_MAKE) $@
359!endif
360!if [$(TOOL_EXISTS) testcase.mak] == 0
361 @$(TOOL_DOMAKES) "testcase.mak" $(TOOL_MAKE) $@
362!endif
363!ifdef SUBDIRS
364 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) $@
365!endif
366!ifdef PREMAKEFILES
367 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) $@
368!endif
369!ifdef POSTMAKEFILES
370 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) $@
371!endif
372!endif
373
374
375#
376# Make dependencies.
377#
378dep:
379 @$(ECHO) Building dependencies $(CLRRST)
380 @$(TOOL_DEP) $(TOOL_DEP_FLAGS) -o$$(PATH_TARGET) -d$(BUILD_TARGET_DEPEND)\
381!ifdef TARGET_NO_DEP
382 -x$(TARGET_NO_DEP: =;)\
383!endif
384 $(TOOL_DEP_FILES)
385!ifdef SUBDIRS
386 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) NODEP=1 $@
387!endif
388!ifdef PREMAKEFILES
389 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) NODEP=1 $@
390!endif
391!ifdef POSTMAKEFILES
392 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) NODEP=1 $@
393!endif
394
395
396#
397# Clean up output files (not the installed ones).
398#
399clean:
400!if "$(PATH_TARGET)" != "" # paranoia
401!if "$(PATH_TARGET)" == "."
402 $(TOOL_RM) \
403 $(PATH_TARGET)\*.$(EXT_OBJ) \
404 $(PATH_TARGET)\*.$(EXT_ILIB) \
405 $(PATH_TARGET)\*.$(EXT_EXE) \
406 $(PATH_TARGET)\*.$(EXT_DLL) \
407 $(PATH_TARGET)\*.$(EXT_RES) \
408 $(PATH_TARGET)\*.$(EXT_SYS) \
409 $(PATH_TARGET)\*.$(EXT_LIB) \
410 $(PATH_TARGET)\*.map \
411 $(PATH_TARGET)\*.lnk \
412 $(PATH_TARGET)\*.pre-c \
413 $(PATH_TARGET)\*.pre-cpp \
414 $(PATH_TARGET)\*.lst
415!else
416 $(TOOL_RM) \
417 $(PATH_TARGET)\*.$(EXT_OBJ) \
418 $(PATH_TARGET)\*.$(EXT_ILIB) \
419 $(PATH_TARGET)\*.$(EXT_EXE) \
420 $(PATH_TARGET)\*.$(EXT_DLL) \
421 $(PATH_TARGET)\*.$(EXT_SYS) \
422 $(PATH_TARGET)\*.$(EXT_RES) \
423 $(PATH_TARGET)\*.$(EXT_LIB) \
424 $(PATH_TARGET)\*.map \
425 $(PATH_TARGET)\*.lnk \
426 $(PATH_TARGET)\*.lst
427!endif
428!endif
429!ifdef SUBDIRS
430 @$(TOOL_DODIRS) "$(SUBDIRS)" $(TOOL_MAKE) $@
431!endif
432!ifdef PREMAKEFILES
433 @$(TOOL_DOMAKES) "$(PREMAKEFILES)" $(TOOL_MAKE) $@
434!endif
435!ifdef POSTMAKEFILES
436 @$(TOOL_DOMAKES) "$(POSTMAKEFILES)" $(TOOL_MAKE) $@
437!endif
438
439
440#
441# EXE, DLL and SYS Targets
442#
443!if "$(TARGET_MODE)" == "EXE" || "$(TARGET_MODE)" == "DLL" || "$(TARGET_MODE)" == "CRT" || "$(TARGET_MODE)" == "SYS"
444! if "$(TARGET_MODE)" == "DLL" || "$(TARGET_MODE)" == "CRT"
445TARGET_IGNORE_LINKER_WARNINGS=1
446!endif
447$(TARGET): $(TARGET_OBJS) $(TARGET_RES) $(TARGET_DEF) $(TARGET_LNK) $(TARGET_DEPS)
448 @$(ECHO) Linking $(TARGET_MODE) $(CLRFIL)$@ $(CLRRST)
449!ifdef TARGET_IGNORE_LINKER_WARNINGS
450 -4 \
451!endif
452!if "$(TARGET_MODE)" == "EXE"
453 @$(LINK_CMD_EXE)
454!endif
455!if "$(TARGET_MODE)" == "DLL" || "$(TARGET_MODE)" == "CRT"
456 @$(LINK_CMD_DLL)
457!endif
458!if "$(TARGET_MODE)" == "SYS"
459 @$(LINK_CMD_SYS)
460!endif
461!if "$(TARGET_RES)" != "" && "$(RL)" != ""
462 @$(ECHO) Linking Resources $(CLRRST)
463 @$(RL) $(RL_FLAGS) $(TARGET_RES) $@
464!endif
465!if "$(TARGET_DLLRNAME)" != ""
466 @$(ECHO) Dll Rename $(TARGET_DLLRNAME)
467 $(TOOL_DLLRNAME) $(TARGET) $(TARGET_DLLRNAME)
468!endif
469
470
471#
472# Linker parameter file.
473#
474$(TARGET_LNK): $(MAKE_INCLUDE_PROCESS) $(MAKE_INCLUDE_SETUP) $(PATH_MAKE)\setup.mak $(MAKEFILE)
475 @$(ECHO) Creating Linker Input File $(CLRRST)<<$@
476$(LINK_LNK1)
477$(LINK_LNK2)
478$(LINK_LNK3)
479$(LINK_LNK4)
480$(LINK_LNK5)
481<<KEEP
482
483
484#
485# DLL Import library
486#
487!ifdef TARGET_ILIB
488$(TARGET_ILIB): $(TARGET_IDEF)
489 @$(ECHO) Creating Import Library $(CLRFIL)$@ $(CLRRST)
490 $(IMPLIB) $(IMPLIB_FLAGS) $@ $(TARGET_IDEF)
491!endif
492!endif
493
494
495#
496# Lib Targets.
497#
498!if "$(TARGET_MODE)" == "LIB" || "$(TARGET_MODE)" == "PUBLIB" || "$(TARGET_MODE)" == "SYSLIB"
499$(TARGET): $(TARGET_OBJS) $(TARGET_LNK) $(TARGET_DEPS)
500 @$(ECHO) Creating Library $(CLRFIL)$@ $(CLRRST)
501 $(TOOL_RM) $@
502 $(AR_CMD)
503
504
505#
506# Lib parameter file.
507#
508$(TARGET_LNK): $(MAKE_INCLUDE_PROCESS) $(MAKE_INCLUDE_SETUP) $(PATH_MAKE)\setup.mak $(MAKEFILE)
509 @$(ECHO) Creating Lib Input File $(CLRRST)<<$@
510$(AR_LNK1)
511$(AR_LNK2)
512$(AR_LNK3)
513$(AR_LNK4)
514$(AR_LNK5)
515<<KEEP
516!endif
517
518
519#
520# Copy rule for public libraries.
521#
522!if "$(TARGET_MODE)" == "PUBLIB"
523$(TARGET_PUBLIB): $(TARGET)
524 @$(ECHO) Copying $(CLRFIL)$(TARGET)$(CLRTXT) to the Library Directory $(CLRRST)
525 @$(TOOL_COPY) $** $@
526!endif
527
528
529#
530# Empty target.
531#
532!if "$(TARGET_MODE)" == "EMPTY"
533$(TARGET):
534 @$(ECHO) .
535!endif
536
537
538#
539# read dependency file from current directory
540#
541!if "$(TARGET_MODE)" != "EMPTY"
542! if [$(TOOL_EXISTS) $(BUILD_TARGET_DEPEND)] == 0
543! if [$(ECHO) Including dependency $(CLRFIL)$(BUILD_TARGET_DEPEND)$(CLRRST)]
544! endif
545! include $(BUILD_TARGET_DEPEND)
546! else
547! ifndef NODEP
548! if [$(ECHO) $(CLRERR)WARNING: Please make dependencies first. $(BUILD_TARGET_DEPEND) is missing.$(CLRRST)]
549! endif
550! endif
551! endif
552!endif
553
554
555#
556# Force rule.
557#
558.force:
559 @$(ECHO) .
560
Note: See TracBrowser for help on using the repository browser.