Ignore:
Timestamp:
Apr 17, 2020, 1:10:45 AM (5 years ago)
Author:
bird
Message:

tools/VCC141*.kmk: Early commit of Visual C++ 14.1 tools.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/tools/VCC141.kmk

    r3313 r3323  
    11# $Id$
    22## @file
    3 # kBuild Tool Config - Visual C++ 12.0 (aka Visual 2013 and MSC v18), targeting $(KBUILD_TARGET).
    4 #
    5 
    6 #
    7 # Copyright (c) 2004-2017 knut st. osmundsen <bird-kBuild-spam-xviiv@anduin.net>
     3# kBuild Tool Config - Visual C++ 14.1 (aka Visual 2017 and MSC v19.10), targeting AMD64.
     4#
     5
     6#
     7# Copyright (c) 2004-2020 knut st. osmundsen <bird-kBuild-spam-xx@anduin.net>
    88#
    99# This file is part of kBuild.
     
    3232#
    3333
    34 TOOL_VCC120 := Visual C++ 12.0 (aka Visual 2013 and MSC v18), targeting $(KBUILD_TARGET).
    35 
     34TOOL_VCC141 := Visual C++ 14.1 (aka Visual 2017 and MSC v19.1), targeting $(KBUILD_TARGET).
     35
     36ifndef INCLUDED_WIN_COMMON_KMK
     37 include $(KBUILD_PATH)/win-common.kmk
     38endif
     39
     40#
    3641# Tool Specific Properties
    37 ifndef PATH_TOOL_VCC120
    38  PATH_TOOL_VCC120 := $(wildcard $(KBUILD_DEVTOOLS_TRG)/vcc/v12*)
    39  ifeq ($(PATH_TOOL_VCC120),)
    40   PATH_TOOL_VCC120 := $(wildcard $(KBUILD_DEVTOOLS)/win.x86/vcc/v12*)
     42#
     43ifndef PATH_TOOL_VCC141
     44 PATH_TOOL_VCC141 := $(firstfile $(rsortfiles $(qwildcard ,$(KBUILD_DEVTOOLS)/win.amd64/vcc/v141*)))
     45 ifeq ($(PATH_TOOL_VCC141),)
     46  PATH_TOOL_VCC141 := $(firstfile $(rsortfiles $(qwildcard ,$(KBUILD_DEVTOOLS)/win.x86/vcc/v141*)))
    4147 endif
    42  ifeq ($(PATH_TOOL_VCC120),)
    43   PATH_TOOL_VCC120 := $(wildcard $(KBUILD_DEVTOOLS)/x86.win32/vcc/v12*)
     48 ifeq ($(PATH_TOOL_VCC141),)
     49  PATH_TOOL_VCC141 := $(PATH_TOOL_VCC141X86)
    4450 endif
    45  ifeq ($(PATH_TOOL_VCC120),)
    46   PATH_TOOL_VCC120 := $(wildcard $(KBUILD_DEVTOOLS)/win.amd64/vcc/v12*)
     51 ifeq ($(PATH_TOOL_VCC141),)
     52  PATH_TOOL_VCC141 := $(PATH_TOOL_VCC141)
    4753 endif
    48  ifeq ($(PATH_TOOL_VCC120),)
    49   PATH_TOOL_VCC120 := $(lastword $(sort $(PATH_TOOL_VCC120)))
     54 ifeq ($(PATH_TOOL_VCC141),)
     55  PATH_TOOL_VCC141 := $(firstfile $(rsortfiles $(qwildcard ,$(KBUILD_DEVTOOLS)/win.x86/vcc/v141*)))
     56  ifeq ($(PATH_TOOL_VCC141),)
     57   PATH_TOOL_VCC141 := $(firstfile $(foreach ver,2017 2019,$(foreachfile progfilesdir,$(WINCMN_PROGRAM_FILES_LIST)\
     58        , $(rsortfiles $(qwildcard ,$(progfilesdir)/Microsoft\ Visual\ Studio/$(ver)/BuildTools/VC/Tools/MSVC/14.1?.*)))))
     59   ifeq ($(PATH_TOOL_VCC141),)
     60    $(warning kBuild: PATH_TOOL_VCC141 cannot be determined!)
     61    PATH_TOOL_VCC141 := $(KBUILD_DEVTOOLS)/win.x86/vcc/v141
     62   endif
     63  endif
    5064 endif
    51  # if not found, we'll enter 'pathless' mode.
    5265else
    5366 # Resolve any fancy stuff once and for all.
    54  PATH_TOOL_VCC120 := $(PATH_TOOL_VCC120)
    55 endif
    56 ifneq ($(PATH_TOOL_VCC120),)
    57  if "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "win.amd64" && exists("$(PATH_TOOL_VCC120AMD64)/bin/amd64") # Missing in express edition.
    58  PATH_TOOL_VCC120_BIN.amd64 ?= $(PATH_TOOL_VCC120)/bin/amd64
    59  else
    60  PATH_TOOL_VCC120_BIN.amd64 ?= $(PATH_TOOL_VCC120)/bin/x86_amd64
     67 PATH_TOOL_VCC141 := $(PATH_TOOL_VCC141)
     68endif
     69
     70ifndef PATH_TOOL_VCC141_BASE_BIN
     71PATH_TOOL_VCC141_BASE_BIN := $(PATH_TOOL_VCC141)/bin
     72endif
     73ifndef PATH_TOOL_VCC141_HOST_BIN
     74PATH_TOOL_VCC141_HOST_BIN := $(PATH_TOOL_VCC141_BASE_BIN)/Host$(WINCMN_MAP_ARCH.$(KBUILD_HOST_ARCH))
     75endif
     76ifndef PATH_TOOL_VCC141_BIN
     77PATH_TOOL_VCC141_BIN      := $(PATH_TOOL_VCC141_HOST_BIN)/$(WINCMN_MAP_ARCH.$(KBUILD_TARGET_ARCH))
     78endif
     79PATH_TOOL_VCC141_BIN_QSH  := $(requote sh,$(PATH_TOOL_VCC141_BIN))
     80
     81PATH_TOOL_VCC141_LIB.amd64         ?= $(PATH_TOOL_VCC141)/lib/x64
     82PATH_TOOL_VCC141_LIB.arm32         ?= $(PATH_TOOL_VCC141)/lib/arm
     83PATH_TOOL_VCC141_LIB.arm64         ?= $(PATH_TOOL_VCC141)/lib/arm64
     84PATH_TOOL_VCC141_LIB.x86           ?= $(PATH_TOOL_VCC141)/lib/x86
     85
     86PATH_TOOL_VCC141_ONECORE_LIB.amd64 ?= $(PATH_TOOL_VCC141)/lib/onecore/x64
     87PATH_TOOL_VCC141_ONECORE_LIB.arm32 ?= $(PATH_TOOL_VCC141)/lib/onecore/arm
     88PATH_TOOL_VCC141_ONECORE_LIB.arm64 ?= $(PATH_TOOL_VCC141)/lib/onecore/arm64
     89PATH_TOOL_VCC141_ONECORE_LIB.x86   ?= $(PATH_TOOL_VCC141)/lib/onecore/x86
     90
     91PATH_TOOL_VCC141_INC               ?= $(PATH_TOOL_VCC141)/include
     92
     93PATH_TOOL_VCC141_ATLMFC            ?= $(PATH_TOOL_VCC141)/atlmfc
     94PATH_TOOL_VCC141_ATLMFC_INC        ?= $(PATH_TOOL_VCC141_ATLMFC)/include
     95PATH_TOOL_VCC141_ATLMFC_LIB.x86    ?= $(PATH_TOOL_VCC141_ATLMFC)/lib/x86
     96PATH_TOOL_VCC141_ATLMFC_LIB.amd64  ?= $(PATH_TOOL_VCC141_ATLMFC)/lib/x64
     97
     98TOOL_VCC141_CC      ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/cl.exe
     99TOOL_VCC141_CXX     ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/cl.exe
     100TOOL_VCC141_AS      ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/ml64.exe
     101#TOOL_VCC141_AR      ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/lib.exe - just an exec wrapper for the below
     102TOOL_VCC141_AR      ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/link.exe /LIB
     103TOOL_VCC141_LD      ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/link.exe
     104TOOL_VCC141_DUMPBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/dumpbin.exe
     105TOOL_VCC141_EDITBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC141_BIN_QSH)/editbin.exe
     106
     107TOOL_VCC141_RC  ?= $(EXEC_X86_WIN32) $(call TOOL_VCC141_FN_FIND_SDK_TOOL,rc.exe,[Rr][Cc].[Ee][Xx][Ee],TOOL_VCC141_RC_CACHED)
     108TOOL_VCC141_MT  ?= $(EXEC_X86_WIN32) $(call TOOL_VCC141_FN_FIND_SDK_TOOL,mt.exe,[Mm][Tt].[Ee][Xx][Ee],TOOL_VCC141_MT_CACHED)
     109
     110undefine TOOL_VCC141_USE_KSUBMIT # for now
     111ifdef TOOL_VCC141_USE_KSUBMIT
     112 ifeq ($(KBUILD_HOST),win)
     113  ifneq ($(substr $(qdir un,$(PATH_TOOL_VCC141_BIN)),-3),64/)
     114   TOOL_VCC141_KSUBMIT ?= kmk_builtin_kSubmit --64-bit
     115   TOOL_VCC141_KSUBMIT_DD = $(TOOL_VCC141_KSUBMIT) --
     116  else
     117   TOOL_VCC141_KSUBMIT ?= kmk_builtin_kSubmit --32-bit
     118   TOOL_VCC141_KSUBMIT_DD = $(TOOL_VCC141_KSUBMIT) --
     119  endif
    61120 endif
    62  PATH_TOOL_VCC120_BIN.x86   ?= $(PATH_TOOL_VCC120)/bin
    63  PATH_TOOL_VCC120_BIN       ?= $(PATH_TOOL_VCC120_BIN.$(KBUILD_TARGET_ARCH))
    64  PATH_TOOL_VCC120_LIB.amd64 ?= $(PATH_TOOL_VCC120)/lib/amd64
    65  PATH_TOOL_VCC120_LIB.x86   ?= $(PATH_TOOL_VCC120)/lib
    66  PATH_TOOL_VCC120_LIB       ?= $(PATH_TOOL_VCC120_LIB.$(KBUILD_TARGET_ARCH))
    67  PATH_TOOL_VCC120_INC       ?= $(PATH_TOOL_VCC120)/include
    68  PATH_TOOL_VCC120_ATLMFC    ?= $(PATH_TOOL_VCC120X86)/atlmfc
    69  PATH_TOOL_VCC120_ATLMFC_INC       ?= $(PATH_TOOL_VCC120_ATLMFC)/include
    70  PATH_TOOL_VCC120_ATLMFC_LIB.amd64 ?= $(PATH_TOOL_VCC120_ATLMFC)/lib
    71  PATH_TOOL_VCC120_ATLMFC_LIB.x86   ?= $(PATH_TOOL_VCC120_ATLMFC)/lib/amd64
    72  PATH_TOOL_VCC120_ATLMFC_LIB       ?= $(PATH_TOOL_VCC120_ATLMFC_LIB.$(KBUILD_TARGET_ARCH))
    73  TOOL_VCC120_CC  ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/cl.exe
    74  TOOL_VCC120_CXX ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/cl.exe
    75  TOOL_VCC120_AS  ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/ml64.exe
    76  TOOL_VCC120_AR  ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/lib.exe
    77  TOOL_VCC120_LD  ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/link.exe
    78  TOOL_VCC120_DUMPBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/dumpbin.exe
    79  TOOL_VCC120_EDITBIN ?= $(EXEC_X86_WIN32) $(PATH_TOOL_VCC120_BIN)/editbin.exe
    80 else
    81  # Pathless, relies on the environment.
    82  TOOL_VCC120_CC  ?= $(EXEC_X86_WIN32) cl.exe
    83  TOOL_VCC120_CXX ?= $(EXEC_X86_WIN32) cl.exe
    84  TOOL_VCC120_AS  ?= $(EXEC_X86_WIN32) ml64.exe
    85  TOOL_VCC120_AR  ?= $(EXEC_X86_WIN32) lib.exe
    86  TOOL_VCC120_LD  ?= $(EXEC_X86_WIN32) link.exe
    87  TOOL_VCC120_DUMPBIN ?= $(EXEC_X86_WIN32) dumpbin.exe
    88  TOOL_VCC120_EDITBIN ?= $(EXEC_X86_WIN32) editbin.exe
    89 endif
    90 TOOL_VCC120_RC   ?= $(EXEC_X86_WIN32) $(call TOOL_VCC120_FN_FIND_SDK_TOOL,rc.exe,[Rr][Cc].[Ee][Xx][Ee],TOOL_VCC120_RC_CACHED)
    91 TOOL_VCC120_MT   ?= $(EXEC_X86_WIN32) $(call TOOL_VCC120_FN_FIND_SDK_TOOL,mt.exe,[Mm][Tt].[Ee][Xx][Ee],TOOL_VCC120_MT_CACHED)
    92 
    93 # The following in duplicated in VCC120.kmk and VCC120X86.kmk.
    94 TOOL_VCC120_FN_FIND_SDK_TOOL_SUB = $(eval $3 := $(firstword  \
    95        $(if-expr defined(PATH_SDK_WINPSDK71_BIN), $(wildcard $(PATH_SDK_WINPSDK71_BIN)/$2)) \
    96        $(if-expr defined(PATH_SDK_WINPSDK_BIN)  , $(wildcard $(PATH_SDK_WINPSDK_BIN)/$2)) \
    97         $(rsort $(wildcard $(KBUILD_DEVTOOLS_HST)/sdk/*/[Bb][Ii][Nn]/$2)) \
    98         $(rsort $(wildcard $(KBUILD_DEVTOOLS_HST_ALT)/sdk/*/[Bb][Ii][Nn]/$2)) \
     121endif
     122
     123## Helper for finding rc.exe and mt.exe in the SDK.
     124TOOL_VCC141_FN_FIND_SDK_TOOL_SUB = $(eval $3 := $(firstfile  \
     125       $(if-expr defined(PATH_SDK_WINSDK10_BIN) , $(qwildcard ,$(PATH_SDK_WINSDK10_BIN)/$2)) \
     126       $(if-expr defined(PATH_SDK_WINPSDK71_BIN), $(qwildcard ,$(PATH_SDK_WINPSDK71_BIN)/$2)) \
     127       $(if-expr defined(PATH_SDK_WINPSDK_BIN)  , $(qwildcard ,$(PATH_SDK_WINPSDK_BIN)/$2)) \
     128        $(rsortfiles $(qwildcard ,$(KBUILD_DEVTOOLS_HST)/sdk/*/[Bb][Ii][Nn]/$2)) \
     129        $(rsortfiles $(qwildcard ,$(KBUILD_DEVTOOLS_HST_ALT)/sdk/*/[Bb][Ii][Nn]/$2)) \
    99130        $1))
    100 TOOL_VCC120_FN_FIND_SDK_TOOL = $(if-expr !defined($3),$(TOOL_VCC120_FN_FIND_SDK_TOOL_SUB),)$($3)
    101 
    102 ## Disabled fast DEP_IDB based dependencies.
    103 #VCC120_OLD_DEPS = 1
     131TOOL_VCC141_FN_FIND_SDK_TOOL = $(if-expr !defined($3),$(TOOL_VCC141_FN_FIND_SDK_TOOL_SUB),)$($3)
    104132
    105133## Constructs the correct .pdb name (the name is lowercased).
    106134# @param    $(1)        Base name, no extention.
    107135# @param    $(2)        The extension.
    108 TOOL_VCC120_PDB = $(dir $(1))$(tolower $(notdir $(1))).$(2)
    109 
    110 
    111 # General Properties used by kBuild
    112 TOOL_VCC120_COBJSUFF         ?= .obj
    113 TOOL_VCC120_CFLAGS           ?= -TC -nologo -Zi
    114 TOOL_VCC120_CFLAGS.debug     ?=
    115 TOOL_VCC120_CFLAGS.dbgopt    ?= -O2
    116 TOOL_VCC120_CFLAGS.release   ?= -O2
    117 TOOL_VCC120_CFLAGS.profile   ?= -O2
    118 TOOL_VCC120_CINCS            ?= $(PATH_TOOL_VCC120_INC)
    119 TOOL_VCC120_CDEFS            ?=
    120 
    121 TOOL_VCC120_CXXOBJSUFF       ?= .obj
    122 TOOL_VCC120_CXXFLAGS         ?= -TP -nologo -Zi
    123 TOOL_VCC120_CXXFLAGS.debug   ?=
    124 TOOL_VCC120_CXXFLAGS.dbgopt  ?= -O2
    125 TOOL_VCC120_CXXFLAGS.release ?= -O2
    126 TOOL_VCC120_CXXFLAGS.profile ?= -O2
    127 TOOL_VCC120_CXXINCS          ?= $(PATH_TOOL_VCC120_INC) $(PATH_TOOL_VCC120_ATLMFC_INC)
    128 TOOL_VCC120_CXXDEFS          ?=
    129 
    130 TOOL_VCC120_ASOBJSUFF        ?= .obj
    131 
    132 TOOL_VCC120_RCOBJSUFF        ?= .res
    133 TOOL_VCC120_RCINCS           ?= $(PATH_TOOL_VCC120_INC) $(PATH_TOOL_VCC120_ATLMFC_INC)
    134 
    135 TOOL_VCC120_ARFLAGS.amd64    ?= -machine:amd64
    136 TOOL_VCC120_ARFLAGS.x86      ?= -machine:x86
    137 TOOL_VCC120_ARFLAGS          ?= -nologo
    138 TOOL_VCC120_ARLIBSUFF        ?= .lib
    139 
    140 TOOL_VCC120_LDFLAGS.amd64    ?= -machine:amd64
    141 TOOL_VCC120_LDFLAGS.x86      ?= -machine:x86
    142 TOOL_VCC120_LDFLAGS          ?= -nologo
    143 TOOL_VCC120_LDFLAGS.debug    ?= -debug
    144 TOOL_VCC120_LDFLAGS.dbgopt   ?= -debug
    145 TOOL_VCC120_LDFLAGS.profile  ?= -debug
    146 TOOL_VCC120_LDFLAGS.release  ?=
    147 TOOL_VCC120_LIBPATH.amd64    ?= $(PATH_TOOL_VCC120_LIB.amd64) $(PATH_TOOL_VCC120_ATLMFC_LIB.amd64)
    148 TOOL_VCC120_LIBPATH.x86      ?= $(PATH_TOOL_VCC120_LIB.x86) $(PATH_TOOL_VCC120_ATLMFC_LIB.x86)
     136TOOL_VCC141_PDB = $(dir $(1))$(tolower $(notdir $(1))).$(2)
     137
     138
     139#
     140# Properties used by kBuild
     141#
     142TOOL_VCC141_COBJSUFF         ?= .obj
     143TOOL_VCC141_CFLAGS           ?= -TC -nologo -Zi
     144TOOL_VCC141_CFLAGS.debug     ?=
     145TOOL_VCC141_CFLAGS.dbgopt    ?= -O2
     146TOOL_VCC141_CFLAGS.release   ?= -O2
     147TOOL_VCC141_CFLAGS.profile   ?= -O2
     148TOOL_VCC141_CINCS            ?= $(PATH_TOOL_VCC141_INC)
     149TOOL_VCC141_CDEFS            ?=
     150
     151TOOL_VCC141_CXXOBJSUFF       ?= .obj
     152TOOL_VCC141_CXXFLAGS         ?= -TP -nologo -Zi
     153TOOL_VCC141_CXXFLAGS.debug   ?=
     154TOOL_VCC141_CXXFLAGS.dbgopt  ?= -O2
     155TOOL_VCC141_CXXFLAGS.release ?= -O2
     156TOOL_VCC141_CXXFLAGS.profile ?= -O2
     157TOOL_VCC141_CXXINCS          ?= $(PATH_TOOL_VCC141_INC) $(PATH_TOOL_VCC141_ATLMFC_INC)
     158TOOL_VCC141_CXXDEFS          ?=
     159
     160TOOL_VCC141_ASOBJSUFF        ?= .obj
     161
     162TOOL_VCC141_RCOBJSUFF        ?= .res
     163TOOL_VCC141_RCINCS           ?= $(PATH_TOOL_VCC141_INC) $(PATH_TOOL_VCC141_ATLMFC_INC)
     164
     165TOOL_VCC141_ARFLAGS          ?= -nologo
     166TOOL_VCC141_ARFLAGS.x86      ?= -machine:x86
     167TOOL_VCC141_ARFLAGS.amd64    ?= -machine:amd64
     168TOOL_VCC141_ARFLAGS.arm32    ?= -machine:arm
     169TOOL_VCC141_ARLIBSUFF        ?= .lib
     170
     171TOOL_VCC141_LDFLAGS          ?= -nologo
     172TOOL_VCC141_LDFLAGS.x86      ?= -machine:x86
     173TOOL_VCC141_LDFLAGS.amd64    ?= -machine:amd64
     174TOOL_VCC141_LDFLAGS.arm32    ?= -machine:arm
     175TOOL_VCC141_LDFLAGS.debug    ?= -debug
     176TOOL_VCC141_LDFLAGS.dbgopt   ?= -debug
     177TOOL_VCC141_LDFLAGS.profile  ?= -debug
     178TOOL_VCC141_LDFLAGS.release  ?=
    149179
    150180
     
    163193# @param    $(outbase)  Output basename (full). Use this for list files and such.
    164194# @param    $(objsuff)  Object suffix.
    165 TOOL_VCC120_COMPILE_C_DEPEND =
    166 TOOL_VCC120_COMPILE_C_DEPORD =
    167 TOOL_VCC120_COMPILE_C_OUTPUT =
    168 TOOL_VCC120_COMPILE_C_OUTPUT_MAYBE = $(call TOOL_VCC120_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC120_PDB, $(outbase)-obj,idb)
    169 define TOOL_VCC120_COMPILE_C_CMDS
    170         $(QUIET)$(TOOL_VCC120_CC) -c\
    171                 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
     195TOOL_VCC141_COMPILE_C_DEPEND =
     196TOOL_VCC141_COMPILE_C_DEPORD =
     197TOOL_VCC141_COMPILE_C_OUTPUT =
     198TOOL_VCC141_COMPILE_C_OUTPUT_MAYBE = $(call TOOL_VCC141_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC141_PDB, $(outbase)-obj,idb)
     199ifdef TOOL_VCC141_KSUBMIT
     200 TOOL_VCC141_COMPILE_C_DONT_PURGE_OUTPUT := 1 # speed
     201 define TOOL_VCC141_COMPILE_C_CMDS
     202        $(QUIET)$(TOOL_VCC141_KSUBMIT) -P $(DEP_OBJ_INT) -f -s -q -o $(dep) -t $(obj) $(obj)\
     203                -- $(TOOL_VCC141_CC) -c\
     204                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
    172205                -Fd$(outbase)-obj.pdb \
    173206                -Fo$(obj)\
    174207                $(subst /,\\,$(abspath $(source)))
     208 endef
     209else
     210 define TOOL_VCC141_COMPILE_C_CMDS
     211        $(QUIET)$(TOOL_VCC141_CC) -c\
     212                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
     213                -Fd$(outbase)-obj.pdb \
     214                -Fo$(obj)\
     215                $(subst /,\\,$(abspath $(source)))
    175216        $(QUIET)$(DEP_OBJ) -f -s -q -o $(dep) -t $(obj) $(obj)
    176 endef
     217 endef
     218endif # !TOOL_VCC141_KSUBMIT
    177219
    178220
     
    190232# @param    $(outbase)  Output basename (full). Use this for list files and such.
    191233# @param    $(objsuff)  Object suffix.
    192 TOOL_VCC120_COMPILE_CXX_DEPEND = $($(target)_1_VCC_PCH_FILE)
    193 TOOL_VCC120_COMPILE_CXX_DEPORD =
    194 TOOL_VCC120_COMPILE_CXX_OUTPUT =
    195 TOOL_VCC120_COMPILE_CXX_OUTPUT_MAYBE = $(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB)\
    196         ,,$(call TOOL_VCC120_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC120_PDB, $(outbase)-obj,idb))
    197 define TOOL_VCC120_COMPILE_CXX_CMDS
    198         $(QUIET)$(TOOL_VCC120_CXX) -c\
    199                 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
     234TOOL_VCC141_COMPILE_CXX_DEPEND = $($(target)_1_VCC_PCH_FILE)
     235TOOL_VCC141_COMPILE_CXX_DEPORD =
     236TOOL_VCC141_COMPILE_CXX_OUTPUT =
     237TOOL_VCC141_COMPILE_CXX_OUTPUT_MAYBE = $(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB)\
     238        ,,$(call TOOL_VCC141_PDB, $(outbase)-obj,pdb) $(call TOOL_VCC141_PDB, $(outbase)-obj,idb))
     239ifdef TOOL_VCC141_KSUBMIT
     240 TOOL_VCC141_COMPILE_CXX_DONT_PURGE_OUTPUT := 1 # speed
     241 define TOOL_VCC141_COMPILE_CXX_CMDS
     242        $(QUIET)$(TOOL_VCC141_KSUBMIT) -P $(DEP_OBJ_INT) -f -s -q -o $(dep) -t $(obj) $(obj)\
     243                -- $(TOOL_VCC141_CXX) -c\
     244                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
    200245                $(if-expr defined($(target)_PCH_HDR)\
    201246                ,-FI$($(target)_PCH_HDR) -Yu$($(target)_PCH_HDR) -Fp$($(target)_1_VCC_PCH_FILE) -FS,)\
     
    203248                -Fo$(obj)\
    204249                $(subst /,\\,$(abspath $(source)))
     250 endef
     251else
     252 define TOOL_VCC141_COMPILE_CXX_CMDS
     253        $(QUIET)$(TOOL_VCC141_CXX) -c\
     254                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
     255                $(if-expr defined($(target)_PCH_HDR)\
     256                ,-FI$($(target)_PCH_HDR) -Yu$($(target)_PCH_HDR) -Fp$($(target)_1_VCC_PCH_FILE) -FS,)\
     257                -Fd$(if-expr defined($(target)_1_VCC_COMMON_OBJ_PDB),$($(target)_1_VCC_COMMON_OBJ_PDB),$(outbase)-obj.pdb) \
     258                -Fo$(obj)\
     259                $(subst /,\\,$(abspath $(source)))
    205260        $(QUIET)$(DEP_OBJ) -f -s -q -o $(dep) -t $(obj) $(obj)
    206 endef
     261 endef
     262endif # !TOOL_VCC141_KSUBMIT
    207263
    208264
     
    213269# related _1_VCC_PCH_FILE and add -Yc.
    214270#
    215 TOOL_VCC120-PCH                         := Helper for creating precompiled header using CXX handling.
    216 TOOL_VCC120-PCH_EXTENDS                 := VCC120
    217 TOOL_VCC120-PCH_CXXOBJSUFF              := .obj
    218 TOOL_VCC120-PCH_CXXINCS                  = $(TOOL_VCC120_CXXINCS)
    219 TOOL_VCC120-PCH_CXXFLAGS                 = $(TOOL_VCC120_CXXFLAGS) -FS
    220 TOOL_VCC120-PCH_CXXFLAGS.debug           = $(TOOL_VCC120_CXXFLAGS.debug)
    221 TOOL_VCC120-PCH_CXXFLAGS.dbgopt          = $(TOOL_VCC120_CXXFLAGS.dbgopt)
    222 TOOL_VCC120-PCH_CXXFLAGS.release         = $(TOOL_VCC120_CXXFLAGS.release)
    223 TOOL_VCC120-PCH_CXXFLAGS.profile         = $(TOOL_VCC120_CXXFLAGS.profile)
    224 TOOL_VCC120-PCH_COMPILE_CXX_DEPEND       = $(NO_SUCH_VARIABLE)
    225 TOOL_VCC120-PCH_COMPILE_CXX_DEPORD       = $(NO_SUCH_VARIABLE)
    226 TOOL_VCC120-PCH_COMPILE_CXX_OUTPUT       = $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
    227 TOOL_VCC120-PCH_COMPILE_CXX_OUTPUT_MAYBE = $(NO_SUCH_VARIABLE)
    228 ifdef TOOL_VCC120_KSUBMIT
    229  define TOOL_VCC120-PCH_COMPILE_CXX_CMDS
    230         $(QUIET)$(TOOL_VCC120_KSUBMIT) --no-pch-caching -P $(DEP_OBJ_INT) -f -s -q -e .pch -o $(dep) -t $(obj) $(obj)\
    231                 -- $(TOOL_VCC120_CXX) -c -Yc\
    232                 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
     271TOOL_VCC141-PCH                         := Helper for creating precompiled header using CXX handling.
     272TOOL_VCC141-PCH_EXTENDS                 := VCC141
     273TOOL_VCC141-PCH_CXXOBJSUFF              := .obj
     274TOOL_VCC141-PCH_CXXINCS                  = $(TOOL_VCC141_CXXINCS)
     275TOOL_VCC141-PCH_CXXFLAGS                 = $(TOOL_VCC141_CXXFLAGS) -FS
     276TOOL_VCC141-PCH_CXXFLAGS.debug           = $(TOOL_VCC141_CXXFLAGS.debug)
     277TOOL_VCC141-PCH_CXXFLAGS.dbgopt          = $(TOOL_VCC141_CXXFLAGS.dbgopt)
     278TOOL_VCC141-PCH_CXXFLAGS.release         = $(TOOL_VCC141_CXXFLAGS.release)
     279TOOL_VCC141-PCH_CXXFLAGS.profile         = $(TOOL_VCC141_CXXFLAGS.profile)
     280TOOL_VCC141-PCH_COMPILE_CXX_DEPEND       = $(NO_SUCH_VARIABLE)
     281TOOL_VCC141-PCH_COMPILE_CXX_DEPORD       = $(NO_SUCH_VARIABLE)
     282TOOL_VCC141-PCH_COMPILE_CXX_OUTPUT       = $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
     283TOOL_VCC141-PCH_COMPILE_CXX_OUTPUT_MAYBE = $(NO_SUCH_VARIABLE)
     284ifdef TOOL_VCC141_KSUBMIT
     285 define TOOL_VCC141-PCH_COMPILE_CXX_CMDS
     286        $(QUIET)$(RM) -f -- $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
     287        $(QUIET)$(TOOL_VCC141_KSUBMIT) --no-pch-caching -P $(DEP_OBJ_INT) -f -s -q -e .pch -o $(dep) -t $(obj) $(obj)\
     288                -- $(TOOL_VCC141_CXX) -c -Yc\
     289                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
    233290               -Fp$($(target)_1_VCC_PCH_FILE) \
    234291                -Fd$($(target)_1_VCC_COMMON_OBJ_PDB) \
     
    238295 endef
    239296else
    240  define TOOL_VCC120-PCH_COMPILE_CXX_CMDS
    241         $(QUIET)$(TOOL_VCC120_CXX) -c -Yc\
    242                 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
     297 define TOOL_VCC141-PCH_COMPILE_CXX_CMDS
     298        $(QUIET)$(RM) -f -- $($(target)_1_VCC_PCH_FILE) $($(target)_1_VCC_COMMON_OBJ_PDB)
     299        $(QUIET)$(TOOL_VCC141_CXX) -c -Yc\
     300                $(flags) $(qaddprefix sh,-I, $(incs)) $(qaddprefix sh,-D, $(defs))\
    243301               -Fp$($(target)_1_VCC_PCH_FILE) \
    244302                -Fd$($(target)_1_VCC_COMMON_OBJ_PDB) \
     
    249307
    250308 endef
    251 endif # !TOOL_VCC120_KSUBMIT
     309endif # !TOOL_VCC141_KSUBMIT
    252310
    253311
     
    267325# @param    $(outbase)  Output basename (full). Use this for list files and such.
    268326# @param    $(objsuff)  Object suffix.
    269 TOOL_VCC120_COMPILE_RC_OUTPUT =
    270 TOOL_VCC120_COMPILE_RC_DEPEND =
    271 TOOL_VCC120_COMPILE_RC_DEPORD =
    272 define TOOL_VCC120_COMPILE_RC_CMDS
    273         $(QUIET)$(TOOL_VCC120_RC) \
    274                 $(flags) $(addprefix /i, $(subst /,\\,$(incs))) $(addprefix /d, $(defs))\
     327TOOL_VCC141_COMPILE_RC_DEPEND =
     328TOOL_VCC141_COMPILE_RC_DEPORD =
     329TOOL_VCC141_COMPILE_RC_OUTPUT =
     330define TOOL_VCC141_COMPILE_RC_CMDS
     331        $(QUIET)$(TOOL_VCC141_RC) \
     332                $(flags) $(qaddprefix sh,/i, $(subst /,\\,$(incs))) $(qaddprefix sh,/d, $(defs))\
    275333                /fo$(obj)\
    276334                $(subst /,\\,$(abspath $(source)))
     
    288346# @param    $(outbase)  Output basename (full). Use this for list files and such.
    289347#
    290 TOOL_VCC120_LINK_LIBRARY_DEPEND = $(othersrc)
    291 TOOL_VCC120_LINK_LIBRARY_DEPORD =
    292 TOOL_VCC120_LINK_LIBRARY_OUTPUT = $(outbase).rsp
    293 TOOL_VCC120_LINK_LIBRARY_OUTPUT_MAYBE = $(outbase).lst $(outbase).exp $(outbase).pdb
    294 define TOOL_VCC120_LINK_LIBRARY_CMDS
     348TOOL_VCC141_LINK_LIBRARY_DEPEND = $(othersrc)
     349TOOL_VCC141_LINK_LIBRARY_DEPORD =
     350TOOL_VCC141_LINK_LIBRARY_OUTPUT = $(outbase).rsp
     351TOOL_VCC141_LINK_LIBRARY_OUTPUT_MAYBE = $(outbase).lst $(outbase).exp $(outbase).pdb
     352define TOOL_VCC141_LINK_LIBRARY_CMDS
    295353        $(QUIET)$(APPEND) -tn $(outbase).rsp \
    296                 $(foreach arg,\
    297                         $(subst /,\\,$(objs) \
    298                         $(filter-out %.def,$(othersrc))) \
    299                         $(addprefix /DEF:,$(filter %.def,$(othersrc))) \
    300                         ,\"$(arg)\")
    301         $(QUIET)$(TOOL_VCC120_AR) $(flags) /OUT:$(out) @$(outbase).rsp
     354                $(qforeachfile u,arg, $(objs) $(filter-out %.def,$(othersrc)),$(quote-sh "$(subst /,\,$(arg))")) \
     355                $(qforeachfile u,arg, $(filter %.def,$(othersrc)),$(quote-sh "/DEF:$(subst /,\,$(arg))"))
     356        $(QUIET)$(TOOL_VCC141_KSUBMIT_DD) $(TOOL_VCC141_AR) $(flags) /OUT:$(out) @$(outbase).rsp
    302357endef
    303358
     
    317372# @param    $(outbase)      Output basename (full). Use this for list files and such.
    318373#
    319 TOOL_VCC120_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
    320 TOOL_VCC120_LINK_PROGRAM_DEPORD =
    321 TOOL_VCC120_LINK_PROGRAM_OUTPUT_MAYBE_PRECIOUS = $(outbase).map $(outbase).rsp
    322 TOOL_VCC120_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
    323 TOOL_VCC120_LINK_PROGRAM_OUTPUT_DEBUG = $(outbase).pdb
    324 TOOL_VCC120_LINK_PROGRAM_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
    325 define TOOL_VCC120_LINK_PROGRAM_CMDS
     374TOOL_VCC141_LINK_PROGRAM_DEPEND = $(foreachfile lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
     375TOOL_VCC141_LINK_PROGRAM_DEPORD =
     376TOOL_VCC141_LINK_PROGRAM_OUTPUT_MAYBE_PRECIOUS = $(outbase).map $(outbase).rsp
     377TOOL_VCC141_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
     378TOOL_VCC141_LINK_PROGRAM_OUTPUT_DEBUG = $(outbase).pdb
     379TOOL_VCC141_LINK_PROGRAM_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
     380define TOOL_VCC141_LINK_PROGRAM_CMDS
    326381        $(QUIET)$(APPEND) -tn $(outbase).rsp \
    327                 $(foreach arg,\
    328                     $(subst /,\\,$(objs)) \
    329                     $(subst /,\\,$(libs)) \
    330                         ,\"$(arg)\")
    331         $(QUIET)$(TOOL_VCC120_LD) $(flags) \
     382                $(qforeachfile u,arg, $(objs) $(libs),$(quote-sh "$(subst /,\,$(arg))"))
     383        $(QUIET)$(TOOL_VCC141_KSUBMIT_DD) $(TOOL_VCC141_LD) $(flags) \
    332384                /OUT:$(out) \
    333385                /MAPINFO:EXPORTS /INCREMENTAL:NO \
     
    335387                $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
    336388                $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
    337                 $(foreach p,$(libpath), /LIBPATH:$(p)) \
     389                $(qaddprefix sh,/LIBPATH:,$(libpath)) \
    338390                @$(outbase).rsp
    339 ifndef TOOL_VCC120_NO_AUTO_MANIFEST
     391ifndef TOOL_VCC141_NO_AUTO_MANIFEST
    340392        $(QUIET)$(TEST) -f $(out).manifest -- \
    341                 $(TOOL_VCC120_MT) -manifest $(subst /,\\,$(out)).manifest -outputresource:$(subst /,\\,$(out))
     393                $(TOOL_VCC141_MT) -manifest $(subst /,\\,$(out)).manifest -outputresource:$(subst /,\\,$(out))
    342394endif
    343395endef
     
    358410#
    359411# @param    $(outbase)  Output basename (full). Use this for list files and such.
    360 TOOL_VCC120_LINK_DLL_DEPEND = $(objs) $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
    361 TOOL_VCC120_LINK_DLL_DEPORD = $(call DIRDEP,$(PATH_STAGE_LIB))
    362 TOOL_VCC120_LINK_DLL_OUTPUT = $(outbase).lib $(outbase).exp
    363 TOOL_VCC120_LINK_DLL_OUTPUT_MAYBE = $(outbase).ilk $(out).manifest $(PATH_STAGE_LIB)/$(notdir $(outbase)).exp
    364 TOOL_VCC120_LINK_DLL_OUTPUT_MAYBE_PRECIOUS = $(PATH_STAGE_LIB)/$(notdir $(outbase)).lib $(outbase).map $(outbase).rsp
    365 TOOL_VCC120_LINK_DLL_OUTPUT_DEBUG = $(outbase).pdb
    366 TOOL_VCC120_LINK_DLL_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
    367 define TOOL_VCC120_LINK_DLL_CMDS
     412TOOL_VCC141_LINK_DLL_DEPEND = $(foreachfile lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
     413TOOL_VCC141_LINK_DLL_DEPORD = $(call DIRDEP,$(PATH_STAGE_LIB))
     414TOOL_VCC141_LINK_DLL_OUTPUT = $(outbase).lib $(outbase).exp
     415TOOL_VCC141_LINK_DLL_OUTPUT_MAYBE = $(outbase).ilk $(out).manifest $(PATH_STAGE_LIB)/$(notdir $(outbase)).exp
     416TOOL_VCC141_LINK_DLL_OUTPUT_MAYBE_PRECIOUS = $(PATH_STAGE_LIB)/$(notdir $(outbase)).lib $(outbase).map $(outbase).rsp
     417TOOL_VCC141_LINK_DLL_OUTPUT_DEBUG = $(outbase).pdb
     418TOOL_VCC141_LINK_DLL_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
     419define TOOL_VCC141_LINK_DLL_CMDS
    368420        $(QUIET)$(APPEND) -tn $(outbase).rsp \
    369                 $(foreach arg,\
    370                     $(subst /,\\,$(objs)) \
    371                     $(subst /,\\,$(libs)) \
    372                         ,\"$(arg)\")
    373         $(QUIET)$(TOOL_VCC120_LD) $(flags) \
     421                $(qforeachfile u,arg, $(objs) $(libs),$(quote-sh "$(subst /,\,$(arg))"))
     422        $(QUIET)$(TOOL_VCC141_KSUBMIT_DD) $(TOOL_VCC141_LD) $(flags) \
    374423                /OUT:$(out) \
    375424                /IMPLIB:$(outbase).lib \
     
    379428                $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
    380429                $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
    381                 $(foreach p,$(libpath), /LIBPATH:$(p)) \
     430                $(qaddprefix sh,/LIBPATH:,$(libpath)) \
    382431                @$(outbase).rsp
    383 ifndef TOOL_VCC120_NO_AUTO_MANIFEST
     432ifndef TOOL_VCC141_NO_AUTO_MANIFEST
    384433        $(QUIET)$(TEST) -f $(out).manifest -- \
    385                 $(TOOL_VCC120_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
     434                $(TOOL_VCC141_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
    386435endif
    387436        $(QUIET)$(TEST) -f $(outbase).lib -- $(KLIBTWEAKER_EXT) --clear-timestamps $(outbase).lib
    388         $(QUIET)$(CP) --changed --ignore-non-existing $(outbase).exp $(outbase).lib $(PATH_STAGE_LIB)/
     437        $(QUIET)$(CP) --changed -v --ignore-non-existing $(outbase).exp $(outbase).lib $(PATH_STAGE_LIB)/
    389438$(eval _DIRS += $(PATH_STAGE_LIB))
    390439endef
     
    405454#
    406455# @param    $(outbase)  Output basename (full). Use this for list files and such.
    407 TOOL_VCC120_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
    408 TOOL_VCC120_LINK_SYSMOD_DEPORD =
    409 TOOL_VCC120_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
    410 TOOL_VCC120_LINK_SYSMOD_OUTPUT_MAYBE_PRECIOUS = $(outbase).map $(outbase).rsp
    411 TOOL_VCC120_LINK_SYSMOD_OUTPUT_DEBUG = $(outbase).pdb
    412 TOOL_VCC120_LINK_SYSMOD_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
    413 define TOOL_VCC120_LINK_SYSMOD_CMDS
     456TOOL_VCC141_LINK_SYSMOD_DEPEND = $(foreachfile lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) $(othersrc)
     457TOOL_VCC141_LINK_SYSMOD_DEPORD =
     458TOOL_VCC141_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).lib $(outbase).exp $(outbase).ilk $(out).manifest
     459TOOL_VCC141_LINK_SYSMOD_OUTPUT_MAYBE_PRECIOUS = $(outbase).map $(outbase).rsp
     460TOOL_VCC141_LINK_SYSMOD_OUTPUT_DEBUG = $(outbase).pdb
     461TOOL_VCC141_LINK_SYSMOD_DEBUG_INSTALL_FN = $(2).pdb=>$(basename $(3)).pdb
     462define TOOL_VCC141_LINK_SYSMOD_CMDS
    414463        $(QUIET)$(APPEND) -tn $(outbase).rsp \
    415                 $(foreach arg,\
    416                     $(subst /,\\,$(objs)) \
    417                     $(subst /,\\,$(libs)) \
    418                         ,\"$(arg)\")
    419         $(QUIET)$(TOOL_VCC120_LD) $(flags) \
     464                $(qforeachfile u,arg, $(objs) $(libs),$(quote-sh "$(subst /,\,$(arg))"))
     465        $(QUIET)$(TOOL_VCC141_KSUBMIT_DD) $(TOOL_VCC141_LD) $(flags) \
    420466                /OUT:$(out) \
    421467                /MAPINFO:EXPORTS /INCREMENTAL:NO \
     
    423469                $(foreach def,$(filter %.def,$(othersrc)), /DEF:$(def)) \
    424470                $(subst /,\\,$(filter %.exp %.res,$(othersrc))) \
    425                 $(foreach p,$(libpath), /LIBPATH:$(p)) \
     471                $(qaddprefix sh,/LIBPATH:,$(libpath)) \
    426472                @$(outbase).rsp
    427 ifndef TOOL_VCC120_NO_AUTO_MANIFEST
     473ifndef TOOL_VCC141_NO_AUTO_MANIFEST
    428474        $(QUIET)$(TEST) -f $(out).manifest -- \
    429                 $(TOOL_VCC120_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
     475                $(TOOL_VCC141_MT) -manifest $(subst /,\\,$(out)).manifest '-outputresource:$(subst /,\\,$(out));#2'
    430476endif
    431477endef
Note: See TracChangeset for help on using the changeset viewer.