From 6ad5fbb27e3593597d8e855f6dac080d57745db5 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 7 May 2026 22:32:53 +0200 Subject: [PATCH] Add qt6 to win build scripts using an 3rd party install script --- win/build-deps.cmd | 104 ++++++++++++++++++++++++++++++++++++++------- win/run-cmake.bat | 43 +++++++++++-------- 2 files changed, 114 insertions(+), 33 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index e3a8a03da0..e0ae94b9ab 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -92,6 +92,7 @@ IF %VS_VER%==2008 set PATH=C:\Windows\Microsoft.NET\Framework\v3.5;%PATH% :: User-configurable build options IF NOT DEFINED IFCOS_INSTALL_PYTHON set IFCOS_INSTALL_PYTHON=TRUE +IF NOT DEFINED IFCOS_INSTALL_QT6 set IFCOS_INSTALL_QT6=TRUE IF NOT DEFINED IFCOS_NUM_BUILD_PROCS set IFCOS_NUM_BUILD_PROCS=%NUMBER_OF_PROCESSORS% @@ -153,6 +154,10 @@ echo - Download and install Python. echo Set to something other than TRUE if you wish to use an already installed version of Python. echo But then you'll need to set PYTHONHOME env variable to your Python installation before running run-cmake.bat echo to your Python installation path. +call cecho.cmd 0 13 "* IFCOS_INSTALL_QT6`t= %IFCOS_INSTALL_QT6%" +echo - Download and install Qt6 using aqtinstall. +echo Set to something other than TRUE if you wish to use an already installed version of Qt6. +echo But then you'll need to set QT_DIR env variable to your Qt6 installation before running run-cmake.bat. call cecho.cmd 0 13 "* IFCOS_NUM_BUILD_PROCS`t= %IFCOS_NUM_BUILD_PROCS%" echo - How many MSBuild.exe processes may be run in parallel. echo Defaults to NUMBER_OF_PROCESSORS. Used also by other IfcOpenShell build scripts. @@ -180,6 +185,11 @@ cd "%DEPS_DIR%" :: Don't use HDF5 1.13.0, because it has a broken cmake package path. set HDF5_VERSION=1_13_1 set OCCT_VERSION=7.8.1 +IF DEFINED QT6_VERSION ( + echo Using overridden QT6_VERSION: '%QT6_VERSION%' +) else ( + set QT6_VERSION=6.8.3 +) IF DEFINED PYTHON_VERSION ( echo Using overridden PYTHON_VERSION: '%PYTHON_VERSION%' ) else ( @@ -203,12 +213,11 @@ IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( :: executed by jumping (using goto) to different labels. if defined GEN_SHORTHAND echo GEN_SHORTHAND=%GEN_SHORTHAND%>"%~dp0\%BUILD_DEPS_CACHE_PATH%" echo HDF5_VERSION=%HDF5_VERSION%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" +echo QT6_VERSION=%QT6_VERSION%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( echo PYTHONHOME=%PYTHONHOME%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" ) -goto :manifold - :nuget set DEPENDENCY_NAME=nuget set NUGET_VERSION=6.14.0 @@ -597,13 +606,13 @@ IF NOT "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( goto :SWIG ) -:: nuget doesn't support providing architecture for packages. -IF /I NOT "%TARGET_ARCH%"=="x64" IF /I NOT "%TARGET_ARCH%"=="arm64" ( - call cecho.cmd 0 12 "Automatic installation of Python for x86 builds is not supported," - call cecho.cmd 0 12 "please install Python %PYTHON_VERSION% manually and ensure that it is available in PATH." - call cecho.cmd 0 12 "https://www.python.org/ftp/python/%PYTHON_VERSION%/%PYTHON_INSTALLER%" - goto :Error -) +:: nuget doesn't support providing architecture for packages. +IF /I NOT "%TARGET_ARCH%"=="x64" IF /I NOT "%TARGET_ARCH%"=="arm64" ( + call cecho.cmd 0 12 "Automatic installation of Python for x86 builds is not supported," + call cecho.cmd 0 12 "please install Python %PYTHON_VERSION% manually and ensure that it is available in PATH." + call cecho.cmd 0 12 "https://www.python.org/ftp/python/%PYTHON_VERSION%/%PYTHON_INSTALLER%" + goto :Error +) if EXIST "%PYTHONHOME%" ( echo Found existing '%PYTHONHOME%', skipping installation. @@ -618,10 +627,10 @@ IF /I "%TARGET_ARCH%"=="x64" ( IF NOT %ERRORLEVEL%==0 GOTO :Error ) -:SWIG -set DEPENDENCY_NAME=SWIG -set SWIG_VERSION=4.4.1 -set DEPENDENCY_DIR=%DEPS_DIR%\swig-%SWIG_VERSION% +:SWIG +set DEPENDENCY_NAME=SWIG +set SWIG_VERSION=4.4.1 +set DEPENDENCY_DIR=%DEPS_DIR%\swig-%SWIG_VERSION% set DEPENDENCY_INSTALL_DIR=%INSTALL_DIR%\swig-%SWIG_VERSION% echo SWIG_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" @@ -728,7 +737,7 @@ set ROCKSDB_VERSION=9.11.2 set ROCKSDB_ZIP=rocksdb-%ROCKSDB_VERSION%.zip set DEPENDENCY_DIR=%DEPS_DIR%\%DEPENDENCY_NAME%-%ROCKSDB_VERSION% set DEPENDENCY_INSTALL_NAME=%DEPENDENCY_NAME% -set NEXT_DEPENDENCY_LABEL=Successful +set NEXT_DEPENDENCY_LABEL=qt6 call :CheckInstallation if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% @@ -767,6 +776,71 @@ call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error call :MarkInstallation +:qt6 +set DEPENDENCY_NAME=Qt6 %QT6_VERSION% + +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 + +set QT6_ARCH= +set QT6_INSTALL_SUFFIX= +IF /I "%TARGET_ARCH%"=="x64" ( + set QT6_ARCH=win64_msvc%QT6_MSVC_YEAR%_64 + set QT6_INSTALL_SUFFIX=msvc%QT6_MSVC_YEAR%_64 +) +IF /I "%TARGET_ARCH%"=="arm64" ( + set QT6_ARCH=win64_msvc%QT6_MSVC_YEAR%_arm64_cross_compiled + set QT6_INSTALL_SUFFIX=msvc%QT6_MSVC_YEAR%_arm64 +) + +IF "%QT6_ARCH%"=="" ( + call cecho.cmd 0 12 "Automatic Qt6 installation is only supported for x64 and arm64 builds." + GOTO :Error +) + +set DEPENDENCY_INSTALL_NAME=qt6-%QT6_VERSION%-%QT6_INSTALL_SUFFIX% +set QT6_AQT_OUTPUT_DIR=%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME% +set QT6_INSTALL_DIR=%QT6_AQT_OUTPUT_DIR%\%QT6_VERSION%\%QT6_INSTALL_SUFFIX% +set QT_DIR=%QT6_INSTALL_DIR% +set NEXT_DEPENDENCY_LABEL=Successful + +IF NOT "%IFCOS_INSTALL_QT6%"=="TRUE" ( + call cecho.cmd 0 13 "IFCOS_INSTALL_QT6 not 'TRUE', skipping installation of Qt6." + goto :Successful +) + +echo QT6_INSTALL_DIR=%QT6_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" +echo QT_DIR=%QT_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" + +call :CheckInstallation +if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% + +IF EXIST "%QT6_INSTALL_DIR%\lib\cmake\Qt6\Qt6Config.cmake" ( + echo Found existing "%QT6_INSTALL_DIR%", skipping + call :MarkInstallation + goto :Successful +) + +set AQT_PYTHON=python +IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" IF EXIST "%PYTHONHOME%\python.exe" set AQT_PYTHON="%PYTHONHOME%\python.exe" + +%AQT_PYTHON% -m pip install --upgrade aqtinstall +IF NOT %ERRORLEVEL%==0 GOTO :Error + +%AQT_PYTHON% -m aqt install-qt windows desktop %QT6_VERSION% %QT6_ARCH% -O "%QT6_AQT_OUTPUT_DIR%" --archives qtbase +IF NOT %ERRORLEVEL%==0 GOTO :Error + +IF NOT EXIST "%QT6_INSTALL_DIR%\lib\cmake\Qt6\Qt6Config.cmake" ( + call cecho.cmd 0 12 "Qt6 installation did not produce Qt6Config.cmake at %QT6_INSTALL_DIR%." + GOTO :Error +) + +call :MarkInstallation +goto :Successful + :manifold set DEPENDENCY_NAME=manifold set MANIFOLD_VERSION=3.2.1 @@ -990,7 +1064,7 @@ exit /b 0 :: if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL% :: ``` :CheckInstallation -%PWSH_TOOLS% check_installation %DEPENDENCY_NAME% "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" +%PWSH_TOOLS% check_installation "%DEPENDENCY_NAME%" "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" set RET=%ERRORLEVEL% if %RET%==200 echo Found existing "%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%" for %BUILD_CFG%, skipping && exit /b 200 if %RET% NEQ 404 GOTO :Error diff --git a/win/run-cmake.bat b/win/run-cmake.bat index 2a49a65042..84e7e1cff5 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -123,10 +123,11 @@ set MPFR_INSTALL_DIR=%INSTALL_DIR%\mpfr :: We don't install Eigen currently, :: so there's no Eigen3config.cmake and therefore we provide path explicitly. set EIGEN_DIR=%INSTALL_DIR%\Eigen -set TBB_INSTALL_DIR=%INSTALL_DIR%\tbb -set USD_INSTALL_DIR=%INSTALL_DIR%\usd -set ROCKSDB_INSTALL_DIR=%INSTALL_DIR%\rocksdb -set ZSTD_INSTALL_DIR=%INSTALL_DIR%\zstd +set TBB_INSTALL_DIR=%INSTALL_DIR%\tbb +set USD_INSTALL_DIR=%INSTALL_DIR%\usd +set ROCKSDB_INSTALL_DIR=%INSTALL_DIR%\rocksdb +set ZSTD_INSTALL_DIR=%INSTALL_DIR%\zstd +if not defined QT_DIR if defined QT6_INSTALL_DIR set QT_DIR=%QT6_INSTALL_DIR% echo. call cecho.cmd 0 10 "Script configuration:" @@ -158,12 +159,13 @@ echo GMP_INSTALL_DIR = %GMP_INSTALL_DIR% echo MPFR_INSTALL_DIR = %MPFR_INSTALL_DIR% echo EIGEN_DIR = %EIGEN_DIR% echo TBB_INSTALL_DIR = %TBB_INSTALL_DIR% -echo USD_INSTALL_DIR = %USD_INSTALL_DIR% -echo ROCKSDB_INSTALL_DIR = %ROCKSDB_INSTALL_DIR% -echo ZSTD_INSTALL_DIR = %ZSTD_INSTALL_DIR% -echo CCACHE_INSTALL_DIR = %CCACHE_INSTALL_DIR% -echo. -echo CMAKE_INSTALL_PREFIX = %CMAKE_INSTALL_PREFIX% +echo USD_INSTALL_DIR = %USD_INSTALL_DIR% +echo ROCKSDB_INSTALL_DIR = %ROCKSDB_INSTALL_DIR% +echo ZSTD_INSTALL_DIR = %ZSTD_INSTALL_DIR% +echo QT_DIR = %QT_DIR% +echo CCACHE_INSTALL_DIR = %CCACHE_INSTALL_DIR% +echo. +echo CMAKE_INSTALL_PREFIX = %CMAKE_INSTALL_PREFIX% echo. set CMAKELISTS_DIR=..\cmake @@ -173,10 +175,14 @@ echo "Running CMake for %PROJECT_NAME%." set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR% set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% -set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% -set CMake_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%USD_INSTALL_DIR%;%TBB_INSTALL_DIR% -set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%OCC_INSTALL_DIR%;%CGAL_INSTALL_DIR% -set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%GMP_INSTALL_DIR%;%MPFR_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_INSTALL_DIR%;%CCACHE_INSTALL_DIR% +set CMake_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%USD_INSTALL_DIR%;%TBB_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%OCC_INSTALL_DIR%;%CGAL_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%GMP_INSTALL_DIR%;%MPFR_INSTALL_DIR% +if defined QT_DIR set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%QT_DIR% + +set QT_DIR_OPTION= +if defined QT_DIR set QT_DIR_OPTION=-DQT_DIR="%QT_DIR%" :: Not fully supported - not available from install-ifcopenshell :: and some logs are still showing Visual Studio generators. @@ -195,10 +201,11 @@ IF NOT "%VS_TOOLSET_HOST%"=="" ( cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% %ARCH_OPTION% %VS_TOOLSET_OPTION% ^ -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" ^ - -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ - -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ - -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% -DVERSION_OVERRIDE=%VERSION_OVERRIDE% ^ - %ARGUMENTS% + -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ + -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ + %QT_DIR_OPTION% ^ + -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% -DVERSION_OVERRIDE=%VERSION_OVERRIDE% ^ + %ARGUMENTS% IF NOT %ERRORLEVEL%==0 GOTO :Error