armasm and armasm64, the MSVC toolchain's assemblers for arm and arm64
respectively, have completely different invocations than their ml and
ml64 counterparts targetting x86 and x86-64.
Here's the full output of armasm's help:
```
cmd> armasm64 -h
Microsoft (R) ARM Macro Assembler Version 14.23.28106.4 for 64 bits
Copyright (C) Microsoft Corporation. All rights reserved.
Usage: armasm [<options>] sourcefile objectfile
armasm [<options>] -o objectfile sourcefile
armasm -h for help
<options>: (Upper case shows allowable abbreviation)
-Errors errorsfile redirect stderr diagnostics to errorsfile
-I dir[;dir] add dirs to include search path
-PreDefine directive pre-execute a SET{L,A,S} directive
-NOWarn turn off warning messages
-ignore <warning-num> don't report warning-num
-Help help (this information)
-via <file> read further arguments from <file>
-machine <machine> set the PE machine type field
-g generate debugging info
-gh:SHA_256 use SHA256 for file checksum in debug info (experimental)
-errorReport:<option> report internal assembler errors to Microsoft
none - do not send report
prompt - prompt to immediately send report
queue - at next admin logon, prompt to send report (default)
send - send report automatically
<machine>: ARM64
```
Adds gnu11 (libstdc++ with new ABI) and libc++ values to stdlib feature.
The value gnu was already in use by sun toolset, so this commit sets it as
libstdc++ with old ABI. Adds support for that feature to gcc, clang-linux and
clang-darwin toolsets. Refactors sun toolset to use stdlib feature via toolset
flags.
* add LTO support
Adds lto feature with 2 values: off (the default) and on. The feature
enables link-time optimizations. Also adds support for the feature to
gcc, clang and msvc toolsets.
* add docs for lto feature
* add lto-mode subfeature
* change lto-mode=full to be the default for uniform behaviour
* make lto feature optional
* build: Support toolset=msvc even as Cygwin build.
Fixes: https://github.com/boostorg/build/issues/459
* msvc.jam: Avoid segmentation fault if ProgramFiles env is missing.
When we run in an 'env -i' session in Cygwin, which may not have the
"ProgramFiles(x86)" or "ProgramFiles" environment variables set, we
really should not end up in a segmentation fault.
* msvc.jam: On Cygwin, query cygpath on missing ProgramFiles env.
When we run in an 'env -i' session in Cygwin, which may not have the
"ProgramFiles(x86)" or "ProgramFiles" environment variables set, we can
try to query cygpath instead.
Some system headers on POSIX systems indirectly include strings.h in extern "C"
region. This sometimes results in Boost.Build's strings.h being included into
such region, which marks all string_* functions as extern "C" and changes their
name mangling rules accordingly, which causes linking errors. To resolve this
header conflict, this commit renames strings.h to jam_strings.h. And strings.cpp
to jam_strings.cpp for consistency.
Fixes https://github.com/boostorg/build/issues/468.
* Add a warning to running the Boost Build tests about outputting to the console in a configuration jam file.
* Fix the tests if the toolset passed has a version.