source: branches/gcc-kmk/Config.kmk@ 21913

Last change on this file since 21913 was 21912, checked in by dmik, 14 years ago

Generate and install .SYM files for DLLs and EXEs.

This only works for the GXX3OMF tool so far.

  • Property svn:eol-style set to native
File size: 10.1 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# Tools
160#------------------------------------------------------------------------------
161
162#
163# Add support for Wine RC to the GCC compiler
164#
165TOOL_GXX3OMF_WRC = $(PATH_STAGE_BIN)/winerc.exe
166TOOL_GXX3OMF_WRCOBJSUFF = .orc$(TOOL_GXX3OMF_COBJSUFF)
167TOOL_GXX3OMF_WRCFLAGS =
168TOOL_GXX3OMF_COMPILE_WRC_OUTPUT = $(outbase).orc.s
169TOOL_GXX3OMF_COMPILE_WRC_DEPEND = $(TOOL_GXX3OMF_WRC)
170TOOL_GXX3OMF_COMPILE_WRC_DEPORD =
171define TOOL_GXX3OMF_COMPILE_WRC_CMDS
172 $(QUIET)$(TOOL_GXX3OMF_WRC) -s -I$(subst /,\\,$(abspath $(dir $(source))))\
173 $(flags) $(addprefix -I, $(subst /,\\,$(incs))) $(addprefix -D, $(defs))\
174 $(subst /,\\,$(abspath $(source))) \
175 -o $(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT)
176 $(QUIET)$(TOOL_GXX3OMF_CC) -E -I$(subst /,\\,$(abspath $(dir $(source))))\
177 $(addprefix -I, $(incs)) -I . $(addprefix -D, $(defs))\
178 -x c $(abspath $(source)) \
179 | $(DEP_PRE) -f -s -o $(dep) -t $(obj) -
180 $(subst $(source),$(TOOL_GXX3OMF_COMPILE_WRC_OUTPUT),\
181 $(subst $(flags),,$(TOOL_GXX3OMF_COMPILE_AS_CMDS)))
182endef
183
184#
185# Add support for MASM to the GCC compiler
186#
187TOOL_GXX3OMF_MASM = $(PATH_TOOL_ALP)
188TOOL_GXX3OMF_MASMFLAGS = -Mb
189TOOL_GXX3OMF_COMPILE_MASM_OUTPUT = $(outbase).lst
190TOOL_GXX3OMF_COMPILE_MASM_DEPEND =
191TOOL_GXX3OMF_COMPILE_MASM_DEPORD =
192define TOOL_GXX3OMF_COMPILE_MASM_CMDS
193 $(QUIET)$(TOOL_GXX3OMF_MASM) -D:__GNUC__ -D:__EMX__\
194 $(flags) $(addsuffix /,$(addprefix -I:, $(incs))) $(addprefix -D:, $(defs))\
195 $(source)\
196 -Fl:$(outbase).lst\
197 -Fd:$(dep)\
198 -Fo:$(obj)
199endef
200
201#------------------------------------------------------------------------------
202# Common libraries referenced by components
203#------------------------------------------------------------------------------
204
205#------------------------------------------------------------------------------
206# General Stuff
207#------------------------------------------------------------------------------
208
209KBUILD_UNIT_PATHS += $(PATH_ROOT)
210
211TEMPLATE_OdinCxx = Odin C/C++ sources
212TEMPLATE_OdinCxx_USES = Extra
213TEMPLATE_OdinCxx_TOOL = GXX3OMF
214TEMPLATE_OdinCxx_INCS = $(PATH_ROOT)/include/win $(PATH_ROOT)/include $(PATH_ROOT)/include/incl_gcc
215TEMPLATE_OdinCxx_DEFS = USE_OS2_TOOLKIT_HEADERS OS2EMX_PLAIN_CHAR \
216 __WIN32OS2__ __i386__
217TEMPLATE_OdinCxx_DEFS.debug = DEBUG
218TEMPLATE_OdinCxx_LDFLAGS = -Zlinker '"DISABLE 1121"'
219
220# generate .sym files but don't put them in a separate dir
221TEMPLATE_OdinCxx_LD_DEBUG = split
222TEMPLATE_OdinCxx_DEBUG_STAGE = nul
223
224TEMPLATE_OdinDLL = Odin DLL
225TEMPLATE_OdinDLL_EXTENDS = OdinCxx
226TEMPLATE_OdinDLL_EXTENDS_BY = appending
227TEMPLATE_OdinDLL_DEFS = $(TEMPLATE_OdinCxx_DEFS) __WINE__ COMCTL32UNDOC TCPV40HDRS __USE_LIBC_TCPIP
228TEMPLATE_OdinDLL_LIBS = $(PATH_STAGE_LIB)/odincrt.lib \
229 $(PATH_STAGE_LIB)/initdll.lib
230TEMPLATE_OdinDLL_LDFLAGS = -L$(PATH_GCC_LIB_TCPIPV4) # necessary for TCPV40HDRS
231TEMPLATE_OdinDLL_WRCFLAGS = -p_$(target)
232
233TEMPLATE_OdinSimpleDLL = Odin DLL with ordinary entry point
234TEMPLATE_OdinSimpleDLL_EXTENDS = OdinDLL
235TEMPLATE_OdinSimpleDLL_EXTENDS_BY = overriding
236TEMPLATE_OdinSimpleDLL_LIBS = $(PATH_STAGE_LIB)/dllentry.o $(TEMPLATE_OdinDLL_LIBS)
237TEMPLATE_OdinSimpleDLL_WRCFLAGS = -p_Resource
238
239TEMPLATE_OdinCRT = OdinCRT DLL
240TEMPLATE_OdinCRT_EXTENDS = OdinCxx
241TEMPLATE_OdinCRT_EXTENDS_BY = appending
242TEMPLATE_OdinCRT_DEFS = __WINE__
243TEMPLATE_OdinCRT_LIBS = $(PATH_STAGE_LIB)/initdll.lib
244
245TEMPLATE_OdinApp = Odin application
246TEMPLATE_OdinApp_EXTENDS = OdinCxx
247
248TEMPLATE_OdinTestApp = Odin application
249TEMPLATE_OdinTestApp_EXTENDS= OdinApp
250TEMPLATE_OdinTestApp_STAGE = tests/
251
252#------------------------------------------------------------------------------
253# GCC Stuff
254#------------------------------------------------------------------------------
255
256#------------------------------------------------------------------------------
257# Other Stuff
258#------------------------------------------------------------------------------
259
260#
261# Include a site-specific config for local overrides
262#
263ifndef LOCALCFG
264 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
265 ifneq ($(LOCALCFG),)
266 include $(LOCALCFG)
267 endif
268endif
269
270#------------------------------------------------------------------------------
271# Post-processing
272#------------------------------------------------------------------------------
273
274ifeq ($(PATH_TOOL_ALP),)
275ifneq ($(PATH_SDK_OS2TK4),)
276PATH_TOOL_ALP := $(PATH_SDK_OS2TK4)/bin/alp.exe
277else
278PATH_TOOL_ALP := alp.exe
279endif
280endif
281
282ifneq ($(PATH_SDK_OS2TK4),)
283#
284# We can't add Toolkit includes in _INCS (it will casuse then to be searched
285# before GCC headers and lead to conflicts), so use the environment variable.
286#
287C_INCLUDE_PATH := $(if $(C_INCLUDE_PATH),$(C_INCLUDE_PATH);)$(PATH_SDK_OS2TK4)/h
288CPLUS_INCLUDE_PATH := $(if $(CPLUS_INCLUDE_PATH),$(CPLUS_INCLUDE_PATH);)$(PATH_SDK_OS2TK4)/h
289endif
Note: See TracBrowser for help on using the repository browser.