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

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

tools/*GCC|GXX*: More prefix/suffix stuff. Separate for gcc/g++, binutils and other stuff.

  • 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 3393 2020-06-30 17:11:42Z 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_PREFIX2 ?=
44TOOL_GXX3OMF_SUFFIX2 ?= $(HOSTSUFF_EXE)
45TOOL_GXX3OMF_PREFIX3 ?=
46TOOL_GXX3OMF_SUFFIX3 ?= $(HOSTSUFF_EXE)
47TOOL_GXX3OMF_CC ?= $(TOOL_GXX3OMF_PREFIX)gcc$(TOOL_GXX3OMF_SUFFIX)
48TOOL_GXX3OMF_CXX ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
49TOOL_GXX3OMF_PCH ?= $(TOOL_GXX3OMF_CXX)
50TOOL_GXX3OMF_AS ?= $(TOOL_GXX3OMF_PREFIX)gcc$(TOOL_GXX3OMF_SUFFIX)
51TOOL_GXX3OMF_AR ?= $(TOOL_GXX3OMF_PREFIX2)emxomfar$(TOOL_GXX3OMF_SUFFIX2)
52TOOL_GXX3OMF_AR_IMP ?= $(TOOL_GXX3OMF_PREFIX2)emximp$(TOOL_GXX3OMF_SUFFIX2)
53TOOL_GXX3OMF_LD ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
54TOOL_GXX3OMF_LD_SYSMOD ?= $(TOOL_GXX3OMF_PREFIX)g++$(TOOL_GXX3OMF_SUFFIX)
55ifndef TOOL_GXX3OMF_LDFLAGS.$(KBUILD_TARGET)
56 TOOL_GXX3OMF_LDFLAGS.dll ?= -shared -Zdll
57else
58 TOOL_GXX3OMF_LDFLAGS.dll ?= $(TOOL_GXX3OMF_LDFLAGS.$(KBUILD_TARGET))
59endif
60TOOL_GXX3OMF_LDFLAGS.sysmod ?= -nostdlib
61TOOL_GXX3OMF_LD_MAP ?= -Zmap=$(1)
62TOOL_GXX3OMF_LD_SYSMOD_MAP ?= -Zmap=$(1)
63
64TOOL_GXX3OMF_RC = $(TOOL_GXX3OMF_PREFIX3)rc$(TOOL_GXX3OMF_SUFFIX3)
65
66ifdef SLKRUNS
67 TOOL_GXX3OMF_CC += -fmessage-length=0
68 TOOL_GXX3OMF_CXX += -fmessage-length=0
69endif
70
71# General Properties used by kBuild
72TOOL_GXX3OMF_COBJSUFF ?= .o
73TOOL_GXX3OMF_CFLAGS ?= -Zomf
74TOOL_GXX3OMF_CFLAGS.debug ?= -g
75TOOL_GXX3OMF_CFLAGS.profile ?= -O2 #-g -pg
76TOOL_GXX3OMF_CFLAGS.release ?= -O2
77TOOL_GXX3OMF_CINCS ?=
78TOOL_GXX3OMF_CDEFS ?=
79
80TOOL_GXX3OMF_CXXOBJSUFF ?= .o
81TOOL_GXX3OMF_CXXFLAGS ?= -Zomf
82TOOL_GXX3OMF_CXXFLAGS.debug ?= -g
83TOOL_GXX3OMF_CXXFLAGS.profile ?= -O2 #-g -pg
84TOOL_GXX3OMF_CXXFLAGS.release ?= -O2
85TOOL_GXX3OMF_CXXINCS ?=
86TOOL_GXX3OMF_CXXDEFS ?=
87
88TOOL_GXX3OMF_PCHOBJSUFF ?= .h.gch
89TOOL_GXX3OMF_PCHFLAGS ?= $(TOOL_GXX3OMF_CXXFLAGS)
90TOOL_GXX3OMF_PCHFLAGS.debug ?= $(TOOL_GXX3OMF_CXXFLAGS.debug)
91TOOL_GXX3OMF_PCHFLAGS.profile ?= $(TOOL_GXX3OMF_CXXFLAGS.profile)
92TOOL_GXX3OMF_PCHFLAGS.release ?= $(TOOL_GXX3OMF_CXXFLAGS.release)
93TOOL_GXX3OMF_PCHINCS ?= $(TOOL_GXX3OMF_CXXINCS)
94TOOL_GXX3OMF_PCHDEFS ?= $(TOOL_GXX3OMF_CXXDEFS)
95
96TOOL_GXX3OMF_ASFLAGS ?= -x assembler-with-cpp -Zomf
97TOOL_GXX3OMF_ASFLAGS.debug ?= -g
98TOOL_GXX3OMF_ASFLAGS.profile ?= -g
99TOOL_GXX3OMF_ASOBJSUFF ?= .obj
100
101TOOL_GXX3OMF_RCOBJSUFF ?= .res
102TOOL_GXX3OMF_RCFLAGS ?= -n
103TOOL_GXX3OMF_RCINCS ?= $(shell $(TOOL_GXX3OMF_CXX) -E -x c++ - 2>&1 < /dev/null \
104 | $(SED_EXT) -e "/search starts here/,/[Ee]nd of search list/!d" -e "/^ /!d")
105
106TOOL_GXX3OMF_ARFLAGS ?= cr
107TOOL_GXX3OMF_ARLIBSUFF ?= .lib
108
109TOOL_GXX3OMF_LDFLAGS ?= -Zomf
110TOOL_GXX3OMF_LDFLAGS.debug ?= -g
111TOOL_GXX3OMF_LDFLAGS.profile ?= -g
112
113
114## Compile C source.
115# @param $(target) Normalized main target name.
116# @param $(source) Source filename (relative).
117# @param $(obj) Object file name. This shall be (re)created by the compilation.
118# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
119# @param $(flags) Flags.
120# @param $(defs) Definitions. No -D or something.
121# @param $(incs) Includes. No -I or something.
122# @param $(dirdep) Directory creation dependency.
123# @param $(deps) Other dependencies.
124#
125# @param $(outbase) Output basename (full). Use this for list files and such.
126# @param $(objsuff) Object suffix.
127TOOL_GXX3OMF_COMPILE_C_DEPEND =
128TOOL_GXX3OMF_COMPILE_C_DEPORD =
129TOOL_GXX3OMF_COMPILE_C_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).i,)
130TOOL_GXX3OMF_COMPILE_C_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
131define TOOL_GXX3OMF_COMPILE_C_CMDS
132if "$(use_objcache)" != ""
133 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
134 --kObjCache-cpp $(outbase).i\
135 $(TOOL_GXX3OMF_CC) -E -o -\
136 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
137 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
138 $(abspath $(source))\
139 --kObjCache-cc $(obj)\
140 $(TOOL_GXX3OMF_CC) -c\
141 $(flags) -fpreprocessed -x c\
142 -o $(obj)\
143 -
144else
145 $(QUIET)$(TOOL_GXX3OMF_CC) -c\
146 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
147 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
148 -o $(obj)\
149 $(abspath $(source))
150endif
151 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
152endef
153
154
155## Compile C++ source.
156# @param $(target) Normalized main target name.
157# @param $(source) Source filename (relative).
158# @param $(obj) Object file name. This shall be (re)created by the compilation.
159# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
160# @param $(flags) Flags.
161# @param $(defs) Definitions. No -D or something.
162# @param $(incs) Includes. No -I or something.
163# @param $(dirdep) Directory creation dependency.
164# @param $(deps) Other dependencies.
165# @param $(outbase) Output basename (full). Use this for list files and such.
166# @param $(objsuff) Object suffix.
167TOOL_GXX3OMF_COMPILE_CXX_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).ii,)
168TOOL_GXX3OMF_COMPILE_CXX_DEPEND = $($(target)_1_GCC_PCH_FILE)
169TOOL_GXX3OMF_COMPILE_CXX_DEPORD =
170TOOL_GXX3OMF_COMPILE_CXX_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
171define TOOL_GXX3OMF_COMPILE_CXX_CMDS
172if "$(use_objcache)" != ""
173 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
174 --kObjCache-cpp $(outbase).ii\
175 $(TOOL_GXX3OMF_CXX) -E -o - $(if-expr defined($(target)_PCH_HDR)\
176 ,-fpch-preprocess -Winvalid-pch -I$($(target)_1_GCC_PCH_DIR) -include $(basename $($(target)_1_GCC_PCH_FILE)),)\
177 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
178 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
179 $(abspath $(source))\
180 --kObjCache-cc $(obj)\
181 $(TOOL_GXX3OMF_CXX) -c\
182 $(flags) -fpreprocessed $(if-expr defined($(target)_PCH_HDR),-fpch-preprocess,) -x c++\
183 -o $(obj)\
184 -
185else
186 $(QUIET)$(TOOL_GXX3OMF_CXX) -c\
187 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
188 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
189 -o $(obj) $(if-expr defined($(target)_PCH_HDR) \
190 ,-Winvalid-pch -include $(basename $($(target)_1_GCC_PCH_FILE)),) \
191 $(abspath $(source))
192endif
193 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
194endef
195
196
197## Precompile C++ header.
198# @param $(target) Normalized main target name.
199# @param $(source) Source filename (relative).
200# @param $(obj) Object file name. This shall be (re)created by the compilation.
201# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
202# @param $(flags) Flags.
203# @param $(defs) Definitions. No -D or something.
204# @param $(incs) Includes. No -I or something.
205# @param $(dirdep) Directory creation dependency.
206# @param $(deps) Other dependencies.
207# @param $(outbase) Output basename (full). Use this for list files and such.
208# @param $(objsuff) Object suffix.
209TOOL_GXX3OMF_COMPILE_PCH_OUTPUT = $($(target)_1_GCC_PCH_FILE)
210TOOL_GXX3OMF_COMPILE_PCH_DEPEND =
211TOOL_GXX3OMF_COMPILE_PCH_DEPORD = $($(target)_1_GCC_PCH_DIR)
212define TOOL_GXX3OMF_COMPILE_PCH_CMDS
213 $(QUIET)$(TOOL_GXX3OMF_PCH) -c\
214 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
215 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
216 -o $(obj)\
217 $(abspath $(source))
218 $(INSTALL) --hard-link-files-when-possible -m 0644 -- "$(obj)" "$($(target)_1_GCC_PCH_FILE)"
219 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
220endef
221
222
223## Compile Assembly source.
224# @param $(target) Normalized main target name.
225# @param $(source) Source filename (relative).
226# @param $(obj) Object file name. This shall be (re)created by the compilation.
227# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
228# @param $(flags) Flags.
229# @param $(defs) Definitions. No -D or something.
230# @param $(incs) Includes. No -I or something.
231# @param $(dirdep) Directory creation dependency.
232# @param $(deps) Other dependencies.
233# @param $(outbase) Output basename (full). Use this for list files and such.
234# @param $(objsuff) Object suffix.
235#
236TOOL_GXX3OMF_COMPILE_AS_OUTPUT =
237TOOL_GXX3OMF_COMPILE_AS_DEPEND =
238TOOL_GXX3OMF_COMPILE_AS_DEPORD =
239define TOOL_GXX3OMF_COMPILE_AS_CMDS
240 $(QUIET)$(TOOL_GXX3OMF_AS) -c\
241 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
242 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
243 -o $(obj)\
244 $(abspath $(source))
245 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
246endef
247
248
249## Compile resource source.
250# @param $(target) Normalized main target name.
251# @param $(source) Source filename (relative).
252# @param $(obj) Object file name. This shall be (re)created by the compilation.
253# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
254# @param $(flags) Flags.
255# @param $(defs) Definitions. No -D or something.
256# @param $(incs) Includes. No -I or something.
257# @param $(dirdep) Directory creation dependency.
258# @param $(deps) Other dependencies.
259#
260# @param $(outbase) Output basename (full). Use this for list files and such.
261# @param $(objsuff) Object suffix.
262TOOL_GXX3OMF_COMPILE_RC_OUTPUT =
263TOOL_GXX3OMF_COMPILE_RC_DEPEND =
264TOOL_GXX3OMF_COMPILE_RC_DEPORD =
265define TOOL_GXX3OMF_COMPILE_RC_CMDS
266 $(QUIET)$(REDIRECT) -E 'INCLUDE=' -- $(TOOL_GXX3OMF_RC) -r \
267 $(flags) $(addprefix -i, $(subst /,\\,$(subst /@unixroot,$(UNIXROOT),$(incs)))) $(addprefix -d, $(defs))\
268 $(subst /,\\,$(abspath $(source))) \
269 $(obj)
270endef
271
272
273## Link library
274# @param $(target) Normalized main target name.
275# @param $(out) Library name.
276# @param $(objs) Object files to put in the library.
277# @param $(flags) Flags.
278# @param $(dirdep) Directory creation dependency.
279# @param $(deps) Other dependencies.
280# @param $(othersrc) Unhandled sources.
281#
282# @param $(outbase) Output basename (full). Use this for list files and such.
283TOOL_GXX3OMF_LINK_LIBRARY_OUTPUT = $(outbase).rsp
284TOOL_GXX3OMF_LINK_LIBRARY_DEPEND = $(othersrc)
285TOOL_GXX3OMF_LINK_LIBRARY_DEPORD =
286define TOOL_GXX3OMF_LINK_LIBRARY_CMDS
287 $(if $(filter %.def %.imp %.dll,$(othersrc))\
288 ,$(QUIET)$(APPEND) -n $(outbase).rsp $(filter %.def %.imp %.dll,$(othersrc))\
289 $(NL)$(TAB)$(QUIET)$(QUIET)$(TOOL_GXX3OMF_AR_IMP) -o $(out) @$(outbase).rsp\
290 $(NL)$(TAB)$(QUIET)$(RM) -f $(outbase).rsp)
291 $(QUIET)$(APPEND) -n $(outbase).rsp $(flags) $(out) $(filter-out %.h.gch,$(objs)) $(filter-out %.def %.imp %.dll,$(othersrc))
292 $(QUIET)$(TOOL_GXX3OMF_AR) @$(outbase).rsp
293endef
294
295
296## Link program
297# @param $(target) Normalized main target name.
298# @param $(out) Program name.
299# @param $(objs) Object files to link together.
300# @param $(libs) Libraries to search.
301# @param $(libpath) Library search paths.
302# @param $(flags) Flags.
303# @param $(dirdep) Directory creation dependency.
304# @param $(deps) Other dependencies.
305# @param $(othersrc) Unhandled sources.
306# @param $(custom_pre) Custom step invoked before linking.
307# @param $(custom_post) Custom step invoked after linking.
308#
309# @param $(outbase) Output basename (full). Use this for list files and such.
310TOOL_GXX3OMF_LINK_PROGRAM_OUTPUT = $(outbase).map $(outbase).rsp
311TOOL_GXX3OMF_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
312TOOL_GXX3OMF_LINK_PROGRAM_DEPORD =
313define TOOL_GXX3OMF_LINK_PROGRAM_CMDS
314 $(QUIET)$(APPEND) -n $(outbase).rsp\
315 $(flags)\
316 -o $(out)\
317 $(filter-out %.h.gch,$(objs))\
318 $(foreach p,$(libpath), -L$(p))\
319 $(othersrc)\
320 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
321 -Zmap=$(outbase).map
322 $(QUIET)$(TOOL_GXX3OMF_LD) @$(outbase).rsp
323endef
324
325
326## Link DLL
327# @param $(target) Normalized main target name.
328# @param $(out) Program name.
329# @param $(objs) Object files to link together.
330# @param $(libs) Libraries to search.
331# @param $(libpath) Library search paths.
332# @param $(flags) Flags.
333# @param $(dirdep) Directory creation dependency.
334# @param $(deps) Other dependencies.
335# @param $(othersrc) Unhandled sources.
336# @param $(custom_pre) Custom step invoked before linking.
337# @param $(custom_post) Custom step invoked after linking.
338#
339# @param $(outbase) Output basename (full). Use this for list files and such.
340TOOL_GXX3OMF_LINK_DLL_OUTPUT = $(outbase).map $(outbase).rsp
341TOOL_GXX3OMF_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
342TOOL_GXX3OMF_LINK_DLL_DEPORD =
343define TOOL_GXX3OMF_LINK_DLL_CMDS
344 $(QUIET)$(APPEND) -n $(outbase).rsp\
345 $(TOOL_GXX3OMF_LDFLAGS.dll)\
346 $(flags)\
347 -o $(out)\
348 $(filter-out %.h.gch,$(objs))\
349 $(foreach p,$(libpath), -L$(p))\
350 $(othersrc)\
351 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
352 -Zmap=$(outbase).map
353 $(QUIET)$(TOOL_GXX3OMF_LD) @$(outbase).rsp
354endef
355
356
357## Link system module (windows aka driver, linux aka kernel module)
358# @param $(target) Normalized main target name.
359# @param $(out) System module name.
360# @param $(objs) Object files to link together.
361# @param $(libs) Libraries to search.
362# @param $(libpath) Library search paths.
363# @param $(flags) Flags.
364# @param $(dirdep) Directory creation dependency.
365# @param $(deps) Other dependencies.
366# @param $(othersrc) Unhandled sources.
367# @param $(custom_pre) Custom step invoked before linking.
368# @param $(custom_post) Custom step invoked after linking.
369#
370# @param $(outbase) Output basename (full). Use this for list files and such.
371TOOL_GXX3OMF_LINK_SYSMOD_OUTPUT = $(outbase).map $(outbase).rsp
372TOOL_GXX3OMF_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
373TOOL_GXX3OMF_LINK_SYSMOD_DEPORD =
374define TOOL_GXX3OMF_LINK_SYSMOD_CMDS
375 $(QUIET)$(APPEND) -n $(outbase).rsp\
376 $(TOOL_GXX3OMF_LDFLAGS.sysmod)\
377 $(flags)\
378 -o $(out)\
379 $(filter-out %.h.gch,$(objs))\
380 $(foreach p,$(libpath), -L$(p))\
381 $(othersrc)\
382 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
383 -Zmap=$(outbase).map
384 $(QUIET)$(TOOL_GXX3OMF_LD_SYSMOD) @$(outbase).rsp
385endef
386
Note: See TracBrowser for help on using the repository browser.