source: trunk/kBuild/tools/VCC143-CLANGXX.kmk@ 3669

Last change on this file since 3669 was 3633, checked in by bird, 9 months ago

tools/VCC143-CLANGXX.kmk: Corrected PREFIX2/SUFFIX2 mixup.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 26.5 KB
Line 
1# $Id: VCC143-CLANGXX.kmk 3633 2024-10-27 21:22:42Z bird $
2## @file
3# kBuild Tool Config - LLVM Clang v17.0.x shipping with Visual C++ 14.3 (/ 2022 / MSC v19.30+), for building C++ code.
4#
5# @note This is the pure Clang/LLVM stuff. We're not using the clang-cl frontend here.
6#
7# @todo This is rather untested/incomplete. Only the assembler bit is currently
8# in active use.
9#
10
11#
12# Copyright (c) 2004-2024 knut st. osmundsen <bird-kBuild-spam-xviiv@anduin.net>
13#
14# This file is part of kBuild.
15#
16# kBuild is free software; you can redistribute it and/or modify
17# it under the terms of the GNU General Public License as published by
18# the Free Software Foundation; either version 2 of the License, or
19# (at your option) any later version.
20#
21# kBuild is distributed in the hope that it will be useful,
22# but WITHOUT ANY WARRANTY; without even the implied warranty of
23# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24# GNU General Public License for more details.
25#
26# You should have received a copy of the GNU General Public License
27# along with kBuild; if not, write to the Free Software
28# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29#
30#
31# As a special exception you are granted permission to include this file, via
32# the kmk include directive, as you wish without this in itself causing the
33# resulting makefile, program or whatever to be covered by the GPL license.
34# This exception does not however invalidate any other reasons why the makefile,
35# program, whatever should not be covered the GPL.
36#
37#
38
39TOOL_VCC143-CLANGXX := LLVM Clang v17.0.x shipping with Visual C++ 14.3 (/ 2022 / MSC v19.30+), for building C++ code.
40
41ifndef TOOL_VCC143
42 include $(KBUILD_PATH)/tools/VCC143.kmk
43endif
44
45
46#
47# Tool Specific Properties
48#
49
50# The path is relative to the VCC143 one.
51ifdef PATH_TOOL_VCC143
52 PATH_TOOL_VCC143-CLANGXX_LLVM := $(PATH_TOOL_VCC143-CLANGXX_LLVM)
53endif
54ifeq ($(PATH_TOOL_VCC143-CLANGXX_LLVM),)
55 ifeq ($(tolower $(substr $(qdir u,$(PATH_TOOL_VCC143)), -12)),/tools/msvc/)
56 PATH_TOOL_VCC143-CLANGXX_LLVM := $(firstfile $(qwildcard ,$(substr $(qdir ,$(PATH_TOOL_VCC143)),1,-6)/Llvm))
57 else
58 PATH_TOOL_VCC143-CLANGXX_LLVM := $(qabspath ,$(firstfile $(qwildcard ,\
59 $(PATH_TOOL_VCC143)/Tools/Llvm \
60 $(PATH_TOOL_VCC143)/../Tools/Llvm \
61 $(PATH_TOOL_VCC143)/../../Tools/Llvm \
62 $(PATH_TOOL_VCC143)/../../../Tools/Llvm \
63 $(PATH_TOOL_VCC143)/../../../../Tools/Llvm)))
64 endif
65 ifeq ($(PATH_TOOL_VCC143-CLANGXX_LLVM),)
66 PATH_TOOL_VCC143-CLANGXX_LLVM := $(PATH_TOOL_VCC143)/../../Llvm
67 $(warning kBuild: PATH_TOOL_VCC143-CLANGXX_LLVM cannot be determined! Using "$(PATH_TOOL_VCC143-CLANGXX_LLVM)" as placeholder)
68 endif
69endif
70
71# The directories for each host / target architecture.
72PATH_TOOL_VCC143-CLANGXX_LLVM_ARCH.x86 = $(PATH_TOOL_VCC143-CLANGXX_LLVM)
73PATH_TOOL_VCC143-CLANGXX_LLVM_ARCH.amd64 = $(PATH_TOOL_VCC143-CLANGXX_LLVM)/x64
74PATH_TOOL_VCC143-CLANGXX_LLVM_ARCH.arm32 = $(PATH_TOOL_VCC143-CLANGXX_LLVM)/ARM
75PATH_TOOL_VCC143-CLANGXX_LLVM_ARCH.arm64 = $(PATH_TOOL_VCC143-CLANGXX_LLVM)/ARM64
76
77# PREFIX/SUFFIX: clang; PREFIX2/SUFFIX2: llvm-;
78ifndef TOOL_VCC143-CLANGXX_PREFIX
79 TOOL_VCC143-CLANGXX_PREFIX := $(requote sh,$(PATH_TOOL_VCC143-CLANGXX_LLVM_ARCH.$(KBUILD_HOST_ARCH))/bin/)
80endif
81ifndef TOOL_VCC143-CLANGXX_SUFFIX
82 TOOL_VCC143-CLANGXX_SUFFIX := $(HOSTSUFF_EXE)
83endif
84TOOL_VCC143-CLANGXX_PREFIX2 ?= $(TOOL_VCC143-CLANGXX_PREFIX)llvm-
85TOOL_VCC143-CLANGXX_SUFFIX2 ?= $(TOOL_VCC143-CLANGXX_SUFFIX)
86TOOL_VCC143-CLANGXX_CC ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang$(TOOL_VCC143-CLANGXX_SUFFIX)
87TOOL_VCC143-CLANGXX_CXX ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang++$(TOOL_VCC143-CLANGXX_SUFFIX)
88TOOL_VCC143-CLANGXX_PCH ?= $(TOOL_VCC143-CLANGXX_CXX)
89TOOL_VCC143-CLANGXX_OBJC ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang$(TOOL_VCC143-CLANGXX_SUFFIX)
90TOOL_VCC143-CLANGXX_OBJCXX ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang$(TOOL_VCC143-CLANGXX_SUFFIX)
91TOOL_VCC143-CLANGXX_AS ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang$(TOOL_VCC143-CLANGXX_SUFFIX)
92TOOL_VCC143-CLANGXX_LD ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang++$(TOOL_VCC143-CLANGXX_SUFFIX)
93TOOL_VCC143-CLANGXX_LD_SYSMOD ?= $(TOOL_VCC143-CLANGXX_PREFIX)clang++$(TOOL_VCC143-CLANGXX_SUFFIX)
94#TOOL_VCC143-CLANGXX_LDFLAGS.dll ?= -dynamiclib
95#TOOL_VCC143-CLANGXX_LDFLAGS.sysmod ?= -r
96#TOOL_VCC143-CLANGXX_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)))
97#TOOL_VCC143-CLANGXX_DSYMUTIL ?= $(TOOL_VCC143-CLANGXX_PREFIX)dsymutil$(TOOL_VCC143-CLANGXX_SUFFIX)
98
99TOOL_VCC143-CLANGXX_AR ?= $(TOOL_VCC143-CLANGXX_PREFIX2)ar$(TOOL_VCC143-CLANGXX_SUFFIX2)
100TOOL_VCC143-CLANGXX_STRIP ?= $(TOOL_VCC143-CLANGXX_PREFIX2)strip$(TOOL_VCC143-CLANGXX_SUFFIX2)
101TOOL_VCC143-CLANGXX_STRIP_PROGRAM ?= $(TOOL_VCC143-CLANGXX_STRIP) -SXxru
102TOOL_VCC143-CLANGXX_STRIP_DLL ?= $(TOOL_VCC143-CLANGXX_STRIP) -Sxru
103TOOL_VCC143-CLANGXX_STRIP_SYSMOD ?= $(TOOL_VCC143-CLANGXX_STRIP) -Sru
104
105# General Properties used by kBuild
106TOOL_VCC143-CLANGXX_COBJSUFF ?= .o
107TOOL_VCC143-CLANGXX_COBJSUFF.win ?= .obj
108TOOL_VCC143-CLANGXX_CFLAGS ?=
109TOOL_VCC143-CLANGXX_CFLAGS.debug ?= -g
110TOOL_VCC143-CLANGXX_CFLAGS.profile ?= -O2 #-g -pg
111TOOL_VCC143-CLANGXX_CFLAGS.release ?= -O2
112TOOL_VCC143-CLANGXX_CFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
113TOOL_VCC143-CLANGXX_CFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
114TOOL_VCC143-CLANGXX_CFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
115TOOL_VCC143-CLANGXX_CFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
116TOOL_VCC143-CLANGXX_CINCS ?=
117TOOL_VCC143-CLANGXX_CDEFS ?=
118
119TOOL_VCC143-CLANGXX_CXXOBJSUFF ?= .o
120TOOL_VCC143-CLANGXX_CXXOBJSUFF.win ?= .obj
121TOOL_VCC143-CLANGXX_CXXFLAGS ?=
122TOOL_VCC143-CLANGXX_CXXFLAGS.debug ?= -g
123TOOL_VCC143-CLANGXX_CXXFLAGS.profile ?= -O2 #-g -pg
124TOOL_VCC143-CLANGXX_CXXFLAGS.release ?= -O2
125TOOL_VCC143-CLANGXX_CXXFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
126TOOL_VCC143-CLANGXX_CXXFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
127TOOL_VCC143-CLANGXX_CXXFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
128TOOL_VCC143-CLANGXX_CXXFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
129TOOL_VCC143-CLANGXX_CXXINCS ?=
130TOOL_VCC143-CLANGXX_CXXDEFS ?=
131
132TOOL_VCC143-CLANGXX_PCHOBJSUFF ?= .h.gch
133TOOL_VCC143-CLANGXX_PCHFLAGS ?= $(TOOL_VCC143-CLANGXX_CXXFLAGS)
134TOOL_VCC143-CLANGXX_PCHFLAGS.debug ?= $(TOOL_VCC143-CLANGXX_CXXFLAGS.debug)
135TOOL_VCC143-CLANGXX_PCHFLAGS.profile ?= $(TOOL_VCC143-CLANGXX_CXXFLAGS.profile)
136TOOL_VCC143-CLANGXX_PCHFLAGS.release ?= $(TOOL_VCC143-CLANGXX_CXXFLAGS.release)
137TOOL_VCC143-CLANGXX_PCHFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
138TOOL_VCC143-CLANGXX_PCHFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
139TOOL_VCC143-CLANGXX_PCHFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
140TOOL_VCC143-CLANGXX_PCHFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
141TOOL_VCC143-CLANGXX_PCHINCS ?= $(TOOL_VCC143-CLANGXX_CXXINCS)
142TOOL_VCC143-CLANGXX_PCHDEFS ?= $(TOOL_VCC143-CLANGXX_CXXDEFS)
143
144TOOL_VCC143-CLANGXX_OBJCOBJSUFF ?= .o
145TOOL_VCC143-CLANGXX_OBJCOBJSUFF.win ?= .obj
146TOOL_VCC143-CLANGXX_OBJCFLAGS ?=
147TOOL_VCC143-CLANGXX_OBJCFLAGS.debug ?= -g
148TOOL_VCC143-CLANGXX_OBJCFLAGS.profile ?= -O2 #-g -pg
149TOOL_VCC143-CLANGXX_OBJCFLAGS.release ?= -O2
150TOOL_VCC143-CLANGXX_OBJCFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
151TOOL_VCC143-CLANGXX_OBJCFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
152TOOL_VCC143-CLANGXX_OBJCFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
153TOOL_VCC143-CLANGXX_OBJCFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
154TOOL_VCC143-CLANGXX_OBJCINCS ?=
155TOOL_VCC143-CLANGXX_OBJCDEFS ?=
156
157TOOL_VCC143-CLANGXX_OBJCXXOBJSUFF ?= .o
158TOOL_VCC143-CLANGXX_OBJCXXOBJSUFF.win ?= .obj
159TOOL_VCC143-CLANGXX_OBJCXXFLAGS ?=
160TOOL_VCC143-CLANGXX_OBJCXXFLAGS.debug ?= -g
161TOOL_VCC143-CLANGXX_OBJCXXFLAGS.profile ?= -O2 #-g -pg
162TOOL_VCC143-CLANGXX_OBJCXXFLAGS.release ?= -O2
163TOOL_VCC143-CLANGXX_OBJCXXFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
164TOOL_VCC143-CLANGXX_OBJCXXFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
165TOOL_VCC143-CLANGXX_OBJCXXFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
166TOOL_VCC143-CLANGXX_OBJCXXFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
167TOOL_VCC143-CLANGXX_OBJCXXINCS ?=
168TOOL_VCC143-CLANGXX_OBJCXXDEFS ?=
169
170TOOL_VCC143-CLANGXX_ASOBJSUFF ?= .o
171TOOL_VCC143-CLANGXX_ASOBJSUFF.win ?= .obj
172TOOL_VCC143-CLANGXX_ASFLAGS ?= -x assembler-with-cpp
173TOOL_VCC143-CLANGXX_ASFLAGS.debug ?= -g
174TOOL_VCC143-CLANGXX_ASFLAGS.profile ?= -g
175TOOL_VCC143-CLANGXX_ASFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
176TOOL_VCC143-CLANGXX_ASFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
177TOOL_VCC143-CLANGXX_ASFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
178TOOL_VCC143-CLANGXX_ASFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
179
180TOOL_VCC143-CLANGXX_ARFLAGS ?= -c -rs
181TOOL_VCC143-CLANGXX_ARLIBSUFF ?= .a
182TOOL_VCC143-CLANGXX_ARLIBSUFF.win ?= .lib
183
184TOOL_VCC143-CLANGXX_LDFLAGS ?=
185TOOL_VCC143-CLANGXX_LDFLAGS.debug ?= -g
186TOOL_VCC143-CLANGXX_LDFLAGS.profile ?= -g
187TOOL_VCC143-CLANGXX_LDFLAGS.win.x86 ?= --target=x86-pc-windows-msvc
188TOOL_VCC143-CLANGXX_LDFLAGS.win.amd64 ?= --target=x86_64-pc-windows-msvc
189TOOL_VCC143-CLANGXX_LDFLAGS.win.arm32 ?= --target=arm-pc-windows-msvce:
190TOOL_VCC143-CLANGXX_LDFLAGS.win.arm64 ?= --target=arm64-pc-windows-msvc
191
192
193
194
195## Compile C source.
196# @param $(target) Normalized main target name.
197# @param $(source) Source filename (relative).
198# @param $(obj) Object file name. This shall be (re)created by the compilation.
199# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
200# @param $(flags) Flags.
201# @param $(defs) Definitions. No -D or something.
202# @param $(incs) Includes. No -I or something.
203# @param $(dirdep) Directory creation dependency.
204# @param $(deps) Other dependencies.
205#
206# @param $(outbase) Output basename (full). Use this for list files and such.
207# @param $(objsuff) Object suffix.
208TOOL_VCC143-CLANGXX_COMPILE_C_DEPEND =
209TOOL_VCC143-CLANGXX_COMPILE_C_DEPORD =
210TOOL_VCC143-CLANGXX_COMPILE_C_OUTPUT_MAYBE = $(dep).unix.slash
211TOOL_VCC143-CLANGXX_COMPILE_C_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).i,)
212TOOL_VCC143-CLANGXX_COMPILE_C_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
213define TOOL_VCC143-CLANGXX_COMPILE_C_CMDS
214if "$(use_objcache)" != ""
215 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
216 --kObjCache-cpp $(outbase).i\
217 $(TOOL_VCC143-CLANGXX_CC) -E -o -\
218 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
219 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
220 $(abspath $(source))\
221 --kObjCache-cc $(obj)\
222 $(TOOL_VCC143-CLANGXX_CC) -c\
223 $(flags) -fpreprocessed -x c\
224 -o $(obj)\
225 -
226else
227 $(QUIET)$(TOOL_VCC143-CLANGXX_CC) -c\
228 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
229 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
230 -o $(obj)\
231 $(abspath $(source))
232endif
233 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
234 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
235 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
236endef
237
238
239## Compile C++ source.
240# @param $(target) Normalized main target name.
241# @param $(source) Source filename (relative).
242# @param $(obj) Object file name. This shall be (re)created by the compilation.
243# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
244# @param $(flags) Flags.
245# @param $(defs) Definitions. No -D or something.
246# @param $(incs) Includes. No -I or something.
247# @param $(dirdep) Directory creation dependency.
248# @param $(deps) Other dependencies.
249# @param $(outbase) Output basename (full). Use this for list files and such.
250# @param $(objsuff) Object suffix.
251TOOL_VCC143-CLANGXX_COMPILE_CXX_DEPEND = $($(target)_1_GCC_PCH_FILE)
252TOOL_VCC143-CLANGXX_COMPILE_CXX_DEPORD =
253TOOL_VCC143-CLANGXX_COMPILE_CXX_OUTPUT_MAYBE = $(dep).unix.slash
254TOOL_VCC143-CLANGXX_COMPILE_CXX_OUTPUT = $(if-expr "$(use_objcache)" != "",$(outbase).ii,)
255TOOL_VCC143-CLANGXX_COMPILE_CXX_USES_KOBJCACHE = $(if-expr "$(use_objcache)" != "",1,)
256define TOOL_VCC143-CLANGXX_COMPILE_CXX_CMDS
257if "$(use_objcache)" != ""
258 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
259 --kObjCache-cpp $(outbase).ii\
260 $(TOOL_VCC143-CLANGXX_CXX) -E -o - $(if-expr defined($(target)_PCH_HDR)\
261 ,-fpch-preprocess -Winvalid-pch -I$($(target)_1_GCC_PCH_DIR) -include $(basename $($(target)_1_GCC_PCH_FILE)),)\
262 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
263 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
264 $(abspath $(source))\
265 --kObjCache-cc $(obj)\
266 $(TOOL_VCC143-CLANGXX_CXX) -c\
267 $(flags) -fpreprocessed $(if-expr defined($(target)_PCH_HDR),-fpch-preprocess,) -x c++\
268 -o $(obj)\
269 -
270else
271 $(QUIET)$(TOOL_VCC143-CLANGXX_CXX) -c\
272 $(flags) $(qaddprefix sh,-I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(qaddprefix sh,-D, $(defs))\
273 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
274 -o $(obj) $(if-expr defined($(target)_PCH_HDR) \
275 ,-Winvalid-pch -include $(basename $($(target)_1_GCC_PCH_FILE)),) \
276 $(abspath $(source))
277endif
278 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
279 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
280 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
281endef
282
283
284## Precompile C++ header.
285# @param $(target) Normalized main target name.
286# @param $(source) Source filename (relative).
287# @param $(obj) Object file name. This shall be (re)created by the compilation.
288# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
289# @param $(flags) Flags.
290# @param $(defs) Definitions. No -D or something.
291# @param $(incs) Includes. No -I or something.
292# @param $(dirdep) Directory creation dependency.
293# @param $(deps) Other dependencies.
294# @param $(outbase) Output basename (full). Use this for list files and such.
295# @param $(objsuff) Object suffix.
296TOOL_VCC143-CLANGXX_COMPILE_PCH_DEPEND =
297TOOL_VCC143-CLANGXX_COMPILE_PCH_DEPORD = $($(target)_1_GCC_PCH_DIR)
298TOOL_VCC143-CLANGXX_COMPILE_PCH_OUTPUT = $($(target)_1_GCC_PCH_FILE)
299TOOL_VCC143-CLANGXX_COMPILE_PCH_OUTPUT_MAYBE = $(dep).unix.slash
300define TOOL_VCC143-CLANGXX_COMPILE_PCH_CMDS
301 $(QUIET)$(TOOL_VCC143-CLANGXX_PCH) -c\
302 $(flags) $(qaddprefix sh,-I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
303 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
304 -o $(obj)\
305 $(abspath $(source))
306 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
307 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
308 $(INSTALL) --hard-link-files-when-possible -m 0644 -- "$(obj)" "$($(target)_1_GCC_PCH_FILE)"
309 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
310endef
311
312
313## Compile Objective-C source.
314# @param $(target) Normalized main target name.
315# @param $(source) Source filename (relative).
316# @param $(obj) Object file name. This shall be (re)created by the compilation.
317# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
318# @param $(flags) Flags.
319# @param $(defs) Definitions. No -D or something.
320# @param $(incs) Includes. No -I or something.
321# @param $(dirdep) Directory creation dependency.
322# @param $(deps) Other dependencies.
323# @param $(outbase) Output basename (full). Use this for list files and such.
324# @param $(objsuff) Object suffix.
325TOOL_VCC143-CLANGXX_COMPILE_OBJC_DEPEND =
326TOOL_VCC143-CLANGXX_COMPILE_OBJC_DEPORD =
327TOOL_VCC143-CLANGXX_COMPILE_OBJC_OUTPUT_MAYBE = $(dep).unix.slash
328ifdef KBUILD_USE_KOBJCACHE
329TOOL_VCC143-CLANGXX_COMPILE_OBJC_USES_KOBJCACHE = 1
330TOOL_VCC143-CLANGXX_COMPILE_OBJC_OUTPUT = $(outbase).mi
331define TOOL_VCC143-CLANGXX_COMPILE_OBJC_CMDS
332 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
333 --kObjCache-cpp $(outbase).ii\
334 $(TOOL_VCC143-CLANGXX_OBJC) -E -o -\
335 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
336 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
337 $(abspath $(source))\
338 --kObjCache-cc $(obj)\
339 $(TOOL_VCC143-CLANGXX_OBJC) -c\
340 $(flags) -fpreprocessed -x objective-c \
341 -o $(obj)\
342 -
343 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
344 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
345 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
346endef
347else # !KBUILD_USE_KOBJCACHE
348TOOL_VCC143-CLANGXX_COMPILE_OBJC_OUTPUT =
349define TOOL_VCC143-CLANGXX_COMPILE_OBJC_CMDS
350 $(QUIET)$(TOOL_VCC143-CLANGXX_OBJC) -c\
351 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
352 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
353 -o $(obj)\
354 $(abspath $(source))
355 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
356 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
357 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
358endef
359endif # !KBUILD_USE_KOBJCACHE
360
361
362## Compile Objective-C++ source.
363# @param $(target) Normalized main target name.
364# @param $(source) Source filename (relative).
365# @param $(obj) Object file name. This shall be (re)created by the compilation.
366# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
367# @param $(flags) Flags.
368# @param $(defs) Definitions. No -D or something.
369# @param $(incs) Includes. No -I or something.
370# @param $(dirdep) Directory creation dependency.
371# @param $(deps) Other dependencies.
372# @param $(outbase) Output basename (full). Use this for list files and such.
373# @param $(objsuff) Object suffix.
374TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_DEPEND =
375TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_DEPORD =
376TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_OUTPUT_MAYBE = $(dep).unix.slash
377ifdef KBUILD_USE_KOBJCACHE
378TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_USES_KOBJCACHE = 1
379TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_OUTPUT = $(outbase).mii
380define TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_CMDS
381 $(QUIET)$(KOBJCACHE) -f $(outbase).koc -d $(PATH_OBJCACHE) -t $(bld_trg).$(bld_trg_arch) -p\
382 --kObjCache-cpp $(outbase).mii\
383 $(TOOL_VCC143-CLANGXX_OBJCXX) -E -o -\
384 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
385 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
386 $(abspath $(source))\
387 --kObjCache-cc $(obj)\
388 $(TOOL_VCC143-CLANGXX_OBJCXX) -c\
389 $(flags) -fpreprocessed -x objective-c++ \
390 -o $(obj)\
391 -
392 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
393 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
394 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
395endef
396else # !KBUILD_USE_KOBJCACHE
397TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_OUTPUT =
398define TOOL_VCC143-CLANGXX_COMPILE_OBJCXX_CMDS
399 $(QUIET)$(TOOL_VCC143-CLANGXX_OBJCXX) -c\
400 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
401 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
402 -o $(obj)\
403 $(abspath $(source))
404 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
405 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
406 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
407endef
408endif # !KBUILD_USE_KOBJCACHE
409
410
411## Compile Assembly source.
412# @param $(target) Normalized main target name.
413# @param $(source) Source filename (relative).
414# @param $(obj) Object file name. This shall be (re)created by the compilation.
415# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
416# @param $(flags) Flags.
417# @param $(defs) Definitions. No -D or something.
418# @param $(incs) Includes. No -I or something.
419# @param $(dirdep) Directory creation dependency.
420# @param $(deps) Other dependencies.
421# @param $(outbase) Output basename (full). Use this for list files and such.
422# @param $(objsuff) Object suffix.
423#
424TOOL_VCC143-CLANGXX_COMPILE_AS_DEPEND =
425TOOL_VCC143-CLANGXX_COMPILE_AS_DEPORD =
426TOOL_VCC143-CLANGXX_COMPILE_AS_OUTPUT =
427TOOL_VCC143-CLANGXX_COMPILE_AS_OUTPUT_MAYBE = $(dep).unix.slash
428define TOOL_VCC143-CLANGXX_COMPILE_AS_CMDS
429 $(QUIET)$(TOOL_VCC143-CLANGXX_AS) -c\
430 $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
431 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
432 -o $(obj)\
433 $(abspath $(source))
434 $(QUIET)$(SED) --output "$(dep).unix.slash" -e 's,\\\([^ :]\),/\1,g' "$(dep)"
435 $(QUIET)$(MV) -f -- "$(dep).unix.slash" "$(dep)"
436 $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
437endef
438
439
440## Link library
441# @param $(target) Normalized main target name.
442# @param $(out) Library name.
443# @param $(objs) Object files to put in the library.
444# @param $(flags) Flags.
445# @param $(dirdep) Directory creation dependency.
446# @param $(deps) Other dependencies.
447# @param $(othersrc) Unhandled sources.
448# @param $(outbase) Output basename (full). Use this for list files and such.
449TOOL_VCC143-CLANGXX_LINK_LIBRARY_OUTPUT =
450TOOL_VCC143-CLANGXX_LINK_LIBRARY_DEPEND = $(othersrc)
451TOOL_VCC143-CLANGXX_LINK_LIBRARY_DEPORD =
452define TOOL_VCC143-CLANGXX_LINK_LIBRARY_CMDS
453 $(if $(strip $(filter-out %.h.gch,$(objs))),$(call xargs,$(QUIET)$(TOOL_VCC143-CLANGXX_AR) $(flags) $(out),$(filter-out %.h.gch,$(objs))))
454 $(foreach lib,$(othersrc)\
455 ,$(NL)$(TAB)$(call MSG_AR_MERGE,$(target),$(out),$(lib)) \
456 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))ar.tmp.dir/* \
457 $(NL)$(TAB)$(QUIET)$(MKDIR) -p $(dir $(outbase))/ar.tmp.dir/ \
458 $(NL)$(TAB)$(QUIET)(cd $(dir $(outbase))ar.tmp.dir/ \
459 && $(TOOL_VCC143-CLANGXX_AR) -x $(abspath $(lib)) \
460 && $(RM_EXT) -f ./__.SYMDEF* \
461 && $(TOOL_VCC143-CLANGXX_AR) $(flags) $(out) *) \
462 $(NL)$(TAB)$(QUIET)$(RM_EXT) -f $(dir $(outbase))/ar.tmp.dir/* \
463 $(NL)$(TAB)$(QUIET)$(RMDIR) $(dir $(outbase))ar.tmp.dir/)
464endef
465
466
467## Link program
468# @param $(target) Normalized main target name.
469# @param $(out) Program name.
470# @param $(objs) Object files to link together.
471# @param $(libs) Libraries to search.
472# @param $(libpath) Library search paths.
473# @param $(flags) Flags.
474# @param $(dirdep) Directory creation dependency.
475# @param $(deps) Other dependencies.
476# @param $(othersrc) Unhandled sources.
477# @param $(custom_pre) Custom step invoked before linking.
478# @param $(custom_post) Custom step invoked after linking.
479# @param $(outbase) Output basename (full). Use this for list files and such.
480TOOL_VCC143-CLANGXX_LINK_PROGRAM_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
481TOOL_VCC143-CLANGXX_LINK_PROGRAM_OUTPUT_DEBUG = $(call TOOL_VCC143-CLANGXX_DEBUG_BUNDLE_FN,$(out))
482TOOL_VCC143-CLANGXX_LINK_PROGRAM_DEBUG_INSTALL_FN = $(TOOL_VCC143-CLANGXX_DEBUG_INSTALL_FN)
483TOOL_VCC143-CLANGXX_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
484TOOL_VCC143-CLANGXX_LINK_PROGRAM_DEPORD =
485define TOOL_VCC143-CLANGXX_LINK_PROGRAM_CMDS
486 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
487 $(QUIET)$(TOOL_VCC143-CLANGXX_LD) $(flags) -o $(out)\
488 -filelist $(outbase).rsp\
489 $(foreach p,$(libpath), -L$(p))\
490 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
491# ifeq ($(ld_debug),split)
492# $(QUIET)$(TOOL_VCC143-CLANGXX_DSYMUTIL) -o $(out).dSYM/ $(out)
493# $(QUIET)$(TOOL_VCC143-CLANGXX_STRIP_PROGRAM) $(out)
494# endif
495endef
496
497
498## Link DLL
499# @param $(target) Normalized main target name.
500# @param $(out) Program name.
501# @param $(objs) Object files to link together.
502# @param $(libs) Libraries to search.
503# @param $(libpath) Library search paths.
504# @param $(flags) Flags.
505# @param $(dirdep) Directory creation dependency.
506# @param $(deps) Other dependencies.
507# @param $(othersrc) Unhandled sources.
508# @param $(custom_pre) Custom step invoked before linking.
509# @param $(custom_post) Custom step invoked after linking.
510# @param $(outbase) Output basename (full). Use this for list files and such.
511TOOL_VCC143-CLANGXX_LINK_DLL_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
512TOOL_VCC143-CLANGXX_LINK_DLL_OUTPUT_DEBUG = $(call TOOL_VCC143-CLANGXX_DEBUG_BUNDLE_FN,$(out))
513TOOL_VCC143-CLANGXX_LINK_DLL_DEBUG_INSTALL_FN = $(TOOL_VCC143-CLANGXX_DEBUG_INSTALL_FN)
514TOOL_VCC143-CLANGXX_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
515TOOL_VCC143-CLANGXX_LINK_DLL_DEPORD =
516define TOOL_VCC143-CLANGXX_LINK_DLL_CMDS
517 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
518 $(QUIET)$(TOOL_VCC143-CLANGXX_LD) $(TOOL_VCC143-CLANGXX_LDFLAGS.dll) $(flags) -o $(out)\
519 $(call TOOL_VCC143-CLANGXX_LD_SONAME,$(target),$(out))\
520 -filelist $(outbase).rsp\
521 $(foreach p,$(libpath), -L$(p))\
522 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
523# ifeq ($(ld_debug),split)
524# $(QUIET)$(TOOL_VCC143-CLANGXX_DSYMUTIL) -o $(out).dSYM/ $(out)
525# $(QUIET)$(TOOL_VCC143-CLANGXX_STRIP_DLL) $(out)
526# endif
527endef
528
529
530## Link system module (windows aka driver, linux aka kernel module)
531# @param $(target) Normalized main target name.
532# @param $(out) System module name.
533# @param $(objs) Object files to link together.
534# @param $(libs) Libraries to search.
535# @param $(libpath) Library search paths.
536# @param $(flags) Flags.
537# @param $(dirdep) Directory creation dependency.
538# @param $(deps) Other dependencies.
539# @param $(othersrc) Unhandled sources.
540# @param $(custom_pre) Custom step invoked before linking.
541# @param $(custom_post) Custom step invoked after linking.
542# @param $(outbase) Output basename (full). Use this for list files and such.
543TOOL_VCC143-CLANGXX_LINK_SYSMOD_OUTPUT_MAYBE_PRECIOUS = $(outbase).rsp
544TOOL_VCC143-CLANGXX_LINK_SYSMOD_OUTPUT_DEBUG = $(call TOOL_VCC143-CLANGXX_DEBUG_BUNDLE_FN,$(out))
545TOOL_VCC143-CLANGXX_LINK_SYSMOD_DEBUG_INSTALL_FN = $(TOOL_VCC143-CLANGXX_DEBUG_INSTALL_FN)
546TOOL_VCC143-CLANGXX_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
547TOOL_VCC143-CLANGXX_LINK_SYSMOD_DEPORD =
548define TOOL_VCC143-CLANGXX_LINK_SYSMOD_CMDS
549 $(QUIET)$(APPEND) -tn $(outbase).rsp $(filter-out %.h.gch,$(objs))
550 $(QUIET)$(TOOL_VCC143-CLANGXX_LD_SYSMOD) $(TOOL_VCC143-CLANGXX_LDFLAGS.sysmod) $(flags) -o $(out)\
551 -filelist $(outbase).rsp\
552 $(foreach p,$(libpath), -L$(p))\
553 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
554# ifeq ($(ld_debug),split)
555# $(QUIET)$(TOOL_VCC143-CLANGXX_DSYMUTIL) -o $(out).dSYM/ $(out)
556# $(QUIET)$(TOOL_VCC143-CLANGXX_STRIP_SYSMOD) $(out)
557# endif
558endef
559
Note: See TracBrowser for help on using the repository browser.