source: trunk/kBuild/tools/GXX4MACHO.kmk@ 1259

Last change on this file since 1259 was 1259, checked in by bird, 17 years ago

Don't basename the library file, just strip leading 'lib'.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 13.4 KB
Line 
1# $Id: GXX4MACHO.kmk 1259 2007-11-07 16:02:56Z bird $
2## @file
3#
4# kBuild Tool Config - GCC v4 targeting Darwin (Mac OS X) Mach-o, for building C++ code.
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_GXX4MACHO := GCC v4 targeting Darwin (Mac OS X) Mach-o, for building C++ code.
28
29# Tool Specific Properties
30TOOL_GXX4MACHO_CC ?= gcc$(HOSTSUFF_EXE)
31TOOL_GXX4MACHO_CXX ?= g++$(HOSTSUFF_EXE)
32TOOL_GXX4MACHO_OBJC?= gcc$(HOSTSUFF_EXE)
33TOOL_GXX4MACHO_AS ?= gcc$(HOSTSUFF_EXE)
34TOOL_GXX4MACHO_LD ?= g++$(HOSTSUFF_EXE)
35TOOL_GXX4MACHO_LD_SYSMOD ?= g++$(HOSTSUFF_EXE)
36ifndef TOOL_GXX4MACHO_LDFLAGS.$(BUILD_TARGET)
37TOOL_GXX4MACHO_LDFLAGS.dll ?= -dynamiclib
38else
39TOOL_GXX4MACHO_LDFLAGS.dll ?= $(TOOL_GXX4MACHO_LDFLAGS.$(BUILD_TARGET))
40endif
41TOOL_GXX4MACHO_LDFLAGS.sysmod ?= -r
42#TOOL_GXX4MACHO_LD_SONAME = -Wl,-dylib_install_name $(firstword $($(1)_SONAME.$(BUILD_TARGET).$(BUILD_TYPE)) $($(1)_SONAME.$(BUILD_TARGET)) $($(1)_SONAME.$(BUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
43
44ifdef SLKRUNS
45TOOL_GXX4MACHO_CC += -fmessage-length=0
46TOOL_GXX4MACHO_CXX += -fmessage-length=0
47TOOL_GXX4MACHO_OBJC+= -fmessage-length=0
48endif
49
50# General Properties used by kBuild
51TOOL_GXX4MACHO_COBJSUFF ?= .o
52TOOL_GXX4MACHO_CFLAGS ?=
53TOOL_GXX4MACHO_CFLAGS.debug ?= -g
54TOOL_GXX4MACHO_CFLAGS.profile ?= -O2 #-g -pg
55TOOL_GXX4MACHO_CFLAGS.release ?= -O2
56TOOL_GXX4MACHO_CINCS ?=
57TOOL_GXX4MACHO_CDEFS ?=
58
59TOOL_GXX4MACHO_CXXOBJSUFF ?= .o
60TOOL_GXX4MACHO_CXXOBJSUFF ?= .o
61TOOL_GXX4MACHO_CXXFLAGS ?=
62TOOL_GXX4MACHO_CXXFLAGS.debug ?= -g
63TOOL_GXX4MACHO_CXXFLAGS.profile ?= -O2 #-g -pg
64TOOL_GXX4MACHO_CXXFLAGS.release ?= -O2
65TOOL_GXX4MACHO_CXXINCS ?=
66TOOL_GXX4MACHO_CXXDEFS ?=
67
68TOOL_GXX4MACHO_OBJCOBJSUFF ?= .o
69TOOL_GXX4MACHO_OBJCOBJSUFF ?= .o
70TOOL_GXX4MACHO_OBJCFLAGS ?=
71TOOL_GXX4MACHO_OBJCFLAGS.debug ?= -g
72TOOL_GXX4MACHO_OBJCFLAGS.profile?= -O2 #-g -pg
73TOOL_GXX4MACHO_OBJCFLAGS.release?= -O2
74TOOL_GXX4MACHO_OBJCINCS ?=
75TOOL_GXX4MACHO_OBJCDEFS ?=
76
77TOOL_GXX4MACHO_ASFLAGS ?= -x assembler-with-cpp
78TOOL_GXX4MACHO_ASFLAGS.debug ?= -g
79TOOL_GXX4MACHO_ASFLAGS.profile ?= -g
80TOOL_GXX4MACHO_ASOBJSUFF ?= .o
81
82TOOL_GXX4MACHO_AR ?= ar$(HOSTSUFF_EXE)
83TOOL_GXX4MACHO_ARFLAGS ?= -c -rs
84TOOL_GXX4MACHO_ARLIBSUFF ?= .a
85
86TOOL_GXX4MACHO_LDFLAGS ?=
87TOOL_GXX4MACHO_LDFLAGS.debug ?= -g
88TOOL_GXX4MACHO_LDFLAGS.profile ?= -g
89
90
91## Compile C source.
92# @param $(target) Normalized main target name.
93# @param $(source) Source filename (relative).
94# @param $(obj) Object file name. This shall be (re)created by the compilation.
95# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
96# @param $(flags) Flags.
97# @param $(defs) Definitions. No -D or something.
98# @param $(incs) Includes. No -I or something.
99# @param $(dirdep) Directory creation dependency.
100# @param $(deps) Other dependencies.
101#
102# @param $(outbase) Output basename (full). Use this for list files and such.
103# @param $(objsuff) Object suffix.
104TOOL_GXX4MACHO_COMPILE_C_DEPEND =
105TOOL_GXX4MACHO_COMPILE_C_DEPORD =
106ifdef USE_KOBJCACHE
107TOOL_GXX4MACHO_COMPILE_C_USES_KOBJCACHE = 1
108TOOL_GXX4MACHO_COMPILE_C_OUTPUT = $(outbase).i
109define TOOL_GXX4MACHO_COMPILE_C_CMDS
110 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
111 --kObjCache-cpp $(outbase).i\
112 $(TOOL_GXX4MACHO_CC) -E -o -\
113 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
114 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
115 $(abspath $(source))\
116 --kObjCache-cc $(obj)\
117 $(TOOL_GXX4MACHO_CC) -c\
118 $(flags) -fpreprocessed -x c\
119 -o $(obj)\
120 -
121endef
122else # !USE_KOBJCACHE
123TOOL_GXX4MACHO_COMPILE_C_OUTPUT =
124define TOOL_GXX4MACHO_COMPILE_C_CMDS
125 $(QUIET)$(TOOL_GXX4MACHO_CC) -c\
126 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
127 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
128 -o $(obj)\
129 $(abspath $(source))
130endef
131endif # !KUSE_OBJCACHE
132
133
134## Compile C++ source.
135# @param $(target) Normalized main target name.
136# @param $(source) Source filename (relative).
137# @param $(obj) Object file name. This shall be (re)created by the compilation.
138# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
139# @param $(flags) Flags.
140# @param $(defs) Definitions. No -D or something.
141# @param $(incs) Includes. No -I or something.
142# @param $(dirdep) Directory creation dependency.
143# @param $(deps) Other dependencies.
144# @param $(outbase) Output basename (full). Use this for list files and such.
145# @param $(objsuff) Object suffix.
146TOOL_GXX4MACHO_COMPILE_CXX_DEPEND =
147TOOL_GXX4MACHO_COMPILE_CXX_DEPORD =
148ifdef USE_KOBJCACHE
149TOOL_GXX4MACHO_COMPILE_CXX_USES_KOBJCACHE = 1
150TOOL_GXX4MACHO_COMPILE_CXX_OUTPUT = $(outbase).ii
151define TOOL_GXX4MACHO_COMPILE_CXX_CMDS
152 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
153 --kObjCache-cpp $(outbase).ii\
154 $(TOOL_GXX4MACHO_CXX) -E -o -\
155 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
156 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
157 $(abspath $(source))\
158 --kObjCache-cc $(obj)\
159 $(TOOL_GXX4MACHO_CXX) -c\
160 $(flags) -fpreprocessed -x c++\
161 -o $(obj)\
162 -
163endef
164else # !USE_KOBJCACHE
165TOOL_GXX4MACHO_COMPILE_CXX_OUTPUT =
166define TOOL_GXX4MACHO_COMPILE_CXX_CMDS
167 $(QUIET)$(TOOL_GXX4MACHO_CXX) -c\
168 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
169 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
170 -o $(obj)\
171 $(abspath $(source))
172endef
173endif # !KUSE_OBJCACHE
174
175
176## Compile Objective-C source.
177# @param $(target) Normalized main target name.
178# @param $(source) Source filename (relative).
179# @param $(obj) Object file name. This shall be (re)created by the compilation.
180# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
181# @param $(flags) Flags.
182# @param $(defs) Definitions. No -D or something.
183# @param $(incs) Includes. No -I or something.
184# @param $(dirdep) Directory creation dependency.
185# @param $(deps) Other dependencies.
186# @param $(outbase) Output basename (full). Use this for list files and such.
187# @param $(objsuff) Object suffix.
188TOOL_GXX4MACHO_COMPILE_OBJC_DEPEND =
189TOOL_GXX4MACHO_COMPILE_OBJC_DEPORD =
190ifdef USE_KOBJCACHE
191TOOL_GXX4MACHO_COMPILE_OBJC_USES_KOBJCACHE = 1
192TOOL_GXX4MACHO_COMPILE_OBJC_OUTPUT = $(outbase).mi
193define TOOL_GXX4MACHO_COMPILE_OBJC_CMDS
194 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
195 --kObjCache-cpp $(outbase).ii\
196 $(TOOL_GXX4MACHO_OBJC) -E -o -\
197 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
198 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
199 $(abspath $(source))\
200 --kObjCache-cc $(obj)\
201 $(TOOL_GXX4MACHO_OBJC) -c\
202 $(flags) -fpreprocessed -x objective-c \
203 -o $(obj)\
204 -
205endef
206else # !USE_KOBJCACHE
207TOOL_GXX4MACHO_COMPILE_OBJC_OUTPUT =
208define TOOL_GXX4MACHO_COMPILE_OBJC_CMDS
209 $(QUIET)$(TOOL_GXX4MACHO_OBJC) -c\
210 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
211 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
212 -o $(obj)\
213 $(abspath $(source))
214endef
215endif # !KUSE_OBJCACHE
216
217
218## Compile Assembly source.
219# @param $(target) Normalized main target name.
220# @param $(source) Source filename (relative).
221# @param $(obj) Object file name. This shall be (re)created by the compilation.
222# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
223# @param $(flags) Flags.
224# @param $(defs) Definitions. No -D or something.
225# @param $(incs) Includes. No -I or something.
226# @param $(dirdep) Directory creation dependency.
227# @param $(deps) Other dependencies.
228# @param $(outbase) Output basename (full). Use this for list files and such.
229# @param $(objsuff) Object suffix.
230#
231TOOL_GXX4MACHO_COMPILE_AS_OUTPUT =
232TOOL_GXX4MACHO_COMPILE_AS_DEPEND =
233TOOL_GXX4MACHO_COMPILE_AS_DEPORD =
234define TOOL_GXX4MACHO_COMPILE_AS_CMDS
235 $(QUIET)$(TOOL_GXX4MACHO_AS) -c\
236 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
237 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
238 -o $(obj)\
239 $(abspath $(source))
240endef
241
242
243## Link library
244# @param $(target) Normalized main target name.
245# @param $(out) Library name.
246# @param $(objs) Object files to put in the library.
247# @param $(flags) Flags.
248# @param $(dirdep) Directory creation dependency.
249# @param $(deps) Other dependencies.
250# @param $(othersrc) Unhandled sources.
251# @param $(outbase) Output basename (full). Use this for list files and such.
252TOOL_GXX4MACHO_LINK_LIBRARY_OUTPUT =
253TOOL_GXX4MACHO_LINK_LIBRARY_DEPEND = $(othersrc)
254TOOL_GXX4MACHO_LINK_LIBRARY_DEPORD =
255define TOOL_GXX4MACHO_LINK_LIBRARY_CMDS
256 $(if $(strip $(objs)),$(call xargs,$(QUIET)$(TOOL_GXX4MACHO_AR) $(flags) $(out),$(objs)))
257 $(foreach lib,$(othersrc)\
258 ,$(NL)$(TAB)$(call MSG_AR_MERGE,$(target),$(out),$(lib)) \
259 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))ar.tmp.dir/* \
260 $(NL)$(TAB)$(QUIET)$(MKDIR) -p $(dir $(outbase))/ar.tmp.dir/ \
261 $(NL)$(TAB)$(QUIET)(cd $(dir $(outbase))ar.tmp.dir/ \
262 && $(TOOL_GXX4MACHO_AR) -x $(abspath $(lib)) \
263 && $(RM_EXT) -f ./__.SYMDEF* \
264 && $(TOOL_GXX4MACHO_AR) $(flags) $(out) *) \
265 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))/ar.tmp.dir/* \
266 $(NL)$(TAB)$(QUIET)$(RMDIR) $(dir $(outbase))ar.tmp.dir/)
267endef
268
269
270## Link program
271# @param $(target) Normalized main target name.
272# @param $(out) Program name.
273# @param $(objs) Object files to link together.
274# @param $(libs) Libraries to search.
275# @param $(libpath) Library search paths.
276# @param $(flags) Flags.
277# @param $(dirdep) Directory creation dependency.
278# @param $(deps) Other dependencies.
279# @param $(othersrc) Unhandled sources.
280# @param $(custom_pre) Custom step invoked before linking.
281# @param $(custom_post) Custom step invoked after linking.
282# @param $(outbase) Output basename (full). Use this for list files and such.
283TOOL_GXX4MACHO_LINK_PROGRAM_OUTPUT = $(outbase).rsp
284TOOL_GXX4MACHO_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
285TOOL_GXX4MACHO_LINK_PROGRAM_DEPORD =
286define TOOL_GXX4MACHO_LINK_PROGRAM_CMDS
287 $(QUIET)$(APPEND) -n $(outbase).rsp $(objs)
288 $(QUIET)$(TOOL_GXX4MACHO_LD) $(flags) -o $(out)\
289 -filelist $(outbase).rsp\
290 $(foreach p,$(libpath), -L$(p))\
291 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
292endef
293
294
295## Link DLL
296# @param $(target) Normalized main target name.
297# @param $(out) Program name.
298# @param $(objs) Object files to link together.
299# @param $(libs) Libraries to search.
300# @param $(libpath) Library search paths.
301# @param $(flags) Flags.
302# @param $(dirdep) Directory creation dependency.
303# @param $(deps) Other dependencies.
304# @param $(othersrc) Unhandled sources.
305# @param $(custom_pre) Custom step invoked before linking.
306# @param $(custom_post) Custom step invoked after linking.
307# @param $(outbase) Output basename (full). Use this for list files and such.
308TOOL_GXX4MACHO_LINK_DLL_OUTPUT = $(outbase).rsp
309TOOL_GXX4MACHO_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
310TOOL_GXX4MACHO_LINK_DLL_DEPORD =
311define TOOL_GXX4MACHO_LINK_DLL_CMDS
312 $(QUIET)$(APPEND) -n $(outbase).rsp $(objs)
313 $(QUIET)$(TOOL_GXX4MACHO_LD) $(TOOL_GXX4MACHO_LDFLAGS.dll) $(flags) -o $(out)\
314 $(call TOOL_GXX4MACHO_LD_SONAME,$(target),$(out))\
315 -filelist $(outbase).rsp\
316 $(foreach p,$(libpath), -L$(p))\
317 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
318endef
319
320
321## Link system module (windows aka driver, linux aka kernel module)
322# @param $(target) Normalized main target name.
323# @param $(out) System module name.
324# @param $(objs) Object files to link together.
325# @param $(libs) Libraries to search.
326# @param $(libpath) Library search paths.
327# @param $(flags) Flags.
328# @param $(dirdep) Directory creation dependency.
329# @param $(deps) Other dependencies.
330# @param $(othersrc) Unhandled sources.
331# @param $(custom_pre) Custom step invoked before linking.
332# @param $(custom_post) Custom step invoked after linking.
333# @param $(outbase) Output basename (full). Use this for list files and such.
334TOOL_GXX4MACHO_LINK_SYSMOD_OUTPUT = $(outbase).rsp
335TOOL_GXX4MACHO_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
336TOOL_GXX4MACHO_LINK_SYSMOD_DEPORD =
337define TOOL_GXX4MACHO_LINK_SYSMOD_CMDS
338 $(QUIET)$(APPEND) -n $(outbase).rsp $(objs)
339 $(QUIET)$(TOOL_GXX4MACHO_LD_SYSMOD) $(TOOL_GXX4MACHO_LDFLAGS.sysmod) $(flags) -o $(out)\
340 -filelist $(outbase).rsp\
341 $(foreach p,$(libpath), -L$(p))\
342 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
343endef
344
Note: See TracBrowser for help on using the repository browser.