source: trunk/kBuild/tools/GCC3PLAIN.kmk@ 1033

Last change on this file since 1033 was 1033, checked in by bird, 18 years ago

make the map file output optional just in case. (it probably shouldn't be here in the first place...)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 10.6 KB
Line 
1# $Id: GCC3PLAIN.kmk 1033 2007-06-04 02:00:11Z bird $
2## @file
3#
4# kBuild Tool Config - Generic GCC v3.2.x or later Using The System GCC, any Unix Linker and Unix Archiver.
5#
6# Copyright (c) 2004-2007 knut st. osmundsen <bird-kBuild-spam@anduin.net>
7#
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
27TOOL_GCC3PLAIN := Generic GCC v3.2.x or later Using The System GCC, any Unix Linker and Unix Archiver.
28
29# Tool Specific Properties
30TOOL_GCC3PLAIN_CC ?= gcc$(HOSTSUFF_EXE)
31TOOL_GCC3PLAIN_CXX ?= g++$(HOSTSUFF_EXE)
32TOOL_GCC3PLAIN_AS ?= gcc$(HOSTSUFF_EXE)
33TOOL_GCC3PLAIN_AR ?= ar$(HOSTSUFF_EXE)
34TOOL_GCC3PLAIN_RANLIB ?= ranlib$(HOSTSUFF_EXE)
35TOOL_GCC3PLAIN_LD ?= gcc$(HOSTSUFF_EXE)
36TOOL_GCC3PLAIN_LDFLAGS.dll.os2 ?= -Zdll
37TOOL_GCC3PLAIN_LDFLAGS.dll.darwin ?= -dynamiclib
38ifndef TOOL_GCC3PLAIN_LDFLAGS.$(BUILD_TARGET)
39 TOOL_GCC3PLAIN_LDFLAGS.dll ?= -shared
40else
41 TOOL_GCC3PLAIN_LDFLAGS.dll ?= $(TOOL_GCC3PLAIN_LDFLAGS.$(BUILD_TARGET))
42endif
43TOOL_GCC3PLAIN_LD_SONAME.darwin ?= $(NO_SUCH_VARIABLE)
44TOOL_GCC3PLAIN_LD_SONAME.os2 ?= $(NO_SUCH_VARIABLE)
45TOOL_GCC3PLAIN_LD_SONAME.win ?= $(NO_SUCH_VARIABLE)
46ifndef TOOL_GCC3PLAIN_LD_SONAME.$(BUILD_TARGET)
47 TOOL_GCC3PLAIN_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(BUILD_TARGET).$(BUILD_TYPE)) $($(1)_SONAME.$(BUILD_TARGET)) $($(1)_SONAME.$(BUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
48else
49 TOOL_GCC3PLAIN_LD_SONAME ?= $(TOOL_GCC3PLAIN_LD_SONAME.$(BUILD_TARGET))
50endif
51ifdef SLKRUNS
52 TOOL_GCC3PLAIN_CC += -fmessage-length=0
53 TOOL_GCC3PLAIN_CXX += -fmessage-length=0
54endif
55
56# General Properties used by kBuild
57TOOL_GCC3PLAIN_COBJSUFF ?= .o
58TOOL_GCC3PLAIN_CFLAGS ?=
59TOOL_GCC3PLAIN_CFLAGS.debug ?= -g
60TOOL_GCC3PLAIN_CFLAGS.profile ?= -g -O2 #-pg
61TOOL_GCC3PLAIN_CFLAGS.release ?= -O2
62TOOL_GCC3PLAIN_CINCS ?=
63TOOL_GCC3PLAIN_CDEFS ?=
64
65TOOL_GCC3PLAIN_CXXOBJSUFF ?= .o
66TOOL_GCC3PLAIN_CXXOBJSUFF ?= .o
67TOOL_GCC3PLAIN_CXXFLAGS ?=
68TOOL_GCC3PLAIN_CXXFLAGS.debug ?= -g
69TOOL_GCC3PLAIN_CXXFLAGS.profile ?= -g -O2 #-pg
70TOOL_GCC3PLAIN_CXXFLAGS.release ?= -O2
71TOOL_GCC3PLAIN_CXXINCS ?=
72TOOL_GCC3PLAIN_CXXDEFS ?=
73
74TOOL_GCC3PLAIN_ASFLAGS ?= -x assembler-with-cpp
75TOOL_GCC3PLAIN_ASFLAGS.debug ?= -g
76TOOL_GCC3PLAIN_ASFLAGS.profile ?= -g
77TOOL_GCC3PLAIN_ASOBJSUFF ?= .o
78
79TOOL_GCC3PLAIN_ARFLAGS ?= cr
80TOOL_GCC3PLAIN_ARLIBSUFF ?= .a
81
82TOOL_GCC3PLAIN_LDFLAGS ?=
83TOOL_GCC3PLAIN_LDFLAGS.debug ?= -g
84TOOL_GCC3PLAIN_LDFLAGS.profile ?= -g
85
86
87## Compile C source.
88# @param $(target) Normalized main target name.
89# @param $(source) Source filename (relative).
90# @param $(obj) Object file name. This shall be (re)created by the compilation.
91# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
92# @param $(flags) Flags.
93# @param $(defs) Definitions. No -D or something.
94# @param $(incs) Includes. No -I or something.
95# @param $(dirdep) Directory creation dependency.
96# @param $(deps) Other dependencies.
97#
98# @param $(outbase) Output basename (full). Use this for list files and such.
99# @param $(objsuff) Object suffix.
100TOOL_GCC3PLAIN_COMPILE_C_DEPEND =
101TOOL_GCC3PLAIN_COMPILE_C_DEPORD =
102ifdef USE_KOBJCACHE
103TOOL_GCC3PLAIN_COMPILE_C_USES_KOBJCACHE = 1
104TOOL_GCC3PLAIN_COMPILE_C_OUTPUT = $(outbase).i
105define TOOL_GCC3PLAIN_COMPILE_C_CMDS
106 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -r --kObjCache-cpp $(outbase).i \
107 $(TOOL_GCC3PLAIN_CC) -E -o -\
108 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
109 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
110 $(abspath $(source)) \
111 --kObjCache-cc $(obj) \
112 $(TOOL_GCC3PLAIN_CC) -c\
113 $(flags)\
114 -o $(obj)\
115 $(outbase).i
116endef
117else # !USE_KOBJCACHE
118TOOL_GCC3PLAIN_COMPILE_C_OUTPUT =
119define TOOL_GCC3PLAIN_COMPILE_C_CMDS
120 $(QUIET)$(TOOL_GCC3PLAIN_CC) -c\
121 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
122 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
123 -o $(obj)\
124 $(abspath $(source))
125endef
126endif # !USE_KOBJCACHE
127
128
129## Compile C++ source.
130# @param $(target) Normalized main target name.
131# @param $(source) Source filename (relative).
132# @param $(obj) Object file name. This shall be (re)created by the compilation.
133# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
134# @param $(flags) Flags.
135# @param $(defs) Definitions. No -D or something.
136# @param $(incs) Includes. No -I or something.
137# @param $(dirdep) Directory creation dependency.
138# @param $(deps) Other dependencies.
139# @param $(outbase) Output basename (full). Use this for list files and such.
140# @param $(objsuff) Object suffix.
141TOOL_GCC3PLAIN_COMPILE_CXX_DEPEND =
142TOOL_GCC3PLAIN_COMPILE_CXX_DEPORD =
143ifdef USE_KOBJCACHE
144TOOL_GCC3PLAIN_COMPILE_CXX_USES_KOBJCACHE = 1
145TOOL_GCC3PLAIN_COMPILE_CXX_OUTPUT = $(outbase).ii
146define TOOL_GCC3PLAIN_COMPILE_CXX_CMDS
147 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -r --kObjCache-cpp $(outbase).ii \
148 $(TOOL_GCC3PLAIN_CXX) -E -o -\
149 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
150 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
151 $(abspath $(source)) \
152 --kObjCache-cc $(obj) \
153 $(TOOL_GCC3PLAIN_CXX) -c\
154 $(flags)\
155 -o $(obj)\
156 $(outbase).ii
157endef
158else # !USE_KOBJCACHE
159TOOL_GCC3PLAIN_COMPILE_CXX_OUTPUT =
160define TOOL_GCC3PLAIN_COMPILE_CXX_CMDS
161 $(QUIET)$(TOOL_GCC3PLAIN_CXX) -c\
162 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
163 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
164 -o $(obj)\
165 $(abspath $(source))
166endef
167endif # !USE_KOBJCACHE
168
169
170## Compile Assembly source.
171# @param $(target) Normalized main target name.
172# @param $(source) Source filename (relative).
173# @param $(obj) Object file name. This shall be (re)created by the compilation.
174# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
175# @param $(flags) Flags.
176# @param $(defs) Definitions. No -D or something.
177# @param $(incs) Includes. No -I or something.
178# @param $(dirdep) Directory creation dependency.
179# @param $(deps) Other dependencies.
180# @param $(outbase) Output basename (full). Use this for list files and such.
181# @param $(objsuff) Object suffix.
182#
183TOOL_GCC3PLAIN_COMPILE_AS_OUTPUT =
184TOOL_GCC3PLAIN_COMPILE_AS_DEPEND =
185TOOL_GCC3PLAIN_COMPILE_AS_DEPORD =
186define TOOL_GCC3PLAIN_COMPILE_AS_CMDS
187 $(QUIET)$(TOOL_GCC3PLAIN_AS) -c\
188 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
189 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
190 -o $(obj)\
191 $(abspath $(source))
192endef
193
194
195## Link library
196# @param $(target) Normalized main target name.
197# @param $(out) Library name.
198# @param $(objs) Object files to put in the library.
199# @param $(flags) Flags.
200# @param $(dirdep) Directory creation dependency.
201# @param $(deps) Other dependencies.
202# @param $(othersrc) Unhandled sources.
203# @param $(outbase) Output basename (full). Use this for list files and such.
204TOOL_GCC3PLAIN_LINK_LIBRARY_OUTPUT = $(out).ar-script
205TOOL_GCC3PLAIN_LINK_LIBRARY_DEPEND = $(othersrc)
206TOOL_GCC3PLAIN_LINK_LIBRARY_DEPORD =
207define TOOL_GCC3PLAIN_LINK_LIBRARY_CMDS
208 $(call xargs,$(QUIET)$(TOOL_GCC3PLAIN_AR) $(flags) $(out),$(objs))
209 $(foreach lib,$(othersrc)\
210 ,$(NL)$(TAB)$(call MSG_AR_MERGE,$(target),$(out),$(lib)) \
211 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))ar.tmp.dir/* \
212 $(NL)$(TAB)$(QUIET)$(MKDIR) -p $(dir $(outbase))/ar.tmp.dir/ \
213 $(NL)$(TAB)$(QUIET)(cd $(dir $(outbase))ar.tmp.dir/ \
214 && $(TOOL_GCC3PLAIN_AR) x $(abspath $(lib)) \
215 && $(TOOL_GCC3PLAIN_AR) $(flags) $(out) *) \
216 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))/ar.tmp.dir/* \
217 $(NL)$(TAB)$(QUIET)$(RMDIR) $(dir $(outbase))ar.tmp.dir/)
218 $(QUIET)$(TOOL_GCC3PLAIN_RANLIB) $(out)
219endef
220
221
222## Link program
223# @param $(target) Normalized main target name.
224# @param $(out) Program name.
225# @param $(objs) Object files to link together.
226# @param $(libs) Libraries to search.
227# @param $(libpath) Library search paths.
228# @param $(flags) Flags.
229# @param $(dirdep) Directory creation dependency.
230# @param $(deps) Other dependencies.
231# @param $(othersrc) Unhandled sources.
232# @param $(custom_pre) Custom step invoked before linking.
233# @param $(custom_post) Custom step invoked after linking.
234# @param $(outbase) Output basename (full). Use this for list files and such.
235TOOL_GCC3PLAIN_LINK_PROGRAM_OUTPUT =
236TOOL_GCC3PLAIN_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).map
237TOOL_GCC3PLAIN_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
238 $(filter %.def, $(othersrc))
239TOOL_GCC3PLAIN_LINK_PROGRAM_DEPORD =
240define TOOL_GCC3PLAIN_LINK_PROGRAM_CMDS
241 $(QUIET)$(TOOL_GCC3PLAIN_LD) $(flags) -o $(out) $(objs)\
242 $(filter %.def, $(othersrc))\
243 $(foreach p,$(libpath), -L$(p))\
244 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
245endef
246
247
248## Link DLL
249# @param $(target) Normalized main target name.
250# @param $(out) Program name.
251# @param $(objs) Object files to link together.
252# @param $(libs) Libraries to search.
253# @param $(libpath) Library search paths.
254# @param $(flags) Flags.
255# @param $(dirdep) Directory creation dependency.
256# @param $(deps) Other dependencies.
257# @param $(othersrc) Unhandled sources.
258# @param $(custom_pre) Custom step invoked before linking.
259# @param $(custom_post) Custom step invoked after linking.
260# @param $(outbase) Output basename (full). Use this for list files and such.
261TOOL_GCC3PLAIN_LINK_DLL_OUTPUT =
262TOOL_GCC3PLAIN_LINK_DLL_OUTPUT_MAYBE = $(outbase).map
263TOOL_GCC3PLAIN_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
264 $(filter %.def, $(othersrc))
265TOOL_GCC3PLAIN_LINK_DLL_DEPORD =
266define TOOL_GCC3PLAIN_LINK_DLL_CMDS
267 $(QUIET)$(TOOL_GCC3PLAIN_LD) $(TOOL_GCC3PLAIN_LDFLAGS.dll) $(flags) -o $(out)\
268 $(if $(filter-out win32 os2, $(BUILD_TARGET)),$(call TOOL_GCC3PLAIN_LD_SONAME,$(target),$(out)))\
269 $(objs)\
270 $(filter %.def, $(othersrc))\
271 $(foreach p,$(libpath), -L$(p))\
272 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
273endef
274
Note: See TracBrowser for help on using the repository browser.