@echo off setlocal EnableDelayedExpansion rem ---------------------------------------------------------- rem KLAYOUT build script rem See build.bat -h for details rem rem ---------------------------------------------------------- rem parse command lines set CONFIG=release set HAVE_QTBINDINGS=1 set HAVE_QT=1 set HAVE_64BIT_COORD=0 set HAVE_PYTHON=1 set HAVE_RUBY=1 set MAKE_OPT= set HAVE_CURL=0 set HAVE_EXPAT=0 set HAVE_PTHREADS=0 set arch=x64 set compiler=msvc2017 set dry_run=0 set option-qmake=qmake set "option-bits=c:\klayout-bits" set "option-build=%TEMP%\klayout-build" set "option-bin=%TEMP%\klayout-bin" set "option=" for %%a in (%*) do ( if not defined option ( set arg=%%a if "!arg:~0,1!" equ "-" ( if "!arg!" equ "-h" ( set "option-h=1" set "option=" ) else if "!arg!" equ "--help" ( set "option-h=1" set "option=" ) else if "!arg!" equ "-help" ( set "option-h=1" set "option=" ) else if "!arg!" equ "-bits" ( set "option=!arg!" ) else if "!arg!" equ "-qmake" ( set "option=!arg!" ) else if "!arg!" equ "-build" ( set "option=!arg!" ) else if "!arg!" equ "-bin" ( set "option-bin=%TEMP%\klayout-bin" set "option=!arg!" ) else if "!arg!" equ "-prefix" ( set "option-bin=%TEMP%\klayout-bin" set "option=!arg!" ) else if "!arg!" equ "-build" ( set "option=!arg!" ) else if "!arg!" equ "-debug" ( set "CONFIG=debug" ) else if "!arg!" equ "-release" ( set "CONFIG=release" ) else if "!arg!" equ "-with-qtbinding" ( set "HAVE_QTBINDINGS=1" ) else if "!arg!" equ "-without-qtbinding" ( set "HAVE_QTBINDINGS=0" ) else if "!arg!" equ "-without-qt" ( set "HAVE_QT=0" set "HAVE_CURL=1" set "HAVE_EXPAT=1" set "HAVE_PTHREADS=1" set "HAVE_QTBINDINGS=0" ) else if "!arg!" equ "-with-64bit-coord" ( set "HAVE_64BIT_COORD=1" ) else if "!arg!" equ "-without-64bit-coord" ( set "HAVE_64BIT_COORD=0" ) else if "!arg!" equ "-nopython" ( set "HAVE_PYTHON=0" ) else if "!arg!" equ "-noruby" ( set "HAVE_RUBY=0" ) else if "!arg!" equ "-dry-run" ( set "dry_run=1" ) else if "!arg!" equ "-x64" ( set "arch=x64" ) else if "!arg!" equ "-x86" ( set "arch=x86" ) ) else ( set "MAKE_OPT=!MAKE_OPT! !arg!" ) ) else ( set "option!option!=%%a" set "option=" ) ) if defined option-h ( echo build.bat - KLayout build script echo. echo Mandatory options: echo -bits [path] Path to the 3rd party binary kit echo -build [path] Path to the build directory echo -bin [path] Path to the installation directory echo -prefix [path] Same as -bin echo -x86 32 bit build echo -x64 64 bit build [default] echo. echo Other options: echo -h -help --help Show this help echo -qmake [path] Path to the qmake binary echo -debug Perform a debug build echo -release Perform a release build [the default] echo -with-qtbinding Enable Qt support for Ruby/Python [the default] echo -without-qtbinding Disable Qt support for Ruby/Python echo -without-qt Entirely Qt-free build of a tool subset echo -with-64bit-coord Enable 64bit coordinate support [experimental] echo -without-64bit-coord Disable 64bit coordinate support [default] echo -nopython Dont include Python support echo -noruby Dont include Ruby support echo -dry-run Dont actually make goto :eof ) echo Analysing installation ... echo. rem ---------------------------------------------------------- rem locate MSVC on the system set MSVC_COMPILER_INST=notfound rem VS 2017 sets exactly one install as the "main" install, so we may find MSBuild in there. reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32 >nul 2>nul if NOT ERRORLEVEL 1 ( for /F "tokens=1,2*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v 15.0 /reg:32') do ( if "%%i"=="15.0" ( if exist "%%k\VC\Auxiliary\Build" ( set "MSVC_COMPILER_INST=%%k\VC\Auxiliary\Build" set "msg=Found MSVC installation at !MSVC_COMPILER_INST!" echo !msg! ) ) ) ) rem alternative way (VS2019) if "%MSVC_COMPILER_INST%" == "notfound" ( set vs_path=notfound for /f "delims=" %%i in ('"c:\program files (x86)\microsoft visual studio\installer\vswhere" -latest -prerelease -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -products *') do ( set "vs_path=%%i" ) if not "vs_path" == "notfound" ( set "MSVC_COMPILER_INST=!vs_path!\vc\Auxiliary\Build" ) ) if "%MSVC_COMPILER_INST%" == "notfound" ( echo ERROR: Unable to find MSVC installation goto :eof ) if %arch% equ x64 ( call "%MSVC_COMPILER_INST%\vcvars64" ) else ( call "%MSVC_COMPILER_INST%\vcvars32" ) rem ---------------------------------------------------------- rem check the kit if not exist "%option-bits%"\%compiler%\%arch% ( echo ERROR: no 3rd party binary kit found in %option-bits%\%compiler%\%arch% goto :eof ) if not exist "%option-bits%\%compiler%\%arch%\ruby\bin\ruby.exe" ( echo ERROR: %option-bits% not installed properly or echo path does not point to architecture folder. echo Use -bits to specfiy the path to the 3rd party binary kit. goto :eof ) echo Using bits from %option-bits%\%compiler%\%arch% rem ---------------------------------------------------------- rem check the qmake binary "%option-qmake%" -v >nul 2>nul if ERRORLEVEL 1 ( echo ERROR: Not a valid qmake: %option-qmake% echo Use -qmake option to specify the path to the qmake binary. goto :eof ) echo Using qmake from %option-qmake% rem ---------------------------------------------------------- rem read klayout Version for /F "tokens=1" %%i in ('type version.sh') do ( set line=%%i if "!line:~0,16!" equ "KLAYOUT_VERSION=" ( set "version=!line:~16,100!" set "KLAYOUT_VERSION=!version:"=!" ) ) date /t >%TEMP%\klayout-build-tmp.txt set /P KLAYOUT_VERSION_DATE=<%TEMP%\klayout-build-tmp.txt del %TEMP%\klayout-build-tmp.txt rem The short SHA hash of the commit git rev-parse --short HEAD 2>nul >%TEMP%\klayout-build-tmp.txt set /P KLAYOUT_VERSION_REV=<%TEMP%\klayout-build-tmp.txt if ERRORLEVEL 1 ( set "KLAYOUT_VERSION_REV=LatestSourcePackage" ) del %TEMP%\klayout-build-tmp.txt rem ---------------------------------------------------------- rem dump settings echo. echo Architecture: %arch% echo Compiler: %compiler% echo. echo CONFIG: %CONFIG% echo KLAYOUT_VERSION: %KLAYOUT_VERSION% echo KLAYOUT_VERSION_DATE: %KLAYOUT_VERSION_DATE% echo KLAYOUT_VERSION_REV: %KLAYOUT_VERSION_REV% echo HAVE_QTBINDINGS: %HAVE_QTBINDINGS% echo HAVE_QT: %HAVE_QT% echo HAVE_64BIT_COORD: %HAVE_64BIT_COORD% echo HAVE_PYTHON: %HAVE_PYTHON% echo HAVE_RUBY: %HAVE_RUBY% echo HAVE_CURL: %HAVE_CURL% echo HAVE_PTHREADS: %HAVE_PTHREADS% echo HAVE_EXPAT: %HAVE_EXPAT% echo MAKE_OPT: %MAKE_OPT% echo. echo qmake binary: %option-qmake% echo Build directory: %option-build% echo Installation directory: %option-bin% if %dry_run% equ 1 ( echo. echo Dry run ... stopping now. goto :eof ) rem ---------------------------------------------------------- rem Run qmake set "inst_path=%~dp0" mkdir "%option-build%" 2>nul cd "%option-build%" if not exist "%option-build%" ( echo ERROR: build directory does not exists and cannot be created goto :eof ) touch %inst_path%\src\version\version.h echo on "%option-qmake%" ^ HAVE_QT_UITOOLS=1 ^ HAVE_QT_NETWORK=1 ^ HAVE_QT_SQL=1 ^ HAVE_QT_SVG=1 ^ HAVE_QT_PRINTSUPPORT=1 ^ HAVE_QT_MULTIMEDIA=1 ^ HAVE_QT_DESIGNER=1 ^ HAVE_QT_XML=1 ^ -recursive ^ -spec win32-msvc ^ "CONFIG+=%CONFIG%" ^ "KLAYOUT_VERSION=%KLAYOUT_VERSION%" ^ "KLAYOUT_VERSION_DATE=%KLAYOUT_VERSION_DATE%" ^ "KLAYOUT_VERSION_REV=%KLAYOUT_VERSION_REV%" ^ "HAVE_QTBINDINGS=%HAVE_QTBINDINGS%" ^ "HAVE_QT=%HAVE_QT%" ^ "HAVE_EXPAT=%HAVE_EXPAT%" ^ "HAVE_CURL=%HAVE_CURL%" ^ "HAVE_PTHREADS=%HAVE_PTHREADS%" ^ "HAVE_RUBY=%HAVE_RUBY%" ^ "HAVE_PYTHON=%HAVE_PYTHON%" ^ "HAVE_64BIT_COORD=%HAVE_64BIT_COORD%" ^ "PREFIX=%option-bin%" ^ "BITS_PATH=%option-bits%\%compiler%\%arch%" ^ %inst_path%\src\klayout.pro || exit /b 1 rem start the build nmake %MAKE_OPT% || exit /b 2 rem install the binaries nmake install || exit /b 3