source: trunk/kBuild/tools/VCC120AMD64.kmk@ 3037

Last change on this file since 3037 was 3037, checked in by bird, 8 years ago

tools/VCC120*.kmk: Express edition adjustments.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.2 KB
Line 
1# $Id: VCC120AMD64.kmk 3037 2017-05-10 09:24:06Z bird $
2## @file
3# kBuild Tool Config - Visual C++ 12.0 (aka Visual 2013 and MSC v18), targeting AMD64.
4#
5
6#
7# Copyright (c) 2004-2017 knut st. osmundsen <bird-kBuild-spam-xiv@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
34TOOL_VCC120AMD64 := Visual C++ 12.0 (aka Visual 2013 and MSC v18), targeting AMD64
35
36# Tool Specific Properties
37ifndef PATH_TOOL_VCC120AMD64
38 PATH_TOOL_VCC120AMD64 := $(wildcard $(KBUILD_DEVTOOLS)/win.x86/vcc/v12*)
39 ifeq ($(PATH_TOOL_VCC120AMD64),)
40 PATH_TOOL_VCC120AMD64 := $(PATH_TOOL_VCC120)
41 endif
42 ifeq ($(PATH_TOOL_VCC120AMD64),)
43 PATH_TOOL_VCC120AMD64 := $(PATH_TOOL_VCC120X86)
44 endif
45 ifeq ($(PATH_TOOL_VCC120AMD64),)
46 PATH_TOOL_VCC120AMD64 := $(wildcard $(KBUILD_DEVTOOLS)/win.x86/vcc/v12*)
47 endif
48 ifneq ($(PATH_TOOL_VCC120AMD64),)
49 PATH_TOOL_VCC120AMD64 := $(lastword $(sort $(PATH_TOOL_VCC120AMD64)))
50 else
51 $(warning kBuild: PATH_TOOL_VCC120AMD64 cannot be determined!)
52 PATH_TOOL_VCC120AMD64 := $(KBUILD_DEVTOOLS)/win.x86/vcc/v12
53 endif
54else
55 # Resolve any fancy stuff once and for all.
56 PATH_TOOL_VCC120AMD64 := $(PATH_TOOL_VCC120AMD64)
57endif
58if "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "win.amd64" && exists("$(PATH_TOOL_VCC120AMD64)/bin/amd64") # Missing in express edition.
59PATH_TOOL_VCC120AMD64_BIN ?= $(PATH_TOOL_VCC120AMD64)/bin/amd64
60else
61PATH_TOOL_VCC120AMD64_BIN_DLL ?= $(PATH_TOOL_VCC120AMD64)/bin
62PATH_TOOL_VCC120AMD64_BIN ?= $(PATH_TOOL_VCC120AMD64)/bin/x86_amd64
63endif
64PATH_TOOL_VCC120AMD64_LIB ?= $(PATH_TOOL_VCC120AMD64)/lib/amd64
65PATH_TOOL_VCC120AMD64_INC ?= $(PATH_TOOL_VCC120AMD64)/include
66PATH_TOOL_VCC120AMD64_ATLMFC ?= $(PATH_TOOL_VCC120AMD64)/atlmfc
67PATH_TOOL_VCC120AMD64_ATLMFC_INC ?= $(PATH_TOOL_VCC120AMD64_ATLMFC)/include
68PATH_TOOL_VCC120AMD64_ATLMFC_LIB ?= $(PATH_TOOL_VCC120AMD64_ATLMFC)/lib/amd64
69TOOL_VCC120AMD64_CC ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/cl.exe
70TOOL_VCC120AMD64_CXX ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/cl.exe
71TOOL_VCC120AMD64_AS ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/ml64.exe
72#TOOL_VCC120AMD64_AR ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/lib.exe - just an exec wrapper for the below
73TOOL_VCC120AMD64_AR ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/link.exe /LIB
74TOOL_VCC120AMD64_LD ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/link.exe
75TOOL_VCC120AMD64_DUMPBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/dumpbin.exe
76TOOL_VCC120AMD64_EDITBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120AMD64_BIN)/editbin.exe
77TOOL_VCC120AMD64_RC ?= $(EXEC_X86_WIN32) $(call TOOL_VCC120_FN_FIND_SDK_TOOL,rc.exe,[Rr][Cc].[Ee][Xx][Ee],TOOL_VCC120_RC_CACHED)
78TOOL_VCC120AMD64_MT ?= $(EXEC_X86_WIN32) $(call TOOL_VCC120_FN_FIND_SDK_TOOL,mt.exe,[Mm][Tt].[Ee][Xx][Ee],TOOL_VCC120_MT_CACHED)
79ifdef TOOL_VCC120AMD64_USE_KSUBMIT
80 ifeq ($(KBUILD_HOST),win)
81 ifneq ($(substr $(PATH_TOOL_VCC120AMD64_BIN),-9),x86_amd64)
82 TOOL_VCC120AMD64_KSUBMIT ?= kmk_builtin_kSubmit --64-bit
83 TOOL_VCC120AMD64_KSUBMIT_DD = $(TOOL_VCC120AMD64_KSUBMIT) --
84 else
85 # "fatal error C1902: Program database manager mismatch; please check your installation" when mixing with the 32-bit compiler.
86 #TOOL_VCC120AMD64_KSUBMIT ?= kmk_builtin_kSubmit --32-bit
87 #TOOL_VCC120AMD64_KSUBMIT_DD = $(TOOL_VCC120AMD64_KSUBMIT) --
88 endif
89 endif
90else ifdef PATH_TOOL_VCC120AMD64_BIN_DLL
91 TOOL_VCC120AMD64_KSUBMIT_DD = $(REDIRECT) -E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)' --
92endif
93
94# The following in duplicated in VCC120.kmk and VCC120X86.kmk.
95TOOL_VCC120_FN_FIND_SDK_TOOL_SUB = $(eval $3 := $(firstword \
96 $(if-expr defined(PATH_SDK_WINPSDK71_BIN), $(wildcard $(PATH_SDK_WINPSDK71_BIN)/$2)) \
97 $(if-expr defined(PATH_SDK_WINPSDK_BIN) , $(wildcard $(PATH_SDK_WINPSDK_BIN)/$2)) \
98 $(rsort $(wildcard $(KBUILD_DEVTOOLS_HST)/sdk/*/[Bb][Ii][Nn]/$2)) \
99 $(rsort $(wildcard $(KBUILD_DEVTOOLS_HST_ALT)/sdk/*/[Bb][Ii][Nn]/$2)) \
100 $1))
101TOOL_VCC120_FN_FIND_SDK_TOOL = $(if-expr !defined($3),$(TOOL_VCC120_FN_FIND_SDK_TOOL_SUB),)$($3)
102
103## Disabled fast DEP_IDB based dependencies.
104#VCC120AMD64_OLD_DEPS = 1
105
106## Constructs the correct .pdb name (the name is lowercased).
107# @param $(1) Base name, no extention.
108# @param $(2) The extension.
109TOOL_VCC120AMD64_PDB = $(dir $(1))$(tolower $(notdir $(1))).$(2)
110
111
112# General Properties used by kBuild
113TOOL_VCC120AMD64_COBJSUFF ?= .obj
114TOOL_VCC120AMD64_CFLAGS ?= -TC -nologo -Zi
115TOOL_VCC120AMD64_CFLAGS.debug ?=
116TOOL_VCC120AMD64_CFLAGS.dbgopt ?= -O2
117TOOL_VCC120AMD64_CFLAGS.release ?= -O2
118TOOL_VCC120AMD64_CFLAGS.profile ?= -O2
119TOOL_VCC120AMD64_CINCS ?= $(PATH_TOOL_VCC120AMD64_INC)
120TOOL_VCC120AMD64_CDEFS ?=
121
122TOOL_VCC120AMD64_CXXOBJSUFF ?= .obj
123TOOL_VCC120AMD64_CXXFLAGS ?= -TP -nologo -Zi
124TOOL_VCC120AMD64_CXXFLAGS.debug ?=
125TOOL_VCC120AMD64_CXXFLAGS.dbgopt ?= -O2
126TOOL_VCC120AMD64_CXXFLAGS.release ?= -O2
127TOOL_VCC120AMD64_CXXFLAGS.profile ?= -O2
128TOOL_VCC120AMD64_CXXINCS ?= $(PATH_TOOL_VCC120AMD64_INC) $(PATH_TOOL_VCC120AMD64_ATLMFC_INC)
129TOOL_VCC120AMD64_CXXDEFS ?=
130
131TOOL_VCC120AMD64_ASOBJSUFF ?= .obj
132
133TOOL_VCC120AMD64_RCOBJSUFF ?= .res
134TOOL_VCC120AMD64_RCINCS ?= $(PATH_TOOL_VCC120AMD64_INC) $(PATH_TOOL_VCC120AMD64_ATLMFC_INC)
135
136TOOL_VCC120AMD64_ARFLAGS ?= -nologo -machine:amd64
137TOOL_VCC120AMD64_ARLIBSUFF ?= .lib
138
139TOOL_VCC120AMD64_LDFLAGS ?= -nologo -machine:amd64
140TOOL_VCC120AMD64_LDFLAGS.debug ?= -debug
141TOOL_VCC120AMD64_LDFLAGS.dbgopt ?= -debug
142TOOL_VCC120AMD64_LDFLAGS.profile ?= -debug
143TOOL_VCC120AMD64_LDFLAGS.release ?=
144
145
146
147## Compile C source.
148# @param $(target) Normalized main target name.
149# @param $(source) Source filename (relative).
150# @param $(obj) Object file name. This shall be (re)created by the compilation.
151# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
152# @param $(flags) Flags.
153# @param $(defs) Definitions. No -D or something.
154# @param $(incs) Includes. No -I or something.
155# @param $(dirdep) Directory creation dependency.
156# @param $(deps) Other dependencies.
157#
158# @param $(outbase) Output basename (full). Use this for list files and such.
159# @param $(objsuff) Object suffix.
160TOOL_VCC120AMD64_COMPILE_C_DEPEND =
161TOOL_VCC120AMD64_COMPILE_C_DEPORD =
162TOOL_VCC120AMD64_COMPILE_C_OUTPUT =
163TOOL_VCC120AMD64_COMPILE_C_OUTPUT_MAYBE = $(call TOOL_VCC120AMD64_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC120AMD64_PDB, $(outbase)-obj,idb)
164ifdef TOOL_VCC120AMD64_KSUBMIT
165 TOOL_VCC120AMD64_COMPILE_C_DONT_PURGE_OUTPUT := 1 # speed
166 define TOOL_VCC120AMD64_COMPILE_C_CMDS
167 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT) -P $(DEP_OBJ_INT) -f -s -q -o $(dep) -t $(obj) $(obj)\
168 $(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL),-E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)',)\
169 -- $(TOOL_VCC120AMD64_CC) -c\
170 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
171 -Fd$(outbase)-obj.pdb \
172 -Fo$(obj)\
173 $(subst /,\\,$(abspath $(source)))
174 endef
175else
176 define TOOL_VCC120AMD64_COMPILE_C_CMDS
177 $(QUIET)$(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL)\
178 ,$(REDIRECT) -E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)' -- ,)$(TOOL_VCC120AMD64_CC) -c\
179 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
180 -Fd$(outbase)-obj.pdb \
181 -Fo$(obj)\
182 $(subst /,\\,$(abspath $(source)))
183 $(QUIET)$(DEP_OBJ) -f -s -q -o $(dep) -t $(obj) $(obj)
184 endef
185endif # !TOOL_VCC120AMD64_KSUBMIT
186
187
188## Compile C++ source.
189# @param $(target) Normalized main target name.
190# @param $(source) Source filename (relative).
191# @param $(obj) Object file name. This shall be (re)created by the compilation.
192# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
193# @param $(flags) Flags.
194# @param $(defs) Definitions. No -D or something.
195# @param $(incs) Includes. No -I or something.
196# @param $(dirdep) Directory creation dependency.
197# @param $(deps) Other dependencies.
198#
199# @param $(outbase) Output basename (full). Use this for list files and such.
200# @param $(objsuff) Object suffix.
201TOOL_VCC120AMD64_COMPILE_CXX_DEPEND = $($(target)_1_VCC_PCH_FILE)
202TOOL_VCC120AMD64_COMPILE_CXX_DEPORD =
203TOOL_VCC120AMD64_COMPILE_CXX_OUTPUT =
204TOOL_VCC120AMD64_COMPILE_CXX_OUTPUT_MAYBE = $(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB)\
205 ,,$(call TOOL_VCC120AMD64_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC120AMD64_PDB, $(outbase)-obj,idb))
206ifdef TOOL_VCC120AMD64_KSUBMIT
207 TOOL_VCC120AMD64_COMPILE_CXX_DONT_PURGE_OUTPUT := 1 # speed
208 define TOOL_VCC120AMD64_COMPILE_CXX_CMDS
209 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT) -P $(DEP_OBJ_INT) -f -s -q -o $(dep) -t $(obj) $(obj)\
210 $(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL),-E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)',)\
211 -- $(TOOL_VCC120AMD64_CXX) -c\
212 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
213 $(if-expr defined($(target)_PCH_HDR)\
214 ,-FI$($(target)_PCH_HDR) -Yu$($(target)_PCH_HDR) -Fp$($(target)_1_VCC_PCH_FILE) -FS,)\
215 -Fd$(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB),$($(target)_1_VCC_COMMON_OBJ_PDB),$(outbase)-obj.pdb) \
216 -Fo$(obj)\
217 $(subst /,\\,$(abspath $(source)))
218 endef
219else
220 define TOOL_VCC120AMD64_COMPILE_CXX_CMDS
221 $(QUIET)$(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL)\
222 ,$(REDIRECT) -E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)' -- ,)$(TOOL_VCC120AMD64_CXX) -c\
223 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
224 $(if-expr defined($(target)_PCH_HDR)\
225 ,-FI$($(target)_PCH_HDR) -Yu$($(target)_PCH_HDR) -Fp$($(target)_1_VCC_PCH_FILE) -FS,)\
226 -Fd$(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB),$($(target)_1_VCC_COMMON_OBJ_PDB),$(outbase)-obj.pdb) \
227 -Fo$(obj)\
228 $(subst /,\\,$(abspath $(source)))
229 $(QUIET)$(DEP_OBJ) -f -s -q -o $(dep) -t $(obj) $(obj)
230 endef
231endif # !TOOL_VCC120AMD64_KSUBMIT
232
233
234#
235# Helper tool for creating the precompiled C++ header.
236#
237# It only have the C++ compile bits and it's purpose is to skip bits
238# related _1_VCC_PCH_FILE and add -Yc.
239#
240TOOL_VCC120AMD64-PCH := Helper for creating precompiled header using CXX handling.
241TOOL_VCC120AMD64-PCH_EXTENDS := VCC120AMD64
242TOOL_VCC120AMD64-PCH_CXXOBJSUFF := .obj
243TOOL_VCC120AMD64-PCH_CXXINCS = $(TOOL_VCC120AMD64_CXXINCS)
244TOOL_VCC120AMD64-PCH_CXXFLAGS = $(TOOL_VCC120AMD64_CXXFLAGS) -FS
245TOOL_VCC120AMD64-PCH_CXXFLAGS.debug = $(TOOL_VCC120AMD64_CXXFLAGS.debug)
246TOOL_VCC120AMD64-PCH_CXXFLAGS.dbgopt = $(TOOL_VCC120AMD64_CXXFLAGS.dbgopt)
247TOOL_VCC120AMD64-PCH_CXXFLAGS.release = $(TOOL_VCC120AMD64_CXXFLAGS.release)
248TOOL_VCC120AMD64-PCH_CXXFLAGS.profile = $(TOOL_VCC120AMD64_CXXFLAGS.profile)
249TOOL_VCC120AMD64-PCH_COMPILE_CXX_DEPEND = $(NO_SUCH_VARIABLE)
250TOOL_VCC120AMD64-PCH_COMPILE_CXX_DEPORD = $(NO_SUCH_VARIABLE)
251TOOL_VCC120AMD64-PCH_COMPILE_CXX_OUTPUT = $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
252TOOL_VCC120AMD64-PCH_COMPILE_CXX_OUTPUT_MAYBE = $(NO_SUCH_VARIABLE)
253ifdef TOOL_VCC120AMD64_KSUBMIT
254 define TOOL_VCC120AMD64-PCH_COMPILE_CXX_CMDS
255 $(QUIET)$(RM) -f -- $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
256 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT) --no-pch-caching -P $(DEP_OBJ_INT) -f -s -q -e .pch -o $(dep) -t $(obj) $(obj)\
257 $(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL),-E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)',)\
258 -- $(TOOL_VCC120AMD64_CXX) -c -Yc\
259 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
260 -Fp$($(target)_1_VCC_PCH_FILE) \
261 -Fd$($(target)_1_VCC_COMMON_OBJ_PDB) \
262 -Fo$(obj)\
263 -TP \
264 $(subst /,\\,$(abspath $(source)))
265 endef
266else
267 define TOOL_VCC120AMD64-PCH_COMPILE_CXX_CMDS
268 $(QUIET)$(RM) -f -- $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
269 $(QUIET)$(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL)\
270 ,$(REDIRECT) -E 'PATH=$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)' -- ,)$(TOOL_VCC120AMD64_CXX) -c -Yc\
271 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
272 -Fp$($(target)_1_VCC_PCH_FILE) \
273 -Fd$($(target)_1_VCC_COMMON_OBJ_PDB) \
274 -Fo$(obj)\
275 -TP \
276 $(subst /,\\,$(abspath $(source)))
277 $(QUIET)$(DEP_OBJ) -f -s -q -e .pch -o $(dep) -t $(obj) $(obj)
278
279 endef
280endif # !TOOL_VCC120AMD64_KSUBMIT
281
282
283## @todo configure the assembler template.
284
285## Compile resource source.
286# @param $(target) Normalized main target name.
287# @param $(source) Source filename (relative).
288# @param $(obj) Object file name. This shall be (re)created by the compilation.
289# @param $(dep) Dependcy file. This shall be (re)created by the compilation.
290# @param $(flags) Flags.
291# @param $(defs) Definitions. No -D or something.
292# @param $(incs) Includes. No -I or something.
293# @param $(dirdep) Directory creation dependency.
294# @param $(deps) Other dependencies.
295#
296# @param $(outbase) Output basename (full). Use this for list files and such.
297# @param $(objsuff) Object suffix.
298TOOL_VCC120AMD64_COMPILE_RC_DEPEND =
299TOOL_VCC120AMD64_COMPILE_RC_DEPORD =
300TOOL_VCC120AMD64_COMPILE_RC_OUTPUT =
301## @todo Fix kmk_redirect so we can use it for setting PATH without spawning a shell or two
302define TOOL_VCC120AMD64_COMPILE_RC_CMDS
303 $(QUIET)$(if-expr defined(PATH_TOOL_VCC120AMD64_BIN_DLL)\
304 ,PATH='$(PATH_TOOL_VCC120AMD64_BIN_DLL)$(HOST_PATH_SEP)$(PATH)',)$(TOOL_VCC120AMD64_RC) \
305 $(flags) $(addprefix /i, $(subst /,\\,$(incs))) $(addprefix /d, $(defs))\
306 /fo$(obj)\
307 $(subst /,\\,$(abspath $(source)))
308endef
309
310
311## Link library
312# @param $(target) Normalized main target name.
313# @param $(out) Library name.
314# @param $(objs) Object files to put in the library.
315# @param $(flags) Flags.
316# @param $(dirdep) Directory creation dependency.
317# @param $(deps) Other dependencies.
318# @param $(othersrc) Unhandled sources.
319# @param $(outbase) Output basename (full). Use this for list files and such.
320#
321TOOL_VCC120AMD64_LINK_LIBRARY_DEPEND = $(othersrc)
322TOOL_VCC120AMD64_LINK_LIBRARY_DEPORD =
323TOOL_VCC120AMD64_LINK_LIBRARY_OUTPUT = $(outbase).rsp
324TOOL_VCC120AMD64_LINK_LIBRARY_OUTPUT_MAYBE = $(outbase).lst $(outbase).exp $(outbase).pdb
325define TOOL_VCC120AMD64_LINK_LIBRARY_CMDS
326 $(QUIET)$(APPEND) -tn $(outbase).rsp \
327 $(foreach arg,\
328 $(subst /,\\,$(objs) \
329 $(filter-out %.def,$(othersrc))) \
330 $(addprefix /DEF:,$(filter %.def,$(othersrc))) \
331 ,\"$(arg)\")
332 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT_DD) $(TOOL_VCC120AMD64_AR) $(flags) /OUT:$(out) @$(outbase).rsp
333endef
334
335
336## Link program
337# @param $(target) Normalized main target name.
338# @param $(out) Program name.
339# @param $(objs) Object files to link together.
340# @param $(libs) Libraries to search.
341# @param $(libpath) Library search paths.
342# @param $(flags) Flags.
343# @param $(dirdep) Directory creation dependency.
344# @param $(deps) Other dependencies.
345# @param $(othersrc) Unhandled sources.
346# @param $(custom_pre) Custom step invoked before linking.
347# @param $(custom_post) Custom step invoked after linking.
348# @param $(outbase) Output basename (full). Use this for list files and such.
349#
350TOOL_VCC120AMD64_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
351TOOL_VCC120AMD64_LINK_PROGRAM_DEPORD =
352TOOL_VCC120AMD64_LINK_PROGRAM_OUTPUT = $(outbase).map $(outbase).rsp
353TOOL_VCC120AMD64_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
354TOOL_VCC120AMD64_LINK_PROGRAM_OUTPUT_DEBUG = $(outbase).pdb
355TOOL_VCC120AMD64_LINK_PROGRAM_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
356define TOOL_VCC120AMD64_LINK_PROGRAM_CMDS
357 $(QUIET)$(APPEND) -tn $(outbase).rsp \
358 $(foreach arg,\
359 $(subst /,\\,$(objs)) \
360 $(subst /,\\,$(libs)) \
361 ,\"$(arg)\")
362 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT_DD) $(TOOL_VCC120AMD64_LD) $(flags) \
363 /OUT:$(out) \
364 /MAPINFO:EXPORTS /INCREMENTAL:NO \
365 /MAP:$(outbase).map \
366 $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
367 $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
368 $(foreach p,$(libpath), /LIBPATH:$(p)) \
369 @$(outbase).rsp
370ifndef TOOL_VCC120AMD64_NO_AUTO_MANIFEST
371 $(QUIET)$(TEST) -f $(out).manifest -- \
372 $(TOOL_VCC120AMD64_MT) -manifest $(subst /,\\,$(out)).manifest -outputresource:$(subst /,\\,$(out))
373endif
374endef
375
376
377## Link DLL.
378# @param $(target) Normalized main target name.
379# @param $(out) DLL name.
380# @param $(objs) Object files to link together.
381# @param $(libs) Libraries to search.
382# @param $(libpath) Library search paths.
383# @param $(flags) Flags.
384# @param $(dirdep) Directory creation dependency.
385# @param $(deps) Other dependencies.
386# @param $(othersrc) Unhandled sources.
387# @param $(custom_pre) Custom step invoked before linking.
388# @param $(custom_post) Custom step invoked after linking.
389#
390# @param $(outbase) Output basename (full). Use this for list files and such.
391TOOL_VCC120AMD64_LINK_DLL_DEPEND = $(objs) $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
392TOOL_VCC120AMD64_LINK_DLL_DEPORD = $(call DIRDEP,$(PATH_STAGE_LIB))
393TOOL_VCC120AMD64_LINK_DLL_OUTPUT = $(outbase).map $(outbase).lib $(outbase).exp $(outbase).rsp
394TOOL_VCC120AMD64_LINK_DLL_OUTPUT_MAYBE = $(outbase).ilk $(out).manifest $(PATH_STAGE_LIB)/$(notdir $(outbase)).exp
395TOOL_VCC120AMD64_LINK_DLL_OUTPUT_MAYBE_PRECIOUS = $(PATH_STAGE_LIB)/$(notdir $(outbase)).lib
396TOOL_VCC120AMD64_LINK_DLL_OUTPUT_DEBUG = $(outbase).pdb
397TOOL_VCC120AMD64_LINK_DLL_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
398define TOOL_VCC120AMD64_LINK_DLL_CMDS
399 $(QUIET)$(APPEND) -tn $(outbase).rsp \
400 $(foreach arg,\
401 $(subst /,\\,$(objs)) \
402 $(subst /,\\,$(libs)) \
403 ,\"$(arg)\")
404 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT_DD) $(TOOL_VCC120AMD64_LD) $(flags) \
405 /OUT:$(out) \
406 /IMPLIB:$(outbase).lib \
407 /MAPINFO:EXPORTS /INCREMENTAL:NO \
408 /MAP:$(outbase).map \
409 /DLL \
410 $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
411 $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
412 $(foreach p,$(libpath), /LIBPATH:$(p)) \
413 @$(outbase).rsp
414ifndef TOOL_VCC120AMD64_NO_AUTO_MANIFEST
415 $(QUIET)$(TEST) -f $(out).manifest -- \
416 $(TOOL_VCC120AMD64_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
417endif
418 $(QUIET)$(TEST) -f $(outbase).lib -- $(KLIBTWEAKER_EXT) --clear-timestamps $(outbase).lib
419 $(QUIET)$(CP) --changed -v --ignore-non-existing $(outbase).exp $(outbase).lib $(PATH_STAGE_LIB)/
420$(eval _DIRS += $(PATH_STAGE_LIB))
421endef
422
423
424## Link system module (windows aka driver, linux aka kernel module)
425# @param $(target) Normalized main target name.
426# @param $(out) System module name.
427# @param $(objs) Object files to link together.
428# @param $(libs) Libraries to search.
429# @param $(libpath) Library search paths.
430# @param $(flags) Flags.
431# @param $(dirdep) Directory creation dependency.
432# @param $(deps) Other dependencies.
433# @param $(othersrc) Unhandled sources.
434# @param $(custom_pre) Custom step invoked before linking.
435# @param $(custom_post) Custom step invoked after linking.
436#
437# @param $(outbase) Output basename (full). Use this for list files and such.
438TOOL_VCC120AMD64_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
439TOOL_VCC120AMD64_LINK_SYSMOD_DEPORD =
440TOOL_VCC120AMD64_LINK_SYSMOD_OUTPUT = $(outbase).map $(outbase).rsp
441TOOL_VCC120AMD64_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
442TOOL_VCC120AMD64_LINK_SYSMOD_OUTPUT_DEBUG = $(outbase).pdb
443TOOL_VCC120AMD64_LINK_SYSMOD_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
444define TOOL_VCC120AMD64_LINK_SYSMOD_CMDS
445 $(QUIET)$(APPEND) -tn $(outbase).rsp \
446 $(foreach arg,\
447 $(subst /,\\,$(objs)) \
448 $(subst /,\\,$(libs)) \
449 ,\"$(arg)\")
450 $(QUIET)$(TOOL_VCC120AMD64_KSUBMIT_DD) $(TOOL_VCC120AMD64_LD) $(flags) \
451 /OUT:$(out) \
452 /MAPINFO:EXPORTS /INCREMENTAL:NO \
453 /MAP:$(outbase).map \
454 $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
455 $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
456 $(foreach p,$(libpath), /LIBPATH:$(p)) \
457 @$(outbase).rsp
458ifndef TOOL_VCC120AMD64_NO_AUTO_MANIFEST
459 $(QUIET)$(TEST) -f $(out).manifest -- \
460 $(TOOL_VCC120AMD64_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
461endif
462endef
463
Note: See TracBrowser for help on using the repository browser.