source: trunk/kBuild/tools/CLANGXXMACHO.kmk@ 3404

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

CLANG??MACHO.kmk: Must truncate the response file now that it is precious.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 22.0 KB
Line 
1# $Id: CLANGXXMACHO.kmk 3404 2020-07-06 12:56:51Z bird $
2## @file
3# kBuild Tool Config - LLVM Clang targeting Darwin (Mac OS X) Mach-O, for building C++ code.
4#
5
6#
7# Copyright (c) 2004-2020 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
34ifndef INCLUDED_DARWIN_COMMON_KMK
35 include $(KBUILD_PATH)/darwin-common.kmk
36endif
37
38TOOL_CLANGXXMACHO := LLVM Clang targeting Darwin (Mac OS X) Mach-O, for building C++ code.
39
40# Tool Specific Properties
41# PREFIX/SUFFIX: clang; PREFIX2/SUFFIX2: cctool;
42ifndef PATH_TOOL_CLANGXXMACHO
43 PATH_TOOL_CLANGXXMACHO := $(substr $(firstfile $(foreachfile toolchaindir, $(DARWINCMN_TOOLCHAIN_DIRS) \
44 , $(qwildcard ,$(toolchaindir)/usr/bin/clang++))), 1, -12)
45else
46 PATH_TOOL_CLANGXXMACHO := $(PATH_TOOL_CLANGXXMACHO)
47endif
48ifndef TOOL_CLANGXXMACHO_PREFIX
49 ifdef PATH_TOOL_CLANGXXMACHO
50 TOOL_CLANGXXMACHO_PREFIX := $(PATH_TOOL_CLANGXXMACHO)/bin/
51 else
52 TOOL_CLANGXXMACHO_PREFIX :=
53 endif
54endif
55ifndef TOOL_CLANGXXMACHO_SUFFIX
56 TOOL_CLANGXXMACHO_SUFFIX := $(HOSTSUFF_EXE)
57endif
58TOOL_CLANGXXMACHO_PREFIX2 ?= $(TOOL_CLANGXXMACHO_PREFIX)
59TOOL_CLANGXXMACHO_SUFFIX2 ?= $(TOOL_CLANGXXMACHO_SUFFIX)
60TOOL_CLANGXXMACHO_CC ?= $(TOOL_CLANGXXMACHO_PREFIX)clang$(TOOL_CLANGXXMACHO_SUFFIX)
61TOOL_CLANGXXMACHO_CXX ?= $(TOOL_CLANGXXMACHO_PREFIX)clang++$(TOOL_CLANGXXMACHO_SUFFIX)
62TOOL_CLANGXXMACHO_PCH ?= $(TOOL_CLANGXXMACHO_CXX)
63TOOL_CLANGXXMACHO_OBJC ?= $(TOOL_CLANGXXMACHO_PREFIX)clang$(TOOL_CLANGXXMACHO_SUFFIX)
64TOOL_CLANGXXMACHO_OBJCXX ?= $(TOOL_CLANGXXMACHO_PREFIX)clang$(TOOL_CLANGXXMACHO_SUFFIX)
65TOOL_CLANGXXMACHO_AS ?= $(TOOL_CLANGXXMACHO_PREFIX)clang$(TOOL_CLANGXXMACHO_SUFFIX)
66TOOL_CLANGXXMACHO_LD ?= $(TOOL_CLANGXXMACHO_PREFIX)clang++$(TOOL_CLANGXXMACHO_SUFFIX)
67TOOL_CLANGXXMACHO_LD_SYSMOD ?= $(TOOL_CLANGXXMACHO_PREFIX)clang++$(TOOL_CLANGXXMACHO_SUFFIX)
68TOOL_CLANGXXMACHO_LDFLAGS.dll ?= -dynamiclib
69TOOL_CLANGXXMACHO_LDFLAGS.sysmod ?= -r
70#TOOL_CLANGXXMACHO_LD_SONAME = -Wl,-dylib_install_name $(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
71TOOL_CLANGXXMACHO_DSYMUTIL ?= $(TOOL_CLANGXXMACHO_PREFIX)dsymutil$(TOOL_CLANGXXMACHO_SUFFIX)
72
73TOOL_CLANGXXMACHO_AR ?= $(TOOL_CLANGXXMACHO_PREFIX2)ar$(TOOL_CLANGXXMACHO_SUFFIX2)
74TOOL_CLANGXXMACHO_STRIP ?= $(TOOL_CLANGXXMACHO_PREFIX2)strip$(TOOL_CLANGXXMACHO_SUFFIX2)
75TOOL_CLANGXXMACHO_STRIP_PROGRAM ?= $(TOOL_CLANGXXMACHO_STRIP) -SXxru
76TOOL_CLANGXXMACHO_STRIP_DLL ?= $(TOOL_CLANGXXMACHO_STRIP) -Sxru
77TOOL_CLANGXXMACHO_STRIP_SYSMOD ?= $(TOOL_CLANGXXMACHO_STRIP) -Sru
78
79ifdef SLKRUNS
80TOOL_CLANGXXMACHO_CC += -fmessage-length=0
81TOOL_CLANGXXMACHO_CXX += -fmessage-length=0
82TOOL_CLANGXXMACHO_OBJC += -fmessage-length=0
83TOOL_CLANGXXMACHO_OBJCXX += -fmessage-length=0
84endif
85
86# General Properties used by kBuild
87TOOL_CLANGXXMACHO_COBJSUFF ?= .o
88TOOL_CLANGXXMACHO_CFLAGS ?=
89TOOL_CLANGXXMACHO_CFLAGS.debug ?= -g
90TOOL_CLANGXXMACHO_CFLAGS.profile ?= -O2 #-g -pg
91TOOL_CLANGXXMACHO_CFLAGS.release ?= -O2
92TOOL_CLANGXXMACHO_CINCS ?=
93TOOL_CLANGXXMACHO_CDEFS ?=
94
95TOOL_CLANGXXMACHO_CXXOBJSUFF ?= .o
96TOOL_CLANGXXMACHO_CXXFLAGS ?=
97TOOL_CLANGXXMACHO_CXXFLAGS.debug ?= -g
98TOOL_CLANGXXMACHO_CXXFLAGS.profile ?= -O2 #-g -pg
99TOOL_CLANGXXMACHO_CXXFLAGS.release ?= -O2
100TOOL_CLANGXXMACHO_CXXINCS ?=
101TOOL_CLANGXXMACHO_CXXDEFS ?=
102
103TOOL_CLANGXXMACHO_PCHOBJSUFF ?= .h.gch
104TOOL_CLANGXXMACHO_PCHFLAGS ?= $(TOOL_CLANGXXMACHO_CXXFLAGS)
105TOOL_CLANGXXMACHO_PCHFLAGS.debug ?= $(TOOL_CLANGXXMACHO_CXXFLAGS.debug)
106TOOL_CLANGXXMACHO_PCHFLAGS.profile ?= $(TOOL_CLANGXXMACHO_CXXFLAGS.profile)
107TOOL_CLANGXXMACHO_PCHFLAGS.release ?= $(TOOL_CLANGXXMACHO_CXXFLAGS.release)
108TOOL_CLANGXXMACHO_PCHINCS ?= $(TOOL_CLANGXXMACHO_CXXINCS)
109TOOL_CLANGXXMACHO_PCHDEFS ?= $(TOOL_CLANGXXMACHO_CXXDEFS)
110
111TOOL_CLANGXXMACHO_OBJCOBJSUFF ?= .o
112TOOL_CLANGXXMACHO_OBJCFLAGS ?=
113TOOL_CLANGXXMACHO_OBJCFLAGS.debug ?= -g
114TOOL_CLANGXXMACHO_OBJCFLAGS.profile?= -O2 #-g -pg
115TOOL_CLANGXXMACHO_OBJCFLAGS.release?= -O2
116TOOL_CLANGXXMACHO_OBJCINCS ?=
117TOOL_CLANGXXMACHO_OBJCDEFS ?=
118
119TOOL_CLANGXXMACHO_OBJCXXOBJSUFF ?= .o
120TOOL_CLANGXXMACHO_OBJCXXFLAGS ?=
121TOOL_CLANGXXMACHO_OBJCXXFLAGS.debug ?= -g
122TOOL_CLANGXXMACHO_OBJCXXFLAGS.profile ?= -O2 #-g -pg
123TOOL_CLANGXXMACHO_OBJCXXFLAGS.release ?= -O2
124TOOL_CLANGXXMACHO_OBJCXXINCS ?=
125TOOL_CLANGXXMACHO_OBJCXXDEFS ?=
126
127TOOL_CLANGXXMACHO_ASFLAGS ?= -x assembler-with-cpp
128TOOL_CLANGXXMACHO_ASFLAGS.debug ?= -g
129TOOL_CLANGXXMACHO_ASFLAGS.profile ?= -g
130TOOL_CLANGXXMACHO_ASOBJSUFF ?= .o
131
132TOOL_CLANGXXMACHO_ARFLAGS ?= -c -rs
133TOOL_CLANGXXMACHO_ARLIBSUFF ?= .a
134
135TOOL_CLANGXXMACHO_LDFLAGS ?=
136TOOL_CLANGXXMACHO_LDFLAGS.debug ?= -g
137TOOL_CLANGXXMACHO_LDFLAGS.profile ?= -g
138
139
140
141##
142# Calculate the files in the debug bundle.
143# @param 1 The whole output filename.
144# @param 2 The output filename sans suffix.
145TOOL_CLANGXXMACHO_DEBUG_BUNDLE_FN = \
146 $(1).dSYM/Contents/Info.plist \
147 $(1).dSYM/Contents/Resources/DWARF/$(notdir $(1))
148
149##
150# Calculate the files in the debug bundle.
151# @param 1 The whole linker output filename.
152# @param 2 The linker output filename sans suffix.
153# @param 3 The desired install name (no dir slash).
154# @remarks The Info.plist has some reference to the original name, but gdb
155# does not care and only check for a symbol file in the DWARF
156# directory with the same name as the debugged module.
157TOOL_CLANGXXMACHO_DEBUG_INSTALL_FN= \
158 $(3).dSYM/ \
159 $(3).dSYM/Contents/ \
160 $(3).dSYM/Contents/Resources/ \
161 $(3).dSYM/Contents/Resources/DWARF/ \
162 $(1).dSYM/Contents/Info.plist=>$(3).dSYM/Contents/Info.plist \
163 $(1).dSYM/Contents/Resources/DWARF/$(notdir $(1))=>$(3).dSYM/Contents/Resources/DWARF/$(notdir $(3))
164
165
166## Compile C source.
167# @param $(target) Normalized main target name.
168# @param $(source) Source filename (relative).
169# @param $(obj) Object file name. This shall be (re)created by the compilation.
170# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
171# @param $(flags) Flags.
172# @param $(defs) Definitions. No -D or something.
173# @param $(incs) Includes. No -I or something.
174# @param $(dirdep) Directory creation dependency.
175# @param $(deps) Other dependencies.
176#
177# @param $(outbase) Output basename (full). Use this for list files and such.
178# @param $(objsuff) Object suffix.
179TOOL_CLANGXXMACHO_COMPILE_C_DEPEND =
180TOOL_CLANGXXMACHO_COMPILE_C_DEPORD =
181TOOL_CLANGXXMACHO_COMPILE_C_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).i,)
182TOOL_CLANGXXMACHO_COMPILE_C_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
183define TOOL_CLANGXXMACHO_COMPILE_C_CMDS
184if "$(use_objcache)" != ""
185 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
186 --kObjCache-cpp $(outbase).i\
187 $(TOOL_CLANGXXMACHO_CC) -E -o -\
188 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
189 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
190 $(abspath $(source))\
191 --kObjCache-cc $(obj)\
192 $(TOOL_CLANGXXMACHO_CC) -c\
193 $(flags) -fpreprocessed -x c\
194 -o $(obj)\
195 -
196else
197 $(QUIET)$(TOOL_CLANGXXMACHO_CC) -c\
198 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
199 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
200 -o $(obj)\
201 $(abspath $(source))
202endif
203 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
204endef
205
206
207## Compile C++ 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.
219TOOL_CLANGXXMACHO_COMPILE_CXX_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).ii,)
220TOOL_CLANGXXMACHO_COMPILE_CXX_DEPEND = $($(target)_1_GCC_PCH_FILE)
221TOOL_CLANGXXMACHO_COMPILE_CXX_DEPORD =
222TOOL_CLANGXXMACHO_COMPILE_CXX_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
223define TOOL_CLANGXXMACHO_COMPILE_CXX_CMDS
224if "$(use_objcache)" != ""
225 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
226 --kObjCache-cpp $(outbase).ii\
227 $(TOOL_CLANGXXMACHO_CXX) -E -o - $(if-expr defined($(target)_PCH_HDR)\
228 ,-fpch-preprocess -Winvalid-pch -I$($(target)_1_GCC_PCH_DIR) -include $(basename $($(target)_1_GCC_PCH_FILE)),)\
229 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
230 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
231 $(abspath $(source))\
232 --kObjCache-cc $(obj)\
233 $(TOOL_CLANGXXMACHO_CXX) -c\
234 $(flags) -fpreprocessed $(if-expr defined($(target)_PCH_HDR),-fpch-preprocess,) -x c++\
235 -o $(obj)\
236 -
237else
238 $(QUIET)$(TOOL_CLANGXXMACHO_CXX) -c\
239 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
240 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
241 -o $(obj) $(if-expr defined($(target)_PCH_HDR) \
242 ,-Winvalid-pch -include $(basename $($(target)_1_GCC_PCH_FILE)),) \
243 $(abspath $(source))
244endif
245 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
246endef
247
248
249## Precompile C++ header.
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# @param $(outbase) Output basename (full). Use this for list files and such.
260# @param $(objsuff) Object suffix.
261TOOL_CLANGXXMACHO_COMPILE_PCH_OUTPUT = $($(target)_1_GCC_PCH_FILE)
262TOOL_CLANGXXMACHO_COMPILE_PCH_DEPEND =
263TOOL_CLANGXXMACHO_COMPILE_PCH_DEPORD = $($(target)_1_GCC_PCH_DIR)
264define TOOL_CLANGXXMACHO_COMPILE_PCH_CMDS
265 $(QUIET)$(TOOL_CLANGXXMACHO_PCH) -c\
266 $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
267 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
268 -o $(obj)\
269 $(abspath $(source))
270 $(INSTALL) --hard-link-files-when-possible -m 0644 -- "$(obj)" "$($(target)_1_GCC_PCH_FILE)"
271 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
272endef
273
274
275## Compile Objective-C source.
276# @param $(target) Normalized main target name.
277# @param $(source) Source filename (relative).
278# @param $(obj) Object file name. This shall be (re)created by the compilation.
279# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
280# @param $(flags) Flags.
281# @param $(defs) Definitions. No -D or something.
282# @param $(incs) Includes. No -I or something.
283# @param $(dirdep) Directory creation dependency.
284# @param $(deps) Other dependencies.
285# @param $(outbase) Output basename (full). Use this for list files and such.
286# @param $(objsuff) Object suffix.
287TOOL_CLANGXXMACHO_COMPILE_OBJC_DEPEND =
288TOOL_CLANGXXMACHO_COMPILE_OBJC_DEPORD =
289ifdef KBUILD_USE_KOBJCACHE
290TOOL_CLANGXXMACHO_COMPILE_OBJC_USES_KOBJCACHE = 1
291TOOL_CLANGXXMACHO_COMPILE_OBJC_OUTPUT = $(outbase).mi
292define TOOL_CLANGXXMACHO_COMPILE_OBJC_CMDS
293 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
294 --kObjCache-cpp $(outbase).ii\
295 $(TOOL_CLANGXXMACHO_OBJC) -E -o -\
296 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
297 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
298 $(abspath $(source))\
299 --kObjCache-cc $(obj)\
300 $(TOOL_CLANGXXMACHO_OBJC) -c\
301 $(flags) -fpreprocessed -x objective-c \
302 -o $(obj)\
303 -
304 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
305endef
306else # !KBUILD_USE_KOBJCACHE
307TOOL_CLANGXXMACHO_COMPILE_OBJC_OUTPUT =
308define TOOL_CLANGXXMACHO_COMPILE_OBJC_CMDS
309 $(QUIET)$(TOOL_CLANGXXMACHO_OBJC) -c\
310 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
311 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
312 -o $(obj)\
313 $(abspath $(source))
314 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
315endef
316endif # !KBUILD_USE_KOBJCACHE
317
318
319## Compile Objective-C++ source.
320# @param $(target) Normalized main target name.
321# @param $(source) Source filename (relative).
322# @param $(obj) Object file name. This shall be (re)created by the compilation.
323# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
324# @param $(flags) Flags.
325# @param $(defs) Definitions. No -D or something.
326# @param $(incs) Includes. No -I or something.
327# @param $(dirdep) Directory creation dependency.
328# @param $(deps) Other dependencies.
329# @param $(outbase) Output basename (full). Use this for list files and such.
330# @param $(objsuff) Object suffix.
331TOOL_CLANGXXMACHO_COMPILE_OBJCXX_DEPEND =
332TOOL_CLANGXXMACHO_COMPILE_OBJCXX_DEPORD =
333ifdef KBUILD_USE_KOBJCACHE
334TOOL_CLANGXXMACHO_COMPILE_OBJCXX_USES_KOBJCACHE = 1
335TOOL_CLANGXXMACHO_COMPILE_OBJCXX_OUTPUT = $(outbase).mii
336define TOOL_CLANGXXMACHO_COMPILE_OBJCXX_CMDS
337 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
338 --kObjCache-cpp $(outbase).mii\
339 $(TOOL_CLANGXXMACHO_OBJCXX) -E -o -\
340 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
341 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
342 $(abspath $(source))\
343 --kObjCache-cc $(obj)\
344 $(TOOL_CLANGXXMACHO_OBJCXX) -c\
345 $(flags) -fpreprocessed -x objective-c++ \
346 -o $(obj)\
347 -
348 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
349endef
350else # !KBUILD_USE_KOBJCACHE
351TOOL_CLANGXXMACHO_COMPILE_OBJCXX_OUTPUT =
352define TOOL_CLANGXXMACHO_COMPILE_OBJCXX_CMDS
353 $(QUIET)$(TOOL_CLANGXXMACHO_OBJCXX) -c\
354 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
355 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
356 -o $(obj)\
357 $(abspath $(source))
358 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
359endef
360endif # !KBUILD_USE_KOBJCACHE
361
362
363## Compile Assembly source.
364# @param $(target) Normalized main target name.
365# @param $(source) Source filename (relative).
366# @param $(obj) Object file name. This shall be (re)created by the compilation.
367# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
368# @param $(flags) Flags.
369# @param $(defs) Definitions. No -D or something.
370# @param $(incs) Includes. No -I or something.
371# @param $(dirdep) Directory creation dependency.
372# @param $(deps) Other dependencies.
373# @param $(outbase) Output basename (full). Use this for list files and such.
374# @param $(objsuff) Object suffix.
375#
376TOOL_CLANGXXMACHO_COMPILE_AS_OUTPUT =
377TOOL_CLANGXXMACHO_COMPILE_AS_DEPEND =
378TOOL_CLANGXXMACHO_COMPILE_AS_DEPORD =
379define TOOL_CLANGXXMACHO_COMPILE_AS_CMDS
380 $(QUIET)$(TOOL_CLANGXXMACHO_AS) -c\
381 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
382 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
383 -o $(obj)\
384 $(abspath $(source))
385 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
386endef
387
388
389## Link library
390# @param $(target) Normalized main target name.
391# @param $(out) Library name.
392# @param $(objs) Object files to put in the library.
393# @param $(flags) Flags.
394# @param $(dirdep) Directory creation dependency.
395# @param $(deps) Other dependencies.
396# @param $(othersrc) Unhandled sources.
397# @param $(outbase) Output basename (full). Use this for list files and such.
398TOOL_CLANGXXMACHO_LINK_LIBRARY_OUTPUT =
399TOOL_CLANGXXMACHO_LINK_LIBRARY_DEPEND = $(othersrc)
400TOOL_CLANGXXMACHO_LINK_LIBRARY_DEPORD =
401define TOOL_CLANGXXMACHO_LINK_LIBRARY_CMDS
402 $(if $(strip $(filter-out %.h.gch,$(objs))),$(call xargs,$(QUIET)$(TOOL_CLANGXXMACHO_AR) $(flags) $(out),$(filter-out %.h.gch,$(objs))))
403 $(foreach lib,$(othersrc)\
404 ,$(NL)$(TAB)$(call MSG_AR_MERGE,$(target),$(out),$(lib)) \
405 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))ar.tmp.dir/* \
406 $(NL)$(TAB)$(QUIET)$(MKDIR) -p $(dir $(outbase))/ar.tmp.dir/ \
407 $(NL)$(TAB)$(QUIET)(cd $(dir $(outbase))ar.tmp.dir/ \
408 && $(TOOL_CLANGXXMACHO_AR) -x $(abspath $(lib)) \
409 && $(RM_EXT) -f ./__.SYMDEF* \
410 && $(TOOL_CLANGXXMACHO_AR) $(flags) $(out) *) \
411 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))/ar.tmp.dir/* \
412 $(NL)$(TAB)$(QUIET)$(RMDIR) $(dir $(outbase))ar.tmp.dir/)
413endef
414
415
416## Link program
417# @param $(target) Normalized main target name.
418# @param $(out) Program name.
419# @param $(objs) Object files to link together.
420# @param $(libs) Libraries to search.
421# @param $(libpath) Library search paths.
422# @param $(flags) Flags.
423# @param $(dirdep) Directory creation dependency.
424# @param $(deps) Other dependencies.
425# @param $(othersrc) Unhandled sources.
426# @param $(custom_pre) Custom step invoked before linking.
427# @param $(custom_post) Custom step invoked after linking.
428# @param $(outbase) Output basename (full). Use this for list files and such.
429TOOL_CLANGXXMACHO_LINK_PROGRAM_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
430TOOL_CLANGXXMACHO_LINK_PROGRAM_OUTPUT_DEBUG = $(call TOOL_CLANGXXMACHO_DEBUG_BUNDLE_FN,$(out))
431TOOL_CLANGXXMACHO_LINK_PROGRAM_DEBUG_INSTALL_FN = $(TOOL_CLANGXXMACHO_DEBUG_INSTALL_FN)
432TOOL_CLANGXXMACHO_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
433TOOL_CLANGXXMACHO_LINK_PROGRAM_DEPORD =
434define TOOL_CLANGXXMACHO_LINK_PROGRAM_CMDS
435 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
436 $(QUIET)$(TOOL_CLANGXXMACHO_LD) $(flags) -o $(out)\
437 -filelist $(outbase).rsp\
438 $(foreach p,$(libpath), -L$(p))\
439 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
440 ifeq ($(ld_debug),split)
441 $(QUIET)$(TOOL_CLANGXXMACHO_DSYMUTIL) -o $(out).dSYM/ $(out)
442 $(QUIET)$(TOOL_CLANGXXMACHO_STRIP_PROGRAM) $(out)
443 endif
444endef
445
446
447## Link DLL
448# @param $(target) Normalized main target name.
449# @param $(out) Program name.
450# @param $(objs) Object files to link together.
451# @param $(libs) Libraries to search.
452# @param $(libpath) Library search paths.
453# @param $(flags) Flags.
454# @param $(dirdep) Directory creation dependency.
455# @param $(deps) Other dependencies.
456# @param $(othersrc) Unhandled sources.
457# @param $(custom_pre) Custom step invoked before linking.
458# @param $(custom_post) Custom step invoked after linking.
459# @param $(outbase) Output basename (full). Use this for list files and such.
460TOOL_CLANGXXMACHO_LINK_DLL_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
461TOOL_CLANGXXMACHO_LINK_DLL_OUTPUT_DEBUG = $(call TOOL_CLANGXXMACHO_DEBUG_BUNDLE_FN,$(out))
462TOOL_CLANGXXMACHO_LINK_DLL_DEBUG_INSTALL_FN = $(TOOL_CLANGXXMACHO_DEBUG_INSTALL_FN)
463TOOL_CLANGXXMACHO_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
464TOOL_CLANGXXMACHO_LINK_DLL_DEPORD =
465define TOOL_CLANGXXMACHO_LINK_DLL_CMDS
466 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
467 $(QUIET)$(TOOL_CLANGXXMACHO_LD) $(TOOL_CLANGXXMACHO_LDFLAGS.dll) $(flags) -o $(out)\
468 $(call TOOL_CLANGXXMACHO_LD_SONAME,$(target),$(out))\
469 -filelist $(outbase).rsp\
470 $(foreach p,$(libpath), -L$(p))\
471 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
472 ifeq ($(ld_debug),split)
473 $(QUIET)$(TOOL_CLANGXXMACHO_DSYMUTIL) -o $(out).dSYM/ $(out)
474 $(QUIET)$(TOOL_CLANGXXMACHO_STRIP_DLL) $(out)
475 endif
476endef
477
478
479## Link system module (windows aka driver, linux aka kernel module)
480# @param $(target) Normalized main target name.
481# @param $(out) System module name.
482# @param $(objs) Object files to link together.
483# @param $(libs) Libraries to search.
484# @param $(libpath) Library search paths.
485# @param $(flags) Flags.
486# @param $(dirdep) Directory creation dependency.
487# @param $(deps) Other dependencies.
488# @param $(othersrc) Unhandled sources.
489# @param $(custom_pre) Custom step invoked before linking.
490# @param $(custom_post) Custom step invoked after linking.
491# @param $(outbase) Output basename (full). Use this for list files and such.
492TOOL_CLANGXXMACHO_LINK_SYSMOD_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
493TOOL_CLANGXXMACHO_LINK_SYSMOD_OUTPUT_DEBUG = $(call TOOL_CLANGXXMACHO_DEBUG_BUNDLE_FN,$(out))
494TOOL_CLANGXXMACHO_LINK_SYSMOD_DEBUG_INSTALL_FN = $(TOOL_CLANGXXMACHO_DEBUG_INSTALL_FN)
495TOOL_CLANGXXMACHO_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
496TOOL_CLANGXXMACHO_LINK_SYSMOD_DEPORD =
497define TOOL_CLANGXXMACHO_LINK_SYSMOD_CMDS
498 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
499 $(QUIET)$(TOOL_CLANGXXMACHO_LD_SYSMOD) $(TOOL_CLANGXXMACHO_LDFLAGS.sysmod) $(flags) -o $(out)\
500 -filelist $(outbase).rsp\
501 $(foreach p,$(libpath), -L$(p))\
502 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
503 ifeq ($(ld_debug),split)
504 $(QUIET)$(TOOL_CLANGXXMACHO_DSYMUTIL) -o $(out).dSYM/ $(out)
505 $(QUIET)$(TOOL_CLANGXXMACHO_STRIP_SYSMOD) $(out)
506 endif
507endef
508
Note: See TracBrowser for help on using the repository browser.