Update the compiler version in the comment and explain how/when to update it in the future.
		
			
				
	
	
		
			65 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| How to add support for a new MSVS version
 | |
| =========================================
 | |
| 
 | |
| MSVS versions
 | |
| -------------
 | |
| 
 | |
| This is confusing because there are several of them:
 | |
| 
 | |
| - Marketing IDE/product version, which is the year of the release, e.g. 2019.
 | |
| - Actual internal IDE version, visible in `Help|About` dialog, for example,
 | |
|   e.g. 16.1.4.
 | |
| - Compiler version, visible in `cl /?` output, e.g. 19.21.27702.2. This version
 | |
|   also corresponds to the value of the predefined `_MSC_VER` symbol.
 | |
| - Toolset version: this is similar to the compiler version, but uses different
 | |
|   format, e.g. it's 14x for compiler version 19, with `x` being 0, 1 or 2
 | |
|   depending on the minor compiler version (00, 14 or 21).
 | |
| 
 | |
| Moreover, historically, different IDE versions corresponded to different major
 | |
| compiler versions, however this hasn't been the case any more for the last few
 | |
| releases (2015, 2017, 2019 or 14, 15, 16 IDE versions) that all use the same
 | |
| major compiler version (19) as they are ABI-compatible. Also, historically,
 | |
| each compiler used its own toolset, but these last few versions can each use
 | |
| any of 140, 141, 142 toolset.
 | |
| 
 | |
| wxWidgets uses the IDE version for the project/solution files (but notice that
 | |
| project files are the same for all MSVS 201x versions) and the toolset version
 | |
| for the names of build directories.
 | |
| 
 | |
| 
 | |
| TODO list
 | |
| ---------
 | |
| 
 | |
| Here is a list of things that need to be done when adding support for the next
 | |
| MSVS version:
 | |
| 
 | |
| - If the major compiler version changed, add a new `__VISUALCxx__` symbol to
 | |
|   `include/wx/compiler.h` (`xx` here are the first 2 digits of the toolset
 | |
|   version, i.e. basically correspond to the major compiler version, except
 | |
|   that 13 was skipped for superstitious reasons, see the comment in that file).
 | |
| - Add `wxCOMPILER_PREFIX` definition for the new version to
 | |
|   `include/msvc/wx/setup.h`.
 | |
| - Add the new solution file `build/msw/wx_vcNN.sln` (where `NN` is the internal
 | |
|   IDE version), typically by opening an existing solution in the new IDE and
 | |
|   letting it to update it.
 | |
| - Discard changes to the project files that were done by the IDE during the
 | |
|   update and instead update `build/msw/wx_config.props` and add a new condition
 | |
|   checking `VisualStudioVersion` value for choosing the value of
 | |
|   `PlatformToolset`.
 | |
| - Update the lists of supported compiler versions in the different
 | |
|   documentation files (search for "Microsoft Visual C++" to find the places
 | |
|   that need updating):
 | |
|   - `README.md`
 | |
|   - `docs/doxygen/mainpages/introduction.h`
 | |
|   - `docs/msw/install.md`
 | |
|   - `docs/release.md`
 | |
| - Update `build/tools/msvs/officialbuild.bat` to support the new toolset version
 | |
|   and also update `build/tools/msvs/buildall.bat` to call it with this new version
 | |
|   (these files are used to build the official binaries for the releases).
 | |
| - If necessary, i.e. if the warning C4535 appears when compiling
 | |
|   `src/msw/main.cpp` with the new version, check that this warning is still
 | |
|   harmless, i.e. that catching Win32 exceptions still works correctly (this
 | |
|   can be tested with the "Crash" menu item in the except sample) and  update
 | |
|   the version check in `include/wx/msw/seh.h` to suppress this warning for the
 | |
|   new version too.
 |