source: branches/swt/Config.kmk@ 22145

Last change on this file since 22145 was 22095, checked in by rousseau, 10 years ago

Correct test for Console Debugging

  • Property svn:eol-style set to native
File size: 12.5 KB
Line 
1## @file
2# Global Project Configuration File
3#
4
5#------------------------------------------------------------------------------
6# Global definitions
7#------------------------------------------------------------------------------
8
9#
10# @todo kBuild forgets to do that on OS/2
11#
12INST_DLL = bin/
13
14#
15# Watcom Linker is required because of some Watcom-specific directives (used
16# e.g. to compensate for the lack of SEGMENTS support in .DEF in emxomfld, see
17# svn.netlabs.org/libc/ticket/252). Besides, it's more stable than the outdated
18# IBM linker.
19#
20ifn1of ($(EMXOMFLD_TYPE),WLINK wlink)
21$(error You must use Watcom Linker and set EMXOMFLD_TYPE to WLINK (it's now $(EMXOMFLD_TYPE)))
22endif
23
24#
25# TCPV40HDRS requires an alternative libsocket.lib located in a separate directory.
26# Try to deduce it.
27#
28PATH_GCC_LIB_TCPIPV4 := $(dir $(shell gcc -print-file-name=libsocket.lib))/tcpipv4
29ifeq ($(PATH_GCC_LIB_TCPIPV4),/tcpipv4)
30$(error Could not detect the GCC TCPIPV4 socket library path.)
31endif
32
33##
34# Defines an import library target for the given DLL target.
35#
36# @param 1 DLL target name.
37# @param 2 .def file (defaults to <1>.def).
38# @param 3 .def file for debug (defaults to <2>).
39# @param 4 list of object files containing additional exports.
40# @param 5 non-empty to disable .def post-processing with ImpDef.
41#
42odin_implib = $(evalcall odin_implib_common,$(1),$(2),$(3),$(4),$(5))
43
44define odin_implib_common
45 local target := $(1)
46 local def := $(abspath $(PATH_SUB_CURRENT)/$(if $(2),$(2),$(1).def))
47 local def_exp := $(notdir $(basename $(def))).exp.def
48ifneq ($(3),)
49 #local def_debug := $(abspath $(PATH_SUB_CURRENT)/$(3))
50 #local def_exp_debug := $(notdir $(basename $(def_debug))).exp.def
51endif
52 local obj_list := $(4)
53 local do_def_exp := $(if $(5),,1)
54 $(eval $(def_odin_implib))
55endef
56
57define def_odin_implib
58 LIBRARIES += $(target)_imp
59 $(target)_imp_TEMPLATE = OdinCxx
60 $(target)_imp_NAME = $(target)
61 $$$$($(target)_imp_0_OUTDIR)/$(def_exp): $(def) \
62 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
63 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
64 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
65 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
66ifneq ($(do_def_exp),)
67 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def) $$@
68else
69 $(QUIET2)$(CP) $(def) $$@
70endif
71ifneq ($(obj_list),)
72 $(QUIET2)emxexp.exe \
73 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
74 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
75endif
76ifeq ($(def_exp_debug),)
77 ifneq ($(do_def_exp)$(obj_list),)
78 $(target)_imp_SOURCES = $$($(target)_imp_0_OUTDIR)/$(def_exp)
79 $(target)_imp_CLEAN += $$($(target)_imp_0_OUTDIR)/$(def_exp)
80 else
81 $(target)_imp_SOURCES = $(def)
82 endif
83else
84 ifneq ($(do_def_exp)$(obj_list),)
85 $(target)_imp_SOURCES.release = $$($(target)_imp_0_OUTDIR)/$(def_exp)
86 $(target)_imp_CLEAN.release += $$($(target)_imp_0_OUTDIR)/$(def_exp)
87 $$$$($(target)_imp_0_OUTDIR)/$(def_exp_debug): $(def_debug) \
88 $(addsuffix $$$$(TOOL_GXX3OMF_COBJSUFF), \
89 $(addprefix $$$$($(target)_0_OUTDIR)/,$(obj_list))) \
90 $$(PATH_STAGE_BIN)/impdef.exe | $$$$(dir $$$$@)
91 %$$(call MSG_TOOL,impdef,$(target)_imp,$(abspath $$<),$$@)
92ifneq ($(do_def_exp),)
93 $(QUIET2)$$(PATH_STAGE_BIN)/impdef.exe $(def_debug) $$@
94else
95 $(QUIET2)$(CP) $(def_debug) $$@
96endif
97ifneq ($(obj_list),)
98 $(QUIET2)emxexp.exe \
99 $(addsuffix $$(TOOL_GXX3OMF_COBJSUFF), \
100 $(addprefix $$($(target)_0_OUTDIR)/,$(obj_list))) >> $$@
101endif
102 $(target)_imp_SOURCES.debug = $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
103 $(target)_imp_CLEAN.debug += $$($(target)_imp_0_OUTDIR)/$(def_exp_debug)
104 else
105 $(target)_imp_SOURCES.release = $(def)
106 $(target)_imp_SOURCES.debug = $(def_debug)
107 endif
108endif
109endef
110
111##
112# Shortcut to $(call odin_implib,<1>,<2>,<3>,<4>,1) used to disable .def file
113# post-processing with the ImpDef tool.
114#
115# @param 1 DLL target name.
116# @param 2 .def file (defaults to <1>.def).
117# @param 3 .def file for debug (defaults to <2>).
118# @param 4 list of object files containing additional exports.
119#
120odin_implib_no_expdef = $(call odin_implib,$(1),$(2),$(3),$(4),1)
121
122##
123# Shortcut to $(call odin_implib, <1>,<1>.def,<1>dbg.def,<2>).
124#
125# @param 1 DLL target name.
126# @param 2 list of object files containing additional exports.
127#
128odin_implib_2 = $(call odin_implib,$(1),$(1).def,$(1)dbg.def,$(2))
129
130##
131# Shortcut to $(call odin_implib_no_expdef,<1>,<1>.def,<1>dbg.def,<2>).
132#
133# @param 1 DLL target name.
134# @param 2 list of object files containing additional exports.
135#
136odin_implib_2_no_expdef = $(call odin_implib_no_expdef,$(1),$(1).def,$(1)dbg.def,$(2))
137
138#
139# Handler for Wine RC (.orc) source files
140#
141KBUILD_SRC_HANDLERS += .orc:def_src_handler_wrc
142define def_src_handler_wrc
143local type := WRC
144 $(kb-src-one 2)
145endef
146PROPS_ACCUMULATE_R += WRCFLAGS
147
148#
149# Override handler for .asm files to compile them with the MASM-compilant tool
150#
151KBUILD_SRC_HANDLERS := .asm:def_src_handler_masm $(KBUILD_SRC_HANDLERS)
152define def_src_handler_masm
153local type := $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)
154 $(kb-src-one 2)
155endef
156PROPS_ACCUMULATE_R += $(if $(TOOL_$(tool)_COMPILE_MASM_CMDS),MASM,AS)FLAGS
157
158#
159# Handler for .def files to add bldlevel info to them
160#
161define def_src_handler_def
162local type := DEF
163 $(kb-src-one 2)
164#.NOTPARALLEL: $(obj) # BldLevelInf.cmd can't open files in parallel
165endef
166
167#------------------------------------------------------------------------------
168# Tools
169#------------------------------------------------------------------------------
170
171#
172# Add support for Wine RC to the GCC compiler
173#
174TOOL_GXX3OMF_WRC = $(PATH_STAGE_BIN)/winerc.exe
175TOOL_GXX3OMF_WRCOBJSUFF = .orc$(TOOL_GXX3OMF_COBJSUFF)
176TOOL_GXX3OMF_WRCFLAGS =
177TOOL_GXX3OMF_COMPILE_WRC_OUTPUT = $(outbase).orc.s
178TOOL_GXX3OMF_COMPILE_WRC_DEPEND = $(TOOL_GXX3OMF_WRC)
179TOOL_GXX3OMF_COMPILE_WRC_DEPORD =
180define TOOL_GXX3OMF_COMPILE_WRC_CMDS
181 $(QUIET)$(TOOL_GXX3OMF_WRC) -s -I$(subst /,\\,$(abspath $(dir $(source))))\
182 $(flags) $(addprefix -I, $(subst /,\\,$(incs))) $(addprefix -D, $(defs))\
183 $(subst /,\\,$(abspath $(source))) \
184 -o $(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT)
185 $(QUIET)$(TOOL_GXX3OMF_CC) -E -I$(subst /,\\,$(abspath $(dir $(source))))\
186 $(addprefix -I, $(incs)) -I . $(addprefix -D, $(defs))\
187 -x c $(abspath $(source)) \
188 | $(DEP_PRE) -f -s -o $(dep) -t $(obj) -
189 $(subst $(source),$(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT),\
190 $(subst $(flags),,$(TOOL_GXX3OMF_COMPILE_AS_CMDS)))
191endef
192
193#
194# Add support for MASM to the GCC compiler
195#
196TOOL_GXX3OMF_COMPILE_MASM_OUTPUT = $(outbase).lst
197TOOL_GXX3OMF_COMPILE_MASM_DEPEND =
198TOOL_GXX3OMF_COMPILE_MASM_DEPORD =
199
200ifn1of ($(USE_JWASM),1 y yes Y Yes t true T True)
201# Alp
202# Can crash when environment is too large.
203TOOL_GXX3OMF_MASM = $(PATH_TOOL_ALP)
204TOOL_GXX3OMF_MASMFLAGS = -Mb
205define TOOL_GXX3OMF_COMPILE_MASM_CMDS
206 $(QUIET)$(TOOL_GXX3OMF_MASM) -D:__GNUC__ -D:__EMX__\
207 $(flags) $(addsuffix /,$(addprefix -I:, $(incs))) $(addprefix -D:, $(defs))\
208 $(source)\
209 -Fl:$(outbase).lst\
210 -Fd:$(dep)\
211 -Fo:$(obj)
212endef
213else
214# JWasm
215# Source needs to be last otherwise -Fo drops path. (v2.06)
216$(info Note: Using JWasm as the assembler)
217TOOL_GXX3OMF_MASM = $(PATH_TOOL_JWASM)
218TOOL_GXX3OMF_MASMFLAGS = -q -9
219define TOOL_GXX3OMF_COMPILE_MASM_CMDS
220 $(QUIET)$(TOOL_GXX3OMF_MASM) -D__GNUC__ -D__EMX__\
221 $(flags) $(addsuffix /,$(addprefix -I, $(incs))) $(addprefix -D, $(defs))\
222 -Fl$(outbase).lst\
223 -Fw$(outbase).err\
224 -Fo$(obj)\
225 $(source)
226endef
227endif
228
229#
230# Add support for DEF file bldlevel info generator to the GCC compiler
231#
232TOOL_GXX3OMF_DEF = $(PATH_ROOT)/tools/bin/BldLevelInf.cmd
233TOOL_GXX3OMF_DEFOBJSUFF = .bldlevel.def
234TOOL_GXX3OMF_COMPILE_DEF_OUTPUT =
235TOOL_GXX3OMF_COMPILE_DEF_DEPEND = $(PATH_ROOT)/include/odinbuild.h
236TOOL_GXX3OMF_COMPILE_DEF_DEPORD =
237define TOOL_GXX3OMF_COMPILE_DEF_CMDS
238 $(QUIET)cmd /c 'set BUILD_QUIET=1 && $(TOOL_GXX3OMF_DEF)\
239 $(source) $(outbase).bldlevel.def\
240 -R"$(source)"\
241 -V"#define=ODIN32_VERSION,$(subst /,/,$(PATH_ROOT)/include/odinbuild.h)"\
242 -M"#define=ODIN32_BUILD_NR,$(subst /,/,$(PATH_ROOT)/include/odinbuild.h)"'
243endef
244
245#------------------------------------------------------------------------------
246# Common libraries referenced by components
247#------------------------------------------------------------------------------
248
249#------------------------------------------------------------------------------
250# General Stuff
251#------------------------------------------------------------------------------
252
253KBUILD_UNIT_PATHS += $(PATH_ROOT)
254
255TEMPLATE_OdinCxx = Odin C/C++ sources
256TEMPLATE_OdinCxx_USES = Extra
257TEMPLATE_OdinCxx_TOOL = GXX3OMF
258TEMPLATE_OdinCxx_INCS = $(PATH_ROOT)/include/win $(PATH_ROOT)/include $(PATH_ROOT)/include/incl_gcc
259TEMPLATE_OdinCxx_DEFS = USE_OS2_TOOLKIT_HEADERS OS2EMX_PLAIN_CHAR \
260 __WIN32OS2__ __i386__
261TEMPLATE_OdinCxx_DEFS.debug = DEBUG
262TEMPLATE_OdinCxx_LDFLAGS = -Zlinker '"DISABLE 1121"'
263
264# generate .sym files but don't put them in a separate dir
265TEMPLATE_OdinCxx_LD_DEBUG = split
266TEMPLATE_OdinCxx_DEBUG_STAGE = nul
267
268TEMPLATE_OdinBin = Odin DLL or EXE
269TEMPLATE_OdinBin_EXTENDS = OdinCxx
270
271# Override DEF handler to add bldlevel info to .DEF files
272TEMPLATE_OdinBin_SRC_HANDLERS = .def:def_src_handler_def
273
274TEMPLATE_OdinDLL = Odin DLL
275TEMPLATE_OdinDLL_EXTENDS = OdinBin
276TEMPLATE_OdinDLL_EXTENDS_BY = appending
277TEMPLATE_OdinDLL_DEFS = $(TEMPLATE_OdinCxx_DEFS) __WINE__ COMCTL32UNDOC TCPV40HDRS __USE_LIBC_TCPIP
278TEMPLATE_OdinDLL_LIBS = $(PATH_STAGE_LIB)/odincrt.lib \
279 $(PATH_STAGE_LIB)/initdll.lib
280TEMPLATE_OdinDLL_LDFLAGS = -L$(PATH_GCC_LIB_TCPIPV4) # necessary for TCPV40HDRS
281TEMPLATE_OdinDLL_LDFLAGS += KMK_NOIMPLIB # disable automatic implib
282TEMPLATE_OdinDLL_WRCFLAGS = -p_$(target)
283
284TEMPLATE_OdinSimpleDLL = Odin DLL with ordinary entry point
285TEMPLATE_OdinSimpleDLL_EXTENDS = OdinDLL
286TEMPLATE_OdinSimpleDLL_EXTENDS_BY = overriding
287TEMPLATE_OdinSimpleDLL_LIBS = $(PATH_STAGE_LIB)/dllentry.o $(TEMPLATE_OdinDLL_LIBS)
288TEMPLATE_OdinSimpleDLL_WRCFLAGS = -p_Resource
289
290TEMPLATE_OdinCRT = OdinCRT DLL
291TEMPLATE_OdinCRT_EXTENDS = OdinBin
292TEMPLATE_OdinCRT_EXTENDS_BY = appending
293TEMPLATE_OdinCRT_DEFS = __WINE__
294TEMPLATE_OdinCRT_LIBS = $(PATH_STAGE_LIB)/initdll.lib
295TEMPLATE_OdinCRT_LDFLAGS += KMK_NOIMPLIB # disable automatic implib
296
297TEMPLATE_OdinApp = Odin application
298TEMPLATE_OdinApp_EXTENDS = OdinBin
299
300TEMPLATE_OdinTestApp = Odin application
301TEMPLATE_OdinTestApp_EXTENDS= OdinApp
302TEMPLATE_OdinTestApp_STAGE = tests/
303
304#------------------------------------------------------------------------------
305# GCC Stuff
306#------------------------------------------------------------------------------
307
308#------------------------------------------------------------------------------
309# Other Stuff
310#------------------------------------------------------------------------------
311
312#
313# Include a site-specific config for local overrides
314#
315ifndef LOCALCFG
316 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
317 ifneq ($(LOCALCFG),)
318 include $(LOCALCFG)
319 endif
320endif
321
322#------------------------------------------------------------------------------
323# Post-processing
324#------------------------------------------------------------------------------
325
326ifeq ($(PATH_TOOL_ALP),)
327ifneq ($(PATH_SDK_OS2TK4),)
328PATH_TOOL_ALP := $(PATH_SDK_OS2TK4)/bin/alp.exe
329else
330PATH_TOOL_ALP := alp.exe
331endif
332endif
333
334ifeq ($(PATH_TOOL_JWASM),)
335PATH_TOOL_JWASM := jwasm.exe
336endif
337
338ifneq ($(PATH_SDK_OS2TK4),)
339#
340# We can't add Toolkit includes in _INCS (it will cause them to be searched
341# before GCC headers and lead to conflicts), so use -idirafter.
342#
343TEMPLATE_OdinCxx_CFLAGS += -idirafter $(PATH_SDK_OS2TK4)/h
344TEMPLATE_OdinCxx_CXXFLAGS += -idirafter $(PATH_SDK_OS2TK4)/h
345endif
346
347#
348# If DBG_CON is defined, jam it in to globally enable simple console logging.
349# If not, then per source console logging can be enabled by defining DBG_CON
350# _before_ the inclusion of the <misc.h> header.
351#
352ifneq ($(flavor DBG_CON),undefined)
353TEMPLATE_OdinCxx_CFLAGS += -DDBG_CON
354TEMPLATE_OdinCxx_CXXFLAGS += -DDBG_CON
355endif
Note: See TracBrowser for help on using the repository browser.