Modifications to build C++ with Visual Studio 2026 and the v145 toolset. (#9359)

* Modifications to build C++ with Visual Studio 2026 and the v145 toolset.

* Fixes linker settings for rocksdb for Debug and Release builds

* module is a C++ 20 keyword. Explicitly stating namespace allows cpp20 projects to build against the library

* Fixes crash when initializing an object with the initialize function when some of the attributes are empty, {}, or omitted, std::nullopt

* cleanup for vs2026 v145 toolset per @aothms review

* Fixes bug, IfcCurveSegment.setStartLength was setSegmentLength in alignment_helper.cpp

* Bumps boost to 1.92
This commit is contained in:
Richard Brice
2026-08-26 09:10:41 -07:00
committed by GitHub
parent 05e5a375f5
commit 05ba93ab61
7 changed files with 133 additions and 53 deletions
+11 -2
View File
@@ -123,7 +123,7 @@ if "%CMAKE_VERSION%" LSS "cmake version 3.11.4" (
)
:: NOTE Boost < 1.64 doesn't work without tricks if the user has only VS 2017 installed and no earlier versions.
set BOOST_VERSION=1.86.0
set BOOST_VERSION=1.92.0
:: Version string with underscores instead of dots.
set BOOST_VER=%BOOST_VERSION:.=_%
@@ -464,6 +464,10 @@ cd "%DEPENDENCY_DIR%"
:: so disable it from the build altogether as we have no use for it
findstr #add_subdirectory(COLLADAValidator) CMakeLists.txt>NUL
IF NOT %ERRORLEVEL%==0 git apply --reject --whitespace=fix "%~dp0patches\OpenCOLLADA_CMakeLists.txt.patch" --ignore-whitespace
:: std::tr1::unordered_map was a legacy MSVC compatibility shim kept around through VS2022's STL, but newer
:: toolsets (e.g. VS2026/v145) no longer provide it, breaking the build with error C2039: 'tr1' is not a member of 'std'.
findstr /C:"typedef std::unordered_map<MarkId, FilePosType > MarkIdToFilePos;" common\libBuffer\include\CommonFWriteBufferFlusher.h>NUL
IF NOT %ERRORLEVEL%==0 git apply --reject --whitespace=fix "%~dp0patches\OpenCOLLADA_CommonFWriteBufferFlusher_tr1.patch" --ignore-whitespace
:: NOTE OpenCOLLADA has been observed to have problems with switching between debug and release builds so
:: uncomment to following line in order to delete the CMakeCache.txt always if experiencing problems.
REM IF EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%\CMakeCache.txt". del "%DEPENDENCY_DIR%\%BUILD_DIR%\CMakeCache.txt"
@@ -747,7 +751,12 @@ set QT6_MSVC_YEAR=%VS_VER%
IF /I "%VS_TOOLSET%"=="v141" set QT6_MSVC_YEAR=2017
IF /I "%VS_TOOLSET%"=="v142" set QT6_MSVC_YEAR=2019
IF /I "%VS_TOOLSET%"=="v143" set QT6_MSVC_YEAR=2022
IF /I "%VS_TOOLSET%"=="v145" set QT6_MSVC_YEAR=2026
:: Qt has not published prebuilt msvc2026 binaries yet (aqt only lists win64_msvc2022_64 as of
:: Qt 6.7-6.10). The v14x MSVC toolsets share a stable ABI/CRT, so fall back to the msvc2022
:: binaries until Qt ships msvc2026 ones. Revisit once `aqt list-qt windows desktop --arch <ver>`
:: shows a msvc2026 entry.
IF /I "%VS_TOOLSET%"=="v145" set QT6_MSVC_YEAR=2022
IF "%VS_VER%"=="2026" set QT6_MSVC_YEAR=2022
set QT6_ARCH=
set QT6_INSTALL_SUFFIX=
@@ -0,0 +1,13 @@
diff --git a/common/libBuffer/include/CommonFWriteBufferFlusher.h b/common/libBuffer/include/CommonFWriteBufferFlusher.h
index c7af45b2..62b0f991 100644
--- a/common/libBuffer/include/CommonFWriteBufferFlusher.h
+++ b/common/libBuffer/include/CommonFWriteBufferFlusher.h
@@ -58,7 +58,7 @@ namespace Common
#else
typedef __int64 FilePosType;
#endif
- typedef std::tr1::unordered_map<MarkId, FilePosType > MarkIdToFilePos;
+ typedef std::unordered_map<MarkId, FilePosType > MarkIdToFilePos;
public:
static const size_t DEFAUL_BUFFER_SIZE = 64*1024;
+25
View File
@@ -20,10 +20,14 @@
:: Example usage:
:: run-cmake.bat vs2022-x64
:: run-cmake.bat vs2022-x64 -DGLTF_SUPPORT=ON
:: run-cmake.bat vs2022-x64 -DUSE_CCACHE=OFF
::
:: Used environment variables:
:: - `ADD_COMMIT_SHA` - if defined then `ADD_COMMIT_SHA` and `VERSION_OVERRIDE` cmake args will be set to `ON`.
:: - `USE_NINJA` - if defined then the Ninja generator will be used instead of the Visual Studio.
::
:: -DUSE_CCACHE=OFF (also accepts 0/FALSE/NO/N) disables ccache: the bundled ccache
:: install dir is kept out of CMAKE_PREFIX_PATH, and CMakeLists.txt skips detecting it.
@if not defined ECHO_ON ( echo off )
@@ -81,6 +85,27 @@ if not (%1)==() (
call set ARGUMENTS=%%ARGUMENTS:%1=%%
)
:: Honor -DUSE_CCACHE=OFF (also accepts 0/FALSE/NO/N, case-insensitive) by keeping
:: the bundled ccache out of CMAKE_PREFIX_PATH so it can't be auto-detected below.
set USE_CCACHE_VALUE=
for %%A in (%*) do (
set "ARG=%%~A"
if not "!ARG:-DUSE_CCACHE=!"=="!ARG!" (
for /f "tokens=2 delims==" %%V in ("!ARG!") do set "USE_CCACHE_VALUE=%%V"
)
)
if defined USE_CCACHE_VALUE (
if /I "!USE_CCACHE_VALUE!"=="OFF" set DISABLE_CCACHE=1
if /I "!USE_CCACHE_VALUE!"=="0" set DISABLE_CCACHE=1
if /I "!USE_CCACHE_VALUE!"=="FALSE" set DISABLE_CCACHE=1
if /I "!USE_CCACHE_VALUE!"=="NO" set DISABLE_CCACHE=1
if /I "!USE_CCACHE_VALUE!"=="N" set DISABLE_CCACHE=1
)
if defined DISABLE_CCACHE (
echo USE_CCACHE=%USE_CCACHE_VALUE% passed, disabling ccache.
set "CCACHE_INSTALL_DIR="
)
pushd ..
set CMAKE_INSTALL_PREFIX=%CD%\_installed-%GEN_SHORTHAND%
popd