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

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

VCC120AMD64.kmk,VCC120X86.kmk: When using the cross compiling binaries, we need to point the PATH the directory with the native binaries so DLLs and EXEs can be found (linker mostly). Don't want to require them to be copied around to each dir extra. kmk_redirect should make this rather cheap.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.1 KB
Line 
1# $Id: VCC120AMD64.kmk 3036 2017-05-09 15:59:50Z 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
58ifeq ($(KBUILD_HOST).$(KBUILD_HOST_ARCH),win.amd64)
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.