source: trunk/kBuild/tools/GCC3.kmk@ 3416

Last change on this file since 3416 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: 14.0 KB
Line 
1# $Id: GCC3.kmk 3393 2020-06-30 17:11:42Z bird $
2## @file
3# kBuild Tool Config - Generic GCC v3.2.x or later Using The System GCC and Binutils.
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_GCC3 := Generic GCC v3.2.x or later Using The System GCC and Binutils.
35
36# Tool Specific Properties
37ifndef TOOL_GCC3_PREFIX
38 TOOL_GCC3_PREFIX :=
39endif
40ifndef TOOL_GCC3_SUFFIX
41 TOOL_GCC3_SUFFIX := $(HOSTSUFF_EXE)
42endif
43if1of ($(KBUILD_HOST), solaris)
44 TOOL_GCC3_PREFIX2 ?= g
45else
46 TOOL_GCC3_PREFIX2 ?=
47endif
48TOOL_GCC3_SUFFIX2 ?= $(HOSTSUFF_EXE)
49TOOL_GCC3_PREFIX3 ?=
50TOOL_GCC3_SUFFIX3 ?= $(HOSTSUFF_EXE)
51TOOL_GCC3_CC ?= $(TOOL_GCC3_PREFIX)gcc$(TOOL_GCC3_SUFFIX)
52TOOL_GCC3_CXX ?= $(TOOL_GCC3_PREFIX)g++$(TOOL_GCC3_SUFFIX)
53TOOL_GCC3_AS ?= $(TOOL_GCC3_PREFIX)gcc$(TOOL_GCC3_SUFFIX)
54TOOL_GCC3_AR ?= $(TOOL_GCC3_PREFIX2)ar$(TOOL_GCC3_SUFFIX2)
55ifeq ($(KBUILD_TARGET),os2)
56 TOOL_GCC3_AR_IMP ?= $(TOOL_GCC3_PREFIX3)emximp$(TOOL_GCC3_SUFFIX3)
57else
58 TOOL_GCC3_AR_IMP ?= $(ECHO) not supported!
59endif
60TOOL_GCC3_LD ?= $(TOOL_GCC3_PREFIX)gcc$(TOOL_GCC3_SUFFIX)
61if1of ($(KBUILD_HOST), solaris)
62TOOL_GCC3_LD_SYSMOD ?= $(TOOL_GCC3_PREFIX3)ld$(TOOL_GCC3_SUFFIX3)
63else
64TOOL_GCC3_LD_SYSMOD ?= $(TOOL_GCC3_PREFIX2)ld$(TOOL_GCC3_SUFFIX2)
65endif
66ifndef TOOL_GCC3_LDFLAGS.$(KBUILD_TARGET)
67 TOOL_GCC3_LDFLAGS.dll ?= -shared
68else
69 TOOL_GCC3_LDFLAGS.dll ?= $(TOOL_GCC3_LDFLAGS.$(KBUILD_TARGET))
70endif
71TOOL_GCC3_LDFLAGS.sysmod ?= -r
72TOOL_GCC3_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
73ifeq ($(KBUILD_TARGET),os2)
74 TOOL_GCC3_LD_MAP ?= -Zmap=$(1)
75 TOOL_GCC3_LD_SYSMOD_MAP ?= -Zmap=$(1)
76else
77 TOOL_GCC3_LD_MAP ?=
78 TOOL_GCC3_LD_SYSMOD_MAP ?=
79endif
80TOOL_GCC3_OBJCOPY ?= $(TOOL_GCC3_PREFIX2)objcopy$(TOOL_GCC3_SUFFIX2)
81
82ifdef SLKRUNS
83 TOOL_GCC3_CC += -fmessage-length=0
84 TOOL_GCC3_CXX += -fmessage-length=0
85endif
86
87# General Properties used by kBuild
88TOOL_GCC3_COBJSUFF ?= .o
89TOOL_GCC3_CFLAGS ?=
90TOOL_GCC3_CFLAGS.debug ?= -g
91TOOL_GCC3_CFLAGS.profile ?= -O2 #-g -pg
92TOOL_GCC3_CFLAGS.release ?= -O2
93TOOL_GCC3_CINCS ?=
94TOOL_GCC3_CDEFS ?=
95
96TOOL_GCC3_CXXOBJSUFF ?= .o
97TOOL_GCC3_CXXOBJSUFF ?= .o
98TOOL_GCC3_CXXFLAGS ?=
99TOOL_GCC3_CXXFLAGS.debug ?= -g
100TOOL_GCC3_CXXFLAGS.profile ?= -O2 #-g -pg
101TOOL_GCC3_CXXFLAGS.release ?= -O2
102TOOL_GCC3_CXXINCS ?=
103TOOL_GCC3_CXXDEFS ?=
104
105TOOL_GCC3_ASFLAGS ?= -x assembler-with-cpp
106TOOL_GCC3_ASFLAGS.debug ?= -g
107TOOL_GCC3_ASFLAGS.profile ?= -g
108TOOL_GCC3_ASOBJSUFF ?= .o
109
110TOOL_GCC3_ARFLAGS ?= cr
111TOOL_GCC3_ARLIBSUFF ?= .a
112
113TOOL_GCC3_LDFLAGS ?=
114TOOL_GCC3_LDFLAGS.debug ?= -g
115TOOL_GCC3_LDFLAGS.profile ?= -g
116
117
118## Compile C source.
119# @param $(target) Normalized main target name.
120# @param $(source) Source filename (relative).
121# @param $(obj) Object file name. This shall be (re)created by the compilation.
122# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
123# @param $(flags) Flags.
124# @param $(defs) Definitions. No -D or something.
125# @param $(incs) Includes. No -I or something.
126# @param $(dirdep) Directory creation dependency.
127# @param $(deps) Other dependencies.
128#
129# @param $(outbase) Output basename (full). Use this for list files and such.
130# @param $(objsuff) Object suffix.
131TOOL_GCC3_COMPILE_C_DEPEND =
132TOOL_GCC3_COMPILE_C_DEPORD =
133ifdef KBUILD_USE_KOBJCACHE
134TOOL_GCC3_COMPILE_C_USES_KOBJCACHE = 1
135TOOL_GCC3_COMPILE_C_OUTPUT = $(outbase).i
136define TOOL_GCC3_COMPILE_C_CMDS
137 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
138 --kObjCache-cpp $(outbase).i\
139 $(TOOL_GCC3_CC) -E -o -\
140 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
141 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
142 $(abspath $(source))\
143 --kObjCache-cc $(obj)\
144 $(TOOL_GCC3_CC) -c\
145 $(flags) -fpreprocessed -x c\
146 -o $(obj)\
147 -
148 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
149endef
150else # !KBUILD_USE_KOBJCACHE
151TOOL_GCC3_COMPILE_C_OUTPUT =
152define TOOL_GCC3_COMPILE_C_CMDS
153 $(QUIET)$(TOOL_GCC3_CC) -c\
154 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
155 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
156 -o $(obj)\
157 $(abspath $(source))
158 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
159endef
160endif # !KBUILD_USE_KOBJCACHE
161
162
163## Compile C++ source.
164# @param $(target) Normalized main target name.
165# @param $(source) Source filename (relative).
166# @param $(obj) Object file name. This shall be (re)created by the compilation.
167# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
168# @param $(flags) Flags.
169# @param $(defs) Definitions. No -D or something.
170# @param $(incs) Includes. No -I or something.
171# @param $(dirdep) Directory creation dependency.
172# @param $(deps) Other dependencies.
173# @param $(outbase) Output basename (full). Use this for list files and such.
174# @param $(objsuff) Object suffix.
175TOOL_GCC3_COMPILE_CXX_DEPEND =
176TOOL_GCC3_COMPILE_CXX_DEPORD =
177ifdef KBUILD_USE_KOBJCACHE
178TOOL_GCC3_COMPILE_CXX_USES_KOBJCACHE = 1
179TOOL_GCC3_COMPILE_CXX_OUTPUT = $(outbase).ii
180define TOOL_GCC3_COMPILE_CXX_CMDS
181 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
182 --kObjCache-cpp $(outbase).ii\
183 $(TOOL_GCC3_CXX) -E -o -\
184 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
185 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
186 $(abspath $(source))\
187 --kObjCache-cc $(obj)\
188 $(TOOL_GCC3_CXX) -c\
189 $(flags) -fpreprocessed -x c++\
190 -o $(obj)\
191 -
192 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
193endef
194else # !KBUILD_USE_KOBJCACHE
195TOOL_GCC3_COMPILE_CXX_OUTPUT =
196define TOOL_GCC3_COMPILE_CXX_CMDS
197 $(QUIET)$(TOOL_GCC3_CXX) -c\
198 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
199 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
200 -o $(obj)\
201 $(abspath $(source))
202 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
203endef
204endif # !KBUILD_USE_KOBJCACHE
205
206
207## Compile Assembly source.
208# @param $(target) Normalized main target name.
209# @param $(source) Source filename (relative).
210# @param $(obj) Object file name. This shall be (re)created by the compilation.
211# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
212# @param $(flags) Flags.
213# @param $(defs) Definitions. No -D or something.
214# @param $(incs) Includes. No -I or something.
215# @param $(dirdep) Directory creation dependency.
216# @param $(deps) Other dependencies.
217# @param $(outbase) Output basename (full). Use this for list files and such.
218# @param $(objsuff) Object suffix.
219#
220TOOL_GCC3_COMPILE_AS_OUTPUT =
221TOOL_GCC3_COMPILE_AS_DEPEND =
222TOOL_GCC3_COMPILE_AS_DEPORD =
223define TOOL_GCC3_COMPILE_AS_CMDS
224 $(QUIET)$(TOOL_GCC3_AS) -c\
225 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
226 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
227 -o $(obj)\
228 $(abspath $(source))
229 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
230endef
231
232
233## Link library
234# @param $(target) Normalized main target name.
235# @param $(out) Library name.
236# @param $(objs) Object files to put in the library.
237# @param $(flags) Flags.
238# @param $(dirdep) Directory creation dependency.
239# @param $(deps) Other dependencies.
240# @param $(othersrc) Unhandled sources.
241# @param $(outbase) Output basename (full). Use this for list files and such.
242TOOL_GCC3_LINK_LIBRARY_OUTPUT = $(out).ar-script
243TOOL_GCC3_LINK_LIBRARY_OUTPUT_MAYBE = $(outbase).imp.a
244TOOL_GCC3_LINK_LIBRARY_DEPEND = $(othersrc)
245TOOL_GCC3_LINK_LIBRARY_DEPORD =
246define TOOL_GCC3_LINK_LIBRARY_CMDS
247 $(QUIET)$(APPEND) $(out).ar-script 'CREATE $(out)'
248 $(QUIET)$(APPEND) -n $(out).ar-script \
249 $(foreach o,$(objs), 'ADDMOD $(o)') \
250 $(foreach o,$(filter-out %.def %.imp %.dll,$(othersrc)), 'ADDLIB $(o)')
251 $(if $(filter %.def %.imp %.dll,$(othersrc))\
252 ,$(TOOL_GCC3_AR_IMP) -o $(outbase).imp.a $(filter %.def %.imp %.dll,$(othersrc))\
253 $(NL)$(TAB)$(QUIET)$(APPEND) $(out).ar-script 'ADDLIB $(outbase).imp.a')
254 $(QUIET)$(APPEND) $(out).ar-script 'SAVE'
255 $(QUIET)$(APPEND) $(out).ar-script 'END'
256 $(QUIET)$(REDIRECT) -rti $(out).ar-script -- $(TOOL_GCC3_AR) -M
257endef
258
259
260## Link program
261# @param $(target) Normalized main target name.
262# @param $(out) Program name.
263# @param $(objs) Object files to link together.
264# @param $(libs) Libraries to search.
265# @param $(libpath) Library search paths.
266# @param $(flags) Flags.
267# @param $(dirdep) Directory creation dependency.
268# @param $(deps) Other dependencies.
269# @param $(othersrc) Unhandled sources.
270# @param $(custom_pre) Custom step invoked before linking.
271# @param $(custom_post) Custom step invoked after linking.
272# @param $(outbase) Output basename (full). Use this for list files and such.
273TOOL_GCC3_LINK_PROGRAM_OUTPUT =
274TOOL_GCC3_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).map
275TOOL_GCC3_LINK_PROGRAM_OUTPUT_DEBUG = $(outbase).debug
276TOOL_GCC3_LINK_PROGRAM_DEBUG_INSTALL_FN = $(2).debug=>$(basename $(3)).debug
277TOOL_GCC3_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
278 $(filter %.def, $(othersrc))
279TOOL_GCC3_LINK_PROGRAM_DEPORD =
280define TOOL_GCC3_LINK_PROGRAM_CMDS
281 $(QUIET)$(TOOL_GCC3_LD) $(flags) -o $(out) $(objs)\
282 $(filter %.def, $(othersrc))\
283 $(foreach p,$(libpath), -L$(p))\
284 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
285 $(call TOOL_GCC3_LD_MAP,$(outbase).map)
286 ifeq ($(ld_debug),split)
287 $(QUIET)$(TOOL_GCC3_OBJCOPY) --only-keep-debug $(out) $(outbase).debug
288 $(QUIET)$(CHMOD) a-x $(outbase).debug
289 $(QUIET)$(TOOL_GCC3_OBJCOPY) --strip-debug --strip-unneeded --add-gnu-debuglink=$(outbase).debug $(out)
290 endif
291endef
292
293
294## Link DLL
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# @param $(outbase) Output basename (full). Use this for list files and such.
307TOOL_GCC3_LINK_DLL_OUTPUT =
308TOOL_GCC3_LINK_DLL_OUTPUT_MAYBE = $(outbase).map
309TOOL_GCC3_LINK_DLL_OUTPUT_DEBUG = $(outbase).debug
310TOOL_GCC3_LINK_DLL_DEBUG_INSTALL_FN = $(2).debug=>$(basename $(3)).debug
311TOOL_GCC3_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
312 $(filter %.def, $(othersrc))
313TOOL_GCC3_LINK_DLL_DEPORD =
314define TOOL_GCC3_LINK_DLL_CMDS
315 $(QUIET)$(TOOL_GCC3_LD) $(TOOL_GCC3_LDFLAGS.dll) $(flags) -o $(out)\
316 $(if $(filter-out win os2, $(KBUILD_TARGET)),$(call TOOL_GCC3_LD_SONAME,$(target),$(out)))\
317 $(objs)\
318 $(filter %.def, $(othersrc))\
319 $(foreach p,$(libpath), -L$(p))\
320 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
321 $(call TOOL_GCC3_LD_MAP,$(outbase).map)
322 ifeq ($(ld_debug),split)
323 $(QUIET)$(TOOL_GCC3_OBJCOPY) --only-keep-debug $(out) $(outbase).debug
324 $(QUIET)$(CHMOD) a-x $(outbase).debug
325 $(QUIET)$(TOOL_GCC3_OBJCOPY) --strip-debug --strip-unneeded --add-gnu-debuglink=$(outbase).debug $(out)
326 endif
327endef
328
329
330## Link system module (windows aka driver, linux aka kernel module)
331# @param $(target) Normalized main target name.
332# @param $(out) System module name.
333# @param $(objs) Object files to link together.
334# @param $(libs) Libraries to search.
335# @param $(libpath) Library search paths.
336# @param $(flags) Flags.
337# @param $(dirdep) Directory creation dependency.
338# @param $(deps) Other dependencies.
339# @param $(othersrc) Unhandled sources.
340# @param $(custom_pre) Custom step invoked before linking.
341# @param $(custom_post) Custom step invoked after linking.
342# @param $(outbase) Output basename (full). Use this for list files and such.
343TOOL_GCC3_LINK_SYSMOD_OUTPUT =
344TOOL_GCC3_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
345TOOL_GCC3_LINK_SYSMOD_OUTPUT_DEBUG = $(outbase).debug
346TOOL_GCC3_LINK_SYSMOD_DEBUG_INSTALL_FN = $(2).debug=>$(basename $(3)).debug
347TOOL_GCC3_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
348 $(filter %.def, $(othersrc))
349TOOL_GCC3_LINK_SYSMOD_DEPORD =
350define TOOL_GCC3_LINK_SYSMOD_CMDS
351 $(QUIET)$(TOOL_GCC3_LD_SYSMOD) $(TOOL_GCC3_LDFLAGS.sysmod) $(flags) -o $(out) $(objs)\
352 $(filter %.def, $(othersrc))\
353 $(foreach p,$(libpath), -L$(p))\
354 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))\
355 $(call TOOL_GCC3_LD_SYSMOD_MAP,$(outbase).map)
356 ifeq ($(ld_debug),split)
357 $(QUIET)$(TOOL_GCC3_OBJCOPY) --only-keep-debug $(out) $(outbase).debug
358 $(QUIET)$(CHMOD) a-x $(outbase).debug
359 $(QUIET)$(TOOL_GCC3_OBJCOPY) --strip-debug --strip-unneeded --add-gnu-debuglink=$(outbase).debug $(out)
360 endif
361endef
362
Note: See TracBrowser for help on using the repository browser.