While the flag tables for C and C++ were generated from MSBuild `.xml`
files, the CSharp flag tables were written by hand. Copy the `v141`
flag table to use for the `v142` toolset.
Remove the special case added by commit 626c51f47b (VS: Update for
Visual Studio 2019 Preview 2, 2019-01-24, v3.14.0-rc1~74^2) that mapped
the v142 flag table lookup to v141 since we now have the real v142
table.
Fixes: #19828
626c51f47b VS: Update for Visual Studio 2019 Preview 2
fd45cbf40e VS: Fix `/MANIFESTUAC:` link flag mapping for v142
db35e3cfd6 VS: Fix support for '/guard:cf' linker flag for v142
533f95c847 VS: Map the link `/debug` flag for v142
d2fcc6748a VS: Fix `/MANIFESTUAC:NO` link flag mapping for v142
a7973ccb53 VS: Populate `/permissive` flag table entry for v142
049410c0b6 VS: Populate `/JMC-` flag table entry for v142
43aa632f57 VS: Populate `-Qspectre-` flag table entry for v142
...
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2856
Apply the change from commit 454b47ba0b (VS: Fix MANIFESTUAC link flag
map to .vcxproj elements, 2018-11-21) to the v142 flag table.
Add special parsing of the flags given in `/MANIFESTUAC:"..."` in order
to map them correctly to `.vcxproj` elements.
Keep the old incorrect flag table entries for `uiAccess` and `level`
flags for compatibility even though they do not really exist.
Apply the change from commit 57a78b5526 (VS: Fix support for '/guard:cf'
linker flag, 2018-11-21) to the v142 flag table.
Although `$(VCTargetsPath)/1033/link.xml` contains an entry for
`LinkControlFlowGuard`, it does not work when used in a `.vcxproj` file
(at least as of v140 and v141). Drop our link flag table entries for
these toolsets so that the flag will be passed via `AdditionalOptions`.
Apply the changes from commit a5d9aa5063 (VS: Map the link `/debug` to
its IDE property, 2018-11-21) and commit f77320c12a (VS: Add v140 and
v141 flag table entries for /DEBUG:NONE and /DEBUG:FULL, 2018-11-21) to
the v142 flag table.
See commit ae44496e2b (VS: Fix GenerateDebugInformation values for v140
and v141 toolsets, 2017-06-27, v3.9.0-rc6~15^2~1) for explanation.
Apply the change from commit 1d00fd7702 (VS: Fix /MANIFESTUAC:NO linker
option mapping, 2018-11-21) to the v142 flag table.
There are no versions of `/MANIFESTUAC:NO` where addition values are
appended. Remove both of the `MANIFESTUAC:NO` entries from our flag
tables and replace them with one which would set `EnableUAC` to false
and immediately stop processing the `/MANIFESTUAC:NO` option.
Apply the change from commit e0d6d01e52 (VS: Add flag table entry for
"permissive" flag to disable conformance mode, 2018-12-10) to the
v142 flag table.
Rather than the change from commit 584ad067ba (VS: Fix flag table entry
for -Qspectre, 2018-11-26), update the v142 flag table with an actual
flag for the negative form of the flag. Switch the entry order so that
the longer negative form is first.
Apply the change from commit f1223e34c6 (VS: Add v140 flag table entries
for `-Zc:inline[-]`, 2018-11-26) to the v142 flag table.
The documentation of this option [1] claims that the default is off, but
VS seems to use `-Zc:inline` by default if `RemoveUnreferencedCodeData`
does not appear in the `.vcxproj` file. Add the flag table entry to
allow use of the flag to be configured.
[1] https://msdn.microsoft.com/en-us/library/dn642448.aspx
Apply the change from commit 44dc9fc48a (VS: Fix /analyze:log flag
mapping, 2018-11-26) to the v142 flag table.
The `/analyze:log` argument requires a value in the following argument.
Also drop the general `/analyze:` flag table entry so that such flags
will be passed through as plain additional options. This is necessary
because some such options have following values and some do not but
not all have `.vcxproj` elements to hold the values.
The Qspectre option was generated by the script (as opposed to
being added by commit v3.13.0-rc1~4^2 (VS: Add flag table entry for
-Qspectre, 2018-10-08), however the comment was not useful and
there was a separate off option generated that was not in the
old table.
Original header commit v3.10.0-rc1~423^2
The change allows to selectively disable PrecompiledHeaders.
Despite the `$(VCTargetsPath)/1033/cl.xml` contains an empty value for switch,
for effectively turn off setting need to use /Y- option as described on msdn:
https://msdn.microsoft.com/en-us/library/1hy7a92h.aspx
Note: Zc:inline was added by generator, but not the - version.
Original header commit v3.7.2~8^2
The documentation of this option [1] claims that the default is off, but
VS seems to use `-Zc:inline` by default if `RemoveUnreferencedCodeData`
does not appear in the `.vcxproj` file. Add the flag table entry to
allow use of the flag to be configured.
[1] https://msdn.microsoft.com/en-us/library/dn642448.aspx
Original header commit v3.6.0-rc3~8^2
In commit v3.6.0-rc1~279^2~10 (VS: in Clang/C2 toolset, setup correct
compiler settings, 2016-02-18) a flag mapping was added for the clang
`-Os` flag. However, this collides with a mapping we already had for
the MSVC flag of the same name. This is a symptom of a larger problem
in that the VS generators need a per-toolset flag map (issue #16153).
For now, simply drop the new mapping and drop `-Os` from clang compiler
flags in the MinSizeRel configuration.
Original header commits:
v11/v12 commit v3.1.0-rc1~695^2
v140/v141 commit v3.1.0-rc1~358^2~3
Fix the VS 11 and VS 12 flag table entries for this flag. It requires
a value in the following argument. Also drop the general "/analyze:"
flag table entry so that such flags will be passed through as plain
additional options. This is necessary because some such options have
following values and some do not but not all have .vcxproj elements
to hold the values.
Original header commit v3.13.0-rc2~6^2
Add a missing `:` to these entries in the flag table. The user
value is always required and must come after the `:`.
The v141_Link.json already appeared to have the option included, so
onlyh adding the change to v14_LIB.json.
Original header commit v3.10.0-rc1~132^2
Visual Studio 15.4 adds support for this architecture.
Original header commit v3.10.0-rc1~97^2
Add special parsing of the flags given in `/MANIFESTUAC:"..."` in order
to map them correctly to `.vcxproj` elements.
Keep the old incorrect flag table entries for `uiAccess` and `level`
flags for compatibility even though they do not really exist.
Fixes: #16563
Original header commit v3.9.0-rc6~12^2
Although `$(VCTargetsPath)/1033/link.xml` for v140 and v141 toolsets
contains an entry for `LinkControlFlowGuard`, it does not work when used
in a `.vcxproj` file. Drop our link flag table entries for these
toolsets so that the flag will be passed via `AdditionalOptions`.
Fix issues with "GenerateDebugInformation". These
are mostly from the following commits, but also
include a related fix to the v140/v141 file.
Original header commits:
v10-v14 commit v3.5.0-rc1~71^2
v140/v141 commit v3.9.0-rc6~15^2~1
Original header commits:
v10/v11/v12 commit v3.0.0-rc5~3^2
v140 commit v3.1.0-rc1~358^2~3
There are no versions of /MANIFESTUAC:NO where addition values are
appended. Remove both of the MANIFESTUAC:NO entries from our flag
tables and replace them with one which would set EnableUAC to false and
immediately stop processing the /MANIFESTUAC:NO option.
Original header commit v3.9.0-rc1~431^2~5
Parse the `-cudart=` option and add a corresponding `CudaRuntime`
field to the generated project file. Also add a matching `.lib`
to the list of libraries linked.
Original header commit v3.9.0-rc1~431^2~6
The CUDA Toolkit's VS integration provides abstractions for host
compiler options for `nvcc` to pass through `-Xcompiler` to the host
MSVC. Populate our secondary flag table and use it to remove flags from
the `AdditionalCompilerOptions` in favor of their abstractions.
Unfortunately a bug in the CUDA 8.0 VS integration prevents us from
passing anything in `AdditionalCompilerOptions` reliably. After taking
out the flags that have dedicated abstractions, drop the rest.
Generate json flag tables from initial placeholder headers
Original header commit v3.9.0-rc1~431^2~10
The CUDA Toolkit's VS integration defines abstractions for both options
to `nvcc` and options to pass through `-Xcompiler` to the host MSVC.
We need a separate flag table to parse each set of flags into the
corresponding abstractions. Add empty placeholders for these tables.
Generate initial json flag tables for C# based on the initial
headers.
Original header commit v3.8.0-rc1~230^2
Add these (currently unused) tables in preparation for `.csproj`
generation support. Populate the tables for every version with a set of
initial values that work well for me with VS 12 and VS 14. Later we may
need to generate them more thoroughly from MSBuild `.xml` files.
Most arguments were quoted, but some weren't, causing problems if the
arguments contained whitespace.
In particular, the _STL_EXTRA_DISABLED_WARNINGS value takes spaces and
CMake's NASM support applies all add_definitions lines to NASM. The -D
flag is missing quotes, so projects using NASM and setting
_STL_EXTRA_DISABLED_WARNINGS break in the Visual Studio generator.
Likewise, the -o flag is missing quotes, which means filenames with
spaces do not work.
(The -U flag is unlikely to need quotes, but include them for
consistency.)
Extend the existing VSNASM test to cover these cases.