source: trunk/kBuild/tools/CLANGXXMACHO.kmk

Last change on this file was 3580, checked in by bird, 3 years ago

tools/CLANG*,tools/LLVM*: Missed a few PCH related places (qaddprefix/-I/-D).

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