source: trunk/make/setup.mak@ 10366

Last change on this file since 10366 was 10360, checked in by bird, 22 years ago

Allow overriding of _PATH_EXTRA.

File size: 12.1 KB
Line 
1# $Id: setup.mak,v 1.26 2003-12-12 11:54:11 bird Exp $
2#
3# The common build setup.
4#
5# Copyright (c) 2001-2003 knut st. osmundsen <bird@anduin.net>
6# Copyright (c) 2001 Patrick Haller
7#
8# This file is part of Generic Buildsystem.
9#
10
11
12# -----------------------------------------------------------------------------
13# Assert that the file isn't included several times.
14# -----------------------------------------------------------------------------
15!ifdef MAKE_SETUP_INCLUDED
16! error Fatal error: You've included setup.mak before!!!
17!endif
18MAKE_SETUP_INCLUDED = YES
19
20
21# -----------------------------------------------------------------------------
22# Validate the build the requested environment setup.
23# -----------------------------------------------------------------------------
24
25SHT_TRGPLTFRM=
26!if "$(BUILD_PLATFORM)" == "OS2"
27SHT_TRGPLTFRM=os2
28!endif
29!if "$(BUILD_PLATFORM)" == "WIN32"
30SHT_TRGPLTFRM=win32
31!endif
32!if "$(SHT_TRGPLTFRM)" == ""
33! error Fatal error: Env.var BUILD_PLATFORM is either unspecified or incorrect. ($(BUILD_PLATFORM)) Valid values: OS2 and WIN32
34!endif
35
36
37SHT_BLDMD=
38!if "$(BUILD_MODE)" == "RELEASE"
39SHT_BLDMD=rel
40!endif
41!if "$(BUILD_MODE)" == "DEBUG"
42SHT_BLDMD=deb
43!endif
44!if "$(BUILD_MODE)" == "PROFILE"
45SHT_BLDMD=prf
46!endif
47!if "$(SHT_BLDMD)" == ""
48! error Fatal error: Env.var BUILD_MODE is either unspecified or incorrect. ($(BUILD_MODE)) Valid values: RELEASE, DEBUG and PROFILE
49!endif
50
51
52SHT_BLDENV=
53!if "$(BUILD_ENV)" == "VAC308"
54SHT_BLDENV=vac308
55!endif
56!if "$(BUILD_ENV)" == "VAC365"
57SHT_BLDENV=vac365
58!endif
59!if "$(BUILD_ENV)" == "VAC4"
60SHT_BLDENV=vac4
61!endif
62!if "$(BUILD_ENV)" == "EMX"
63SHT_BLDENV=emx
64!endif
65!if "$(BUILD_ENV)" == "MSCV6"
66SHT_BLDENV=mscv6
67!endif
68!if "$(BUILD_ENV)" == "MSCV6-16"
69SHT_BLDENV=mscv6-16
70!endif
71!if "$(BUILD_ENV)" == "MSCV7-16"
72SHT_BLDENV=mscv7-16
73!endif
74!if "$(BUILD_ENV)" == "WAT11C"
75SHT_BLDENV=wat11
76!endif
77!if "$(BUILD_ENV)" == "WAT11C-16"
78SHT_BLDENV=wat11-16
79!endif
80!if "$(SHT_BLDENV)" == ""
81! error Fatal error: Env.var BUILD_ENV is either unspecified or incorrect. ($(BUILD_MODE)) Valid values: VAC308, VAC365, VAC4, EMX, MSCV6-16, MSCV7-16, WAT11C and WAT11C-16.
82!endif
83
84
85!ifdef BUILD_ENV_FORCE
86SHT_BLDENVFRC=
87!if "$(BUILD_ENV_FORCE)" == "VAC308"
88SHT_BLDENVFRC=vac308
89!endif
90!if "$(BUILD_ENV_FORCE)" == "VAC365"
91SHT_BLDENVFRC=vac365
92!endif
93!if "$(BUILD_ENV_FORCE)" == "VAC4"
94SHT_BLDENVFRC=vac4
95!endif
96!if "$(BUILD_ENV_FORCE)" == "EMX"
97SHT_BLDENVFRC=emx
98!endif
99!if "$(BUILD_ENV_FORCE)" == "MSCV6"
100SHT_BLDENVFRC=mscv6
101!endif
102!if "$(BUILD_ENV_FORCE)" == "MSCV6-16"
103SHT_BLDENVFRC=mscv6-16
104!endif
105!if "$(BUILD_ENV_FORCE)" == "MSCV7-16"
106SHT_BLDENVFRC=mscv7-16
107!endif
108!if "$(BUILD_ENV_FORCE)" == "WAT11C"
109SHT_BLDENVFRC=wat11
110!endif
111!if "$(BUILD_ENV_FORCE)" == "WAT11C-16"
112SHT_BLDENVFRC=wat11-16
113!endif
114!if "$(SHT_BLDENVFRC)" == ""
115! error Fatal error: Var BUILD_ENV_FORCE is incorrect. ($(BUILD_ENV_FORCE)) Valid values: VAC308, VAC365, VAC4, EMX, MSCV6-16, MSCV7-16, WAT11C and WAT11C-16.
116!endif
117!else
118BUILD_ENV_FORCE=$(BUILD_ENV)
119SHT_BLDENVFRC=$(SHT_BLDENV)
120!endif
121
122
123# -----------------------------------------------------------------------------
124# Directories
125# -----------------------------------------------------------------------------
126
127# Postfix which we append for special builds.
128!ifndef _PATH_EXTRA
129_PATH_EXTRA =
130!endif
131
132# current directory.
133PATH_CURRENT = $(MAKEDIR)
134# Where build system files are located. (like this file)
135PATH_MAKE = $(PATH_ROOT)\make
136# Where the bulid system and other tools are located
137PATH_TOOLS = $(PATH_ROOT)\tools\bin
138# Where platform-specific files are located. (like the .def files)
139PATH_DEF = .
140# Where the include files are located.
141!ifdef ODIN32_USERAPP
142PATH_INCLUDES = $(PATH_ROOT)\include\win;.;$(PATH_ROOT)\include
143!else
144PATH_INCLUDES = $(PATH_ROOT)\include\incl_vac;$(PATH_ROOT)\include\win;.;$(PATH_ROOT)\include
145!endif
146# Where the temporary files goes.
147PATH_OBJ = $(PATH_ROOT)\obj\$(SHT_TRGPLTFRM)$(SHT_BLDMD)$(SHT_BLDENV:-=_)$(_PATH_EXTRA)
148# Where the libraries goes.
149PATH_LIB = $(PATH_ROOT)\lib\$(BUILD_MODE)$(_PATH_EXTRA)
150# Base directory of the published files.
151PATH_PUB = $(PATH_ROOT)\bin\$(BUILD_MODE)$(_PATH_EXTRA)
152# Base directory of the unstripped published files. (release mode only)
153PATH_PUB_DEB = $(PATH_ROOT)\bin\$(BUILD_MODE)$(_PATH_EXTRA).unstripped
154# Sub dir where the executable binaries goes.
155PATH_SUB_BIN = .
156# Sub dir where the dynamic link libraries goes.
157PATH_SUB_DLL = .
158# Sub dir where the drivers goes. (common for IFS and SYS.)
159PATH_SUB_SYS = .
160# Sub dir where the virtual dos drivers goes.
161PATH_SUB_VDD = .
162# Sub dir where the book files goes. (aka .inf)
163PATH_SUB_BOOK = book
164# Sub dir where the help files goes. (aka .hlp)
165PATH_SUB_HELP = help
166# Sub dir where the documentation goes.
167PATH_SUB_DOC = docs
168
169
170
171# Note: Makefiles are supposed to set the correct *RELATIVE* path to the
172# projects root. Using '\' slashes please. No trailing slash.
173#
174# Example:
175# PATH_ROOT= ..\..\..
176# Assert PATH_ROOT
177!if "$(PATH_ROOT)" == ""
178!error fatal error: PATH_ROOT empty or undefined.
179!endif
180
181#
182# A workaround for SlickEdits inability to find the buggy files..
183# This fixes the relative paths of includes.
184# Set the make line to:
185# '%v && cd %p && nmake PATH_ROOT_ABS=%rp. %n.obj -a'
186# (NB! Set the project directory to the root dir by creating the project there!)
187#
188!ifdef SLKRUNS
189! ifdef PATH_ROOT_ABS
190PATH_ROOT = $(PATH_ROOT_ABS)
191! endif
192!endif
193
194
195
196# -----------------------------------------------------------------------------
197# Common variables / Project variables
198# -----------------------------------------------------------------------------
199
200# The default definitions.
201!ifndef ODIN32_USERAPP
202BUILD_DEFINES = -D__WIN32OS2__ -DTCPV40HDRS -DCOMCTL32UNDOC -D__WINE__
203!else
204BUILD_DEFINES = -D__WIN32OS2__ #-DTCPV40HDRS -DCOMCTL32UNDOC -D__WINE__
205!endif
206BUILD_BLDLEVEL_FLAGS = -V^"^#define=ODIN32_VERSION,$(PATH_ROOT)\include\odinbuild.h^" \
207 -M^"^#define=ODIN32_BUILD_NR,$(PATH_ROOT)\include\odinbuild.h^"
208BUILD_PROJECT = Odin32
209
210# Project Specific definitions.
211!if "$(BUILD_MODE)" != "DEBUG"
212LIB_ODINCRT = $(PATH_LIB)\odincrt.$(EXT_LIB)
213!else
214LIB_ODINCRT = $(PATH_LIB)\odincrtd.$(EXT_LIB)
215!endif
216!ifndef CUSTOMBUILD
217OBJ_DLLENTRY = $(PATH_LIB)\dllentry.$(EXT_OBJ)
218!else
219OBJ_DLLENTRY =
220!endif
221PUBLISH_MAP = 1
222
223# This is the process file to include at end of the makefile.
224MAKE_INCLUDE_PROCESS = $(PATH_MAKE)\process.mak
225
226# -----------------------------------------------------------------------------
227# Build the environments variables
228# -----------------------------------------------------------------------------
229
230# In the makefiles you're allowed to use the BUILD_ENVS_PRE,
231# BUILD_ENV_FORCE, BUILD_ENVS_POST variables to make private changes to the
232# environment. These are combined with the two base ones as follows:
233# $(BUILD_ENVS_BASE_PRE) $(BUILD_ENVS_PRE) $(ENV_ENVS) $(BUILD_ENVS_BASE_POST) $(BUILD_ENVS_POST)
234#
235# BUILD_ENV_FORCE is used for changing the base compiler. Do *NOT* use
236# BUILD_ENV for that! BUILD_ENV_FORCE isn't used directly but in the setup
237# string above, but ENV_ENVS from the setup.[w]xyz.mk setup file is used.
238#
239
240# These strings are passed on to the BuildEnv.cmd script to setup the correct
241# shell environment.
242# TODO Should these be overridable by setup.[w]xyz.mak ? (kso)
243BUILD_ENVS_BASE_POST = toolkit452
244BUILD_ENVS_BASE_POST_16 =
245BUILD_ENVS_BASE_PRE = buildsetup emx~ cvs~
246BUILD_ENVS_BASE_PRE_16 = buildsetup emx~ cvs~ toolkit452 ddkbase
247
248
249# -----------------------------------------------------------------------------
250# Set forwarding flag.
251# If there is any change in the environment
252# OR the environment is uncertain (_BUILD_PROJECT not right) Then
253# Forward all target commands to the new shell environment we setup.
254#
255# (This have to be done early so the CC setup and it's like can check for
256# the flag. The rest of the forward stuff is at the bottom.)
257# -----------------------------------------------------------------------------
258!if "$(_BUILD_PROJECT)" != "$(BUILD_PROJECT)" || "$(BUILD_ENV)" != "$(BUILD_ENV_FORCE)" || "$(BUILD_ENVS_PRE)" != "" || "$(BUILD_ENVS_POST)" != ""
259BUILD_FORWARDING = 1
260!else
261BUILD_FORWARDING = 0
262!endif
263
264
265# -----------------------------------------------------------------------------
266# Include the setup.
267# First the default common tools setup is included.
268# The the environment specific setup.
269# -----------------------------------------------------------------------------
270
271!include $(PATH_MAKE)\setup.tools.mk
272
273MAKE_INCLUDE_SETUP = $(PATH_MAKE)\setup.$(SHT_TRGPLTFRM)$(SHT_BLDMD)$(SHT_BLDENV).mk
274!ifndef BUILD_QUIET
275! ifndef MAKEVER
276! if [$(ECHO) Including platform setup file $(CLRFIL)$(MAKE_INCLUDE_SETUP)$(CLRRST)]
277! endif
278! else
279$(ECHO) Including platform setup file $(CLRFIL)$(MAKE_INCLUDE_SETUP)$(CLRRST)
280! endif
281!endif
282!include $(MAKE_INCLUDE_SETUP)
283
284
285# -----------------------------------------------------------------------------
286# Verify the environment setups.
287# Uncomment this when configuring a new project.
288# When the setup is stable comment it out. (it's a waste of time!)
289# -----------------------------------------------------------------------------
290
291#
292#!ifndef ENV_NAME
293#!error No environment signature has been defined ($(NAME_COMPLETE))
294#!endif
295#
296#!ifndef MAKE_INCLUDE_SETUP
297#!error No setup to include has been determined (MAKE_INCLUDE_SETUP)
298#!endif
299#
300#!if "$(ENV_STATUS)" != "OK"
301#!error Environment $(ENV_NAME) does work yet (ENV_STATUS is not OK).
302#!endif
303#
304#!ifndef CC
305#!error Environment $(ENV_NAME) does not define variable (CC).
306#!endif
307#
308#!ifndef CC_FLAGS_EXE
309#!error Environment $(ENV_NAME) does not define variable (CC_FLAGS_EXE).
310#!endif
311#
312#!ifndef LINK
313#!error Environment $(ENV_NAME) does not define variable (LINK).
314#!endif
315#
316#!ifndef LINK_FLAGS_EXE
317#!error Environment $(ENV_NAME) does not define variable (LINK_FLAGS_EXE).
318#!endif
319#
320
321
322# -----------------------------------------------------------------------------
323# Forwarding processing.
324# -----------------------------------------------------------------------------
325!if $(BUILD_FORWARDING)
326
327MAKE_INCLUDE_PROCESS = $(PATH_MAKE)\process.forwarder.mak
328
329# Debug - find the reason for forwarding.
330#! if 0
331#! if "$(_BUILD_PROJECT)" != "$(BUILD_PROJECT)"
332#! if [echo debug - _BUILD_PROJECT: "$(_BUILD_PROJECT)" != "$(BUILD_PROJECT)"]
333#! endif
334#! endif
335#! if "$(BUILD_ENV)" != "$(BUILD_ENV_FORCE)"
336#! if [echo debug - BUILD_ENV: "$(BUILD_ENV)" != "$(BUILD_ENV_FORCE)"]
337#! endif
338#! endif
339#! if "$(BUILD_ENVS_PRE)" != ""
340#! if [echo debug - BUILD_ENVS_PRE: "$(BUILD_ENVS_PRE)" != ""]
341#! endif
342#! endif
343#! if "$(BUILD_ENVS_POST)" != ""
344#! if [echo debug - BUILD_ENVS_POST: "$(BUILD_ENVS_POST)" != ""]
345#! endif
346#! endif
347#! endif
348
349
350# set the secret _build_project env.var.
351# Note: This 'SET' operation doesn't allways work as designed.
352# Therefore we have a workaround in the forwarder statement which makes
353# sure that the internal variable is set. The problem seems to be to
354# create new environment variables.
355! if "$(_BUILD_PROJECT)" != "$(BUILD_PROJECT)"
356! if [SET _BUILD_PROJECT=$(BUILD_PROJECT)]
357! endif
358! endif
359
360# Compiler change or just environment change.
361! if "$(BUILD_ENV)" != "$(BUILD_ENV_FORCE)"
362MAKE_INCLUDE_SETUP_FORCE = $(PATH_MAKE)\setup.$(SHT_TRGPLTFRM)$(SHT_BLDMD)$(SHT_BLDENVFRC).mk
363! ifndef BUILD_QUIET
364! ifndef MAKEVER
365! if [$(ECHO) Including forced platform setup file $(CLRFIL)$(MAKE_INCLUDE_SETUP_FORCE)$(CLRRST)]
366! endif
367! else
368$(ECHO) Including forced platform setup file $(CLRFIL)$(MAKE_INCLUDE_SETUP_FORCE)$(CLRRST)
369! endif
370! endif
371! include $(MAKE_INCLUDE_SETUP_FORCE)
372! ifdef ENV_16BIT
373BUILD_ENVS_CHANGE = $(ENV_ENVS: =- )- $(BUILD_ENVS_BASE_PRE_16) $(BUILD_ENVS_PRE) $(ENV_ENVS_FORCE) $(BUILD_ENVS_BASE_POST_16) $(BUILD_ENVS_POST)
374! else
375BUILD_ENVS_CHANGE = $(ENV_ENVS: =- )- $(BUILD_ENVS_BASE_PRE) $(BUILD_ENVS_PRE) $(ENV_ENVS_FORCE) $(BUILD_ENVS_BASE_POST) $(BUILD_ENVS_POST)
376! endif
377! else
378! ifdef ENV_16BIT
379BUILD_ENVS_CHANGE = $(BUILD_ENVS_BASE_PRE_16) $(BUILD_ENVS_PRE) $(ENV_ENVS) $(BUILD_ENVS_BASE_POST_16) $(BUILD_ENVS_POST)
380! else
381BUILD_ENVS_CHANGE = $(BUILD_ENVS_BASE_PRE) $(BUILD_ENVS_PRE) $(ENV_ENVS) $(BUILD_ENVS_BASE_POST) $(BUILD_ENVS_POST)
382! endif
383! endif
384
385!endif # BUILD_FORWARDING
386
Note: See TracBrowser for help on using the repository browser.