source: trunk/kBuild/tools/GXX3OMF.kmk@ 3391

Last change on this file since 3391 was 3391, checked in by bird, 5 years ago

tools/GXX*: Added _PREFIX/_SUFFIX properties to all g++ tools. Some minor fixes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.5 KB
Line 
1# $Id: GXX3OMF.kmk 3391 2020-06-30 08:08:15Z bird $
2## @file
3# kBuild Tool Config - GCC v3 targeting OS/2 OMF, for building C++ code.
4#
5
6#
7# Copyright (c) 2004-2017 knut st. osmundsen <bird-kBuild-spam-xviiv@anduin.net>
8#
9# This file is part of kBuild.
10#
11# kBuild is free software; you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
13# the Free Software Foundation; either version 2 of the License, or
14# (at your option) any later version.
15#
16# kBuild is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with kBuild; if not, write to the Free Software
23# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24#
25#
26# As a special exception you are granted permission to include this file, via
27# the kmk include directive, as you wish without this in itself causing the
28# resulting makefile, program or whatever to be covered by the GPL license.
29# This exception does not however invalidate any other reasons why the makefile,
30# program, whatever should not be covered the GPL.
31#
32#
33
34TOOL_GXX3OMF := GCC v3 targeting OS/2 OMF, for building C++ code.
35
36# Tool Specific Properties
37ifndef TOOL_GXX3OMF_PREFIX
38 TOOL_GXX3OMF_PREFIX :=
39endif
40ifndef TOOL_GXX3OMF_SUFFIX
41 TOOL_GXX3OMF_SUFFIX := $(HOSTSUFF_EXE)
42endif
43TOOL_GXX3OMF_CC ?= $(TOOL_GXX3OMF_PREFIX)gcc$(TOOL_GXX3OMF_SUFFIX)
44TOOL_GXX3OMF_CXX ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
45TOOL_GXX3OMF_PCH ?= $(TOOL_GXX3OMF_CXX)
46TOOL_GXX3OMF_AS ?= $(TOOL_GXX3OMF_PREFIX)gcc$(TOOL_GXX3OMF_SUFFIX)
47TOOL_GXX3OMF_AR ?= $(TOOL_GXX3OMF_PREFIX)emxomfar$(TOOL_GXX3OMF_SUFFIX)
48TOOL_GXX3OMF_AR_IMP ?= $(TOOL_GXX3OMF_PREFIX)emximp$(TOOL_GXX3OMF_SUFFIX)
49TOOL_GXX3OMF_LD ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
50TOOL_GXX3OMF_LD_SYSMOD ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
51ifndef TOOL_GXX3OMF_LDFLAGS.$(KBUILD_TARGET)
52 TOOL_GXX3OMF_LDFLAGS.dll ?= -shared -Zdll
53else
54 TOOL_GXX3OMF_LDFLAGS.dll ?= $(TOOL_GXX3OMF_LDFLAGS.$(KBUILD_TARGET))
55endif
56TOOL_GXX3OMF_LDFLAGS.sysmod ?= -nostdlib
57TOOL_GXX3OMF_LD_MAP ?= -Zmap=$(1)
58TOOL_GXX3OMF_LD_SYSMOD_MAP ?= -Zmap=$(1)
59
60TOOL_GXX3OMF_RC_PREFIX ?= $(TOOL_GXX3OMF_PREFIX)
61TOOL_GXX3OMF_RC_SUFFIX ?= $(TOOL_GXX3OMF_SUFFIX)
62TOOL_GXX3OMF_RC = $(TOOL_GXX3OMF_RC_PREFIX)rc$(TOOL_GXX3OMF_RC_SUFFIX)
63
64ifdef SLKRUNS
65 TOOL_GXX3OMF_CC += -fmessage-length=0
66 TOOL_GXX3OMF_CXX += -fmessage-length=0
67endif
68
69# General Properties used by kBuild
70TOOL_GXX3OMF_COBJSUFF ?= .o
71TOOL_GXX3OMF_CFLAGS ?= -Zomf
72TOOL_GXX3OMF_CFLAGS.debug ?= -g
73TOOL_GXX3OMF_CFLAGS.profile ?= -O2 #-g -pg
74TOOL_GXX3OMF_CFLAGS.release ?= -O2
75TOOL_GXX3OMF_CINCS ?=
76TOOL_GXX3OMF_CDEFS ?=
77
78TOOL_GXX3OMF_CXXOBJSUFF ?= .o
79TOOL_GXX3OMF_CXXFLAGS ?= -Zomf
80TOOL_GXX3OMF_CXXFLAGS.debug ?= -g
81TOOL_GXX3OMF_CXXFLAGS.profile ?= -O2 #-g -pg
82TOOL_GXX3OMF_CXXFLAGS.release ?= -O2
83TOOL_GXX3OMF_CXXINCS ?=
84TOOL_GXX3OMF_CXXDEFS ?=
85
86TOOL_GXX3OMF_PCHOBJSUFF ?= .h.gch
87TOOL_GXX3OMF_PCHFLAGS ?= $(TOOL_GXX3OMF_CXXFLAGS)
88TOOL_GXX3OMF_PCHFLAGS.debug ?= $(TOOL_GXX3OMF_CXXFLAGS.debug)
89TOOL_GXX3OMF_PCHFLAGS.profile ?= $(TOOL_GXX3OMF_CXXFLAGS.profile)
90TOOL_GXX3OMF_PCHFLAGS.release ?= $(TOOL_GXX3OMF_CXXFLAGS.release)
91TOOL_GXX3OMF_PCHINCS ?= $(TOOL_GXX3OMF_CXXINCS)
92TOOL_GXX3OMF_PCHDEFS ?= $(TOOL_GXX3OMF_CXXDEFS)
93
94TOOL_GXX3OMF_ASFLAGS ?= -x assembler-with-cpp -Zomf
95TOOL_GXX3OMF_ASFLAGS.debug ?= -g
96TOOL_GXX3OMF_ASFLAGS.profile ?= -g
97TOOL_GXX3OMF_ASOBJSUFF ?= .obj
98
99TOOL_GXX3OMF_RCOBJSUFF ?= .res
100TOOL_GXX3OMF_RCFLAGS ?= -n
101TOOL_GXX3OMF_RCINCS ?= $(shell $(TOOL_GXX3OMF_CXX) -E -x c++ - 2>&1 < /dev/null \
102 | $(SED_EXT) -e "/search starts here/,/[Ee]nd of search list/!d" -e "/^ /!d")
103
104TOOL_GXX3OMF_ARFLAGS ?= cr
105TOOL_GXX3OMF_ARLIBSUFF ?= .lib
106
107TOOL_GXX3OMF_LDFLAGS ?= -Zomf
108TOOL_GXX3OMF_LDFLAGS.debug ?= -g
109TOOL_GXX3OMF_LDFLAGS.profile ?= -g
110
111
112## Compile C source.
113# @param $(target) Normalized main target name.
114# @param $(source) Source filename (relative).
115# @param $(obj) Object file name. This shall be (re)created by the compilation.
116# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
117# @param $(flags) Flags.
118# @param $(defs) Definitions. No -D or something.
119# @param $(incs) Includes. No -I or something.
120# @param $(dirdep) Directory creation dependency.
121# @param $(deps) Other dependencies.
122#
123# @param $(outbase) Output basename (full). Use this for list files and such.
124# @param $(objsuff) Object suffix.
125TOOL_GXX3OMF_COMPILE_C_DEPEND =
126TOOL_GXX3OMF_COMPILE_C_DEPORD =
127TOOL_GXX3OMF_COMPILE_C_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).i,)
128TOOL_GXX3OMF_COMPILE_C_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
129define TOOL_GXX3OMF_COMPILE_C_CMDS
130if "$(use_objcache)" != ""
131 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
132 --kObjCache-cpp $(outbase).i\
133 $(TOOL_GXX3OMF_CC) -E -o -\
134 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
135 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
136 $(abspath $(source))\
137 --kObjCache-cc $(obj)\
138 $(TOOL_GXX3OMF_CC) -c\
139 $(flags) -fpreprocessed -x c\
140 -o $(obj)\
141 -
142else
143 $(QUIET)$(TOOL_GXX3OMF_CC) -c\
144 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
145 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
146 -o $(obj)\
147 $(abspath $(source))
148endif
149 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
150endef
151
152
153## Compile C++ source.
154# @param $(target) Normalized main target name.
155# @param $(source) Source filename (relative).
156# @param $(obj) Object file name. This shall be (re)created by the compilation.
157# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
158# @param $(flags) Flags.
159# @param $(defs) Definitions. No -D or something.
160# @param $(incs) Includes. No -I or something.
161# @param $(dirdep) Directory creation dependency.
162# @param $(deps) Other dependencies.
163# @param $(outbase) Output basename (full). Use this for list files and such.
164# @param $(objsuff) Object suffix.
165TOOL_GXX3OMF_COMPILE_CXX_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).ii,)
166TOOL_GXX3OMF_COMPILE_CXX_DEPEND = $($(target)_1_GCC_PCH_FILE)
167TOOL_GXX3OMF_COMPILE_CXX_DEPORD =
168TOOL_GXX3OMF_COMPILE_CXX_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
169define TOOL_GXX3OMF_COMPILE_CXX_CMDS
170if "$(use_objcache)" != ""
171 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
172 --kObjCache-cpp $(outbase).ii\
173 $(TOOL_GXX3OMF_CXX) -E -o - $(if-expr defined($(target)_PCH_HDR)\
174 ,-fpch-preprocess -Winvalid-pch -I$($(target)_1_GCC_PCH_DIR) -include $(basename $($(target)_1_GCC_PCH_FILE)),)\
175 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
176 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
177 $(abspath $(source))\
178 --kObjCache-cc $(obj)\
179 $(TOOL_GXX3OMF_CXX) -c\
180 $(flags) -fpreprocessed $(if-expr defined($(target)_PCH_HDR),-fpch-preprocess,) -x c++\
181 -o $(obj)\
182 -
183else
184 $(QUIET)$(TOOL_GXX3OMF_CXX) -c\
185 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
186 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
187 -o $(obj) $(if-expr defined($(target)_PCH_HDR) \
188 ,-Winvalid-pch -include $(basename $($(target)_1_GCC_PCH_FILE)),) \
189 $(abspath $(source))
190endif
191 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
192endef
193
194
195## Precompile C++ header.
196# @param $(target) Normalized main target name.
197# @param $(source) Source filename (relative).
198# @param $(obj) Object file name. This shall be (re)created by the compilation.
199# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
200# @param $(flags) Flags.
201# @param $(defs) Definitions. No -D or something.
202# @param $(incs) Includes. No -I or something.
203# @param $(dirdep) Directory creation dependency.
204# @param $(deps) Other dependencies.
205# @param $(outbase) Output basename (full). Use this for list files and such.
206# @param $(objsuff) Object suffix.
207TOOL_GXX3OMF_COMPILE_PCH_OUTPUT = $($(target)_1_GCC_PCH_FILE)
208TOOL_GXX3OMF_COMPILE_PCH_DEPEND =
209TOOL_GXX3OMF_COMPILE_PCH_DEPORD = $($(target)_1_GCC_PCH_DIR)
210define TOOL_GXX3OMF_COMPILE_PCH_CMDS
211 $(QUIET)$(TOOL_GXX3OMF_PCH) -c\
212 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
213 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
214 -o $(obj)\
215 $(abspath $(source))
216 $(INSTALL) --hard-link-files-when-possible -m 0644 -- "$(obj)" "$($(target)_1_GCC_PCH_FILE)"
217 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
218endef
219
220
221## Compile Assembly source.
222# @param $(target) Normalized main target name.
223# @param $(source) Source filename (relative).
224# @param $(obj) Object file name. This shall be (re)created by the compilation.
225# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
226# @param $(flags) Flags.
227# @param $(defs) Definitions. No -D or something.
228# @param $(incs) Includes. No -I or something.
229# @param $(dirdep) Directory creation dependency.
230# @param $(deps) Other dependencies.
231# @param $(outbase) Output basename (full). Use this for list files and such.
232# @param $(objsuff) Object suffix.
233#
234TOOL_GXX3OMF_COMPILE_AS_OUTPUT =
235TOOL_GXX3OMF_COMPILE_AS_DEPEND =
236TOOL_GXX3OMF_COMPILE_AS_DEPORD =
237define TOOL_GXX3OMF_COMPILE_AS_CMDS
238 $(QUIET)$(TOOL_GXX3OMF_AS) -c\
239 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
240 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
241 -o $(obj)\
242 $(abspath $(source))
243 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
244endef
245
246
247## Compile resource source.
248# @param $(target) Normalized main target name.
249# @param $(source) Source filename (relative).
250# @param $(obj) Object file name. This shall be (re)created by the compilation.
251# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
252# @param $(flags) Flags.
253# @param $(defs) Definitions. No -D or something.
254# @param $(incs) Includes. No -I or something.
255# @param $(dirdep) Directory creation dependency.
256# @param $(deps) Other dependencies.
257#
258# @param $(outbase) Output basename (full). Use this for list files and such.
259# @param $(objsuff) Object suffix.
260TOOL_GXX3OMF_COMPILE_RC_OUTPUT =
261TOOL_GXX3OMF_COMPILE_RC_DEPEND =
262TOOL_GXX3OMF_COMPILE_RC_DEPORD =
263define TOOL_GXX3OMF_COMPILE_RC_CMDS
264 $(QUIET)$(REDIRECT) -E 'INCLUDE=' -- $(TOOL_GXX3OMF_RC) -r \
265 $(flags) $(addprefix -i, $(subst /,\\,$(subst /@unixroot,$(UNIXROOT),$(incs)))) $(addprefix -d, $(defs))\
266 $(subst /,\\,$(abspath $(source))) \
267 $(obj)
268endef
269
270
271## Link library
272# @param $(target) Normalized main target name.
273# @param $(out) Library name.
274# @param $(objs) Object files to put in the library.
275# @param $(flags) Flags.
276# @param $(dirdep) Directory creation dependency.
277# @param $(deps) Other dependencies.
278# @param $(othersrc) Unhandled sources.
279#
280# @param $(outbase) Output basename (full). Use this for list files and such.
281TOOL_GXX3OMF_LINK_LIBRARY_OUTPUT = $(outbase).rsp
282TOOL_GXX3OMF_LINK_LIBRARY_DEPEND = $(othersrc)
283TOOL_GXX3OMF_LINK_LIBRARY_DEPORD =
284define TOOL_GXX3OMF_LINK_LIBRARY_CMDS
285 $(if $(filter %.def %.imp %.dll,$(othersrc))\
286 ,$(QUIET)$(APPEND) -n $(outbase).rsp $(filter %.def %.imp %.dll,$(othersrc))\
287 $(NL)$(TAB)$(QUIET)$(QUIET)$(TOOL_GXX3OMF_AR_IMP) -o $(out) @$(outbase).rsp\
288 $(NL)$(TAB)$(QUIET)$(RM) -f $(outbase).rsp)
289 $(QUIET)$(APPEND) -n $(outbase).rsp $(flags) $(out) $(filter-out %.h.gch,$(objs)) $(filter-out %.def %.imp %.dll,$(othersrc))
290 $(QUIET)$(TOOL_GXX3OMF_AR) @$(outbase).rsp
291endef
292
293
294## Link program
295# @param $(target) Normalized main target name.
296# @param $(out) Program name.
297# @param $(objs) Object files to link together.
298# @param $(libs) Libraries to search.
299# @param $(libpath) Library search paths.
300# @param $(flags) Flags.
301# @param $(dirdep) Directory creation dependency.
302# @param $(deps) Other dependencies.
303# @param $(othersrc) Unhandled sources.
304# @param $(custom_pre) Custom step invoked before linking.
305# @param $(custom_post) Custom step invoked after linking.
306#
307# @param $(outbase) Output basename (full). Use this for list files and such.
308TOOL_GXX3OMF_LINK_PROGRAM_OUTPUT = $(outbase).map $(outbase).rsp
309TOOL_GXX3OMF_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
310TOOL_GXX3OMF_LINK_PROGRAM_DEPORD =
311define TOOL_GXX3OMF_LINK_PROGRAM_CMDS
312 $(QUIET)$(APPEND) -n $(outbase).rsp\
313 $(flags)\
314 -o $(out)\
315 $(filter-out %.h.gch,$(objs))\
316 $(foreach p,$(libpath), -L$(p))\
317 $(othersrc)\
318 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
319 -Zmap=$(outbase).map
320 $(QUIET)$(TOOL_GXX3OMF_LD) @$(outbase).rsp
321endef
322
323
324## Link DLL
325# @param $(target) Normalized main target name.
326# @param $(out) Program name.
327# @param $(objs) Object files to link together.
328# @param $(libs) Libraries to search.
329# @param $(libpath) Library search paths.
330# @param $(flags) Flags.
331# @param $(dirdep) Directory creation dependency.
332# @param $(deps) Other dependencies.
333# @param $(othersrc) Unhandled sources.
334# @param $(custom_pre) Custom step invoked before linking.
335# @param $(custom_post) Custom step invoked after linking.
336#
337# @param $(outbase) Output basename (full). Use this for list files and such.
338TOOL_GXX3OMF_LINK_DLL_OUTPUT = $(outbase).map $(outbase).rsp
339TOOL_GXX3OMF_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
340TOOL_GXX3OMF_LINK_DLL_DEPORD =
341define TOOL_GXX3OMF_LINK_DLL_CMDS
342 $(QUIET)$(APPEND) -n $(outbase).rsp\
343 $(TOOL_GXX3OMF_LDFLAGS.dll)\
344 $(flags)\
345 -o $(out)\
346 $(filter-out %.h.gch,$(objs))\
347 $(foreach p,$(libpath), -L$(p))\
348 $(othersrc)\
349 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
350 -Zmap=$(outbase).map
351 $(QUIET)$(TOOL_GXX3OMF_LD) @$(outbase).rsp
352endef
353
354
355## Link system module (windows aka driver, linux aka kernel module)
356# @param $(target) Normalized main target name.
357# @param $(out) System module name.
358# @param $(objs) Object files to link together.
359# @param $(libs) Libraries to search.
360# @param $(libpath) Library search paths.
361# @param $(flags) Flags.
362# @param $(dirdep) Directory creation dependency.
363# @param $(deps) Other dependencies.
364# @param $(othersrc) Unhandled sources.
365# @param $(custom_pre) Custom step invoked before linking.
366# @param $(custom_post) Custom step invoked after linking.
367#
368# @param $(outbase) Output basename (full). Use this for list files and such.
369TOOL_GXX3OMF_LINK_SYSMOD_OUTPUT = $(outbase).map $(outbase).rsp
370TOOL_GXX3OMF_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
371TOOL_GXX3OMF_LINK_SYSMOD_DEPORD =
372define TOOL_GXX3OMF_LINK_SYSMOD_CMDS
373 $(QUIET)$(APPEND) -n $(outbase).rsp\
374 $(TOOL_GXX3OMF_LDFLAGS.sysmod)\
375 $(flags)\
376 -o $(out)\
377 $(filter-out %.h.gch,$(objs))\
378 $(foreach p,$(libpath), -L$(p))\
379 $(othersrc)\
380 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
381 -Zmap=$(outbase).map
382 $(QUIET)$(TOOL_GXX3OMF_LD_SYSMOD) @$(outbase).rsp
383endef
384
Note: See TracBrowser for help on using the repository browser.