1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
|
@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
|