mirror of https://github.com/KLayout/klayout.git
293 lines
9.1 KiB
Batchfile
293 lines
9.1 KiB
Batchfile
|
|
@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
|
|
|