ClearScript/V8Update.cmd

328 строки
8.0 KiB
Batchfile

@echo off
setlocal
::-----------------------------------------------------------------------------
:: process arguments
::-----------------------------------------------------------------------------
set v8testedrev=4.9.385.30
set gyprev=b85ad3e578da830377dbc1843aa4fbc5af17a192
set cygwinrev=c89e446b273697fadf3a10ff1007a97c0b7de6df
set clangrev=24e8c1c92fe54ef8ed7651b5850c056983354a4a
set traceeventcommonrev=d83d44b13d07c2fd0a40101a7deef9b93b841732
:ProcessArgs
set download=true
set mode=Release
:ProcessArg
if "%1"=="" goto ProcessArgsDone
if "%1"=="/?" goto EchoUsage
if /i "%1"=="/n" goto SetDownloadFalse
if /i "%1"=="\n" goto SetDownloadFalse
if /i "%1"=="-n" goto SetDownloadFalse
if /i "%1"=="debug" goto SetDebugMode
if /i "%1"=="release" goto SetReleaseMode
goto SetV8Rev
:EchoUsage
echo Downloads, builds, and imports V8 for use with ClearScript.
echo.
echo V8UPDATE [/N] [mode] [revision]
echo.
echo /N Do not download; use previously downloaded files if possible.
echo mode Build mode: "Debug" or "Release" (default).
echo revision V8 revision: "Latest", "Tested" (default) or branch/commit/tag.
echo * Examples: "candidate", "3.29.88.16".
echo * View history at https://chromium.googlesource.com/v8/v8.git.
goto Exit
:SetDownloadFalse
set download=false
goto NextArg
:SetDebugMode
set mode=Debug
goto NextArg
:SetReleaseMode
set mode=Release
goto NextArg
:SetV8Rev
set v8rev=%1
goto NextArg
:NextArg
shift
goto ProcessArg
:ProcessArgsDone
::-----------------------------------------------------------------------------
:: check environment
::-----------------------------------------------------------------------------
:CheckMSVS
if "%VisualStudioVersion%"=="12.0" goto UseMSVS2013
if "%VisualStudioVersion%"=="14.0" goto UseMSVS2015
echo Error: This script requires a Visual Studio 2013 or 2015 Developer Command
echo Prompt. Browse to http://www.visualstudio.com for more information.
goto Exit
:UseMSVS2013
set GYP_MSVS_VERSION=2013
goto CheckMSVSDone
:UseMSVS2015
set GYP_MSVS_VERSION=2015
:CheckMSVSDone
::-----------------------------------------------------------------------------
:: main
::-----------------------------------------------------------------------------
:Main
echo Build mode: %mode%
cd ClearScript\v8\v8
if errorlevel 1 goto Exit
if /i "%download%"=="true" goto Download
if exist build\ goto SkipDownload
echo *** BUILD DIRECTORY NOT FOUND; DOWNLOAD REQUIRED ***
choice /m Continue
if errorlevel 2 goto Exit
goto Download
:SkipDownload
cd build
goto Build
::-----------------------------------------------------------------------------
:: download
::-----------------------------------------------------------------------------
:Download
:ResolveRev
if "%v8rev%"=="" goto UseTestedRev
if /i "%v8rev%"=="latest" goto UseLatestRev
if /i "%v8rev%"=="tested" goto UseTestedRev
if /i "%v8rev%"=="%v8testedrev%" goto UseTestedRev
echo V8 revision: %v8rev%
echo *** WARNING: THIS V8 REVISION MAY NOT BE COMPATIBLE WITH CLEARSCRIPT ***
choice /m Continue
if errorlevel 2 goto Exit
goto ResolveRevDone
:UseTestedRev
set v8rev=%v8testedrev%
echo V8 revision: Tested (%v8testedrev%)
goto ResolveRevDone
:UseLatestRev
set v8rev=master
echo V8 revision: Latest
echo *** WARNING: THIS V8 REVISION MAY NOT BE COMPATIBLE WITH CLEARSCRIPT ***
choice /m Continue
if errorlevel 2 goto Exit
:ResolveRevDone
:EnsureBuildDir
if not exist build\ goto CreateBuildDir
echo Removing old build directory ...
rd /s /q build
:CreateBuildDir
echo Creating build directory ...
md build
if errorlevel 1 goto Error
:EnsureBuildDirDone
cd build
:DownloadV8
echo Downloading V8 ...
git clone -n -q https://chromium.googlesource.com/v8/v8.git
if errorlevel 1 goto Error
cd v8
git checkout -q "%v8rev%"
if errorlevel 1 goto Error
cd ..
:DownloadV8Done
cd v8
:PatchV8
echo Patching V8 ...
git apply --ignore-whitespace ..\..\V8Patch.txt 2>applyPatch.log
if errorlevel 1 goto Error
:PatchV8Done
:DownloadGYP
echo Downloading GYP ...
git clone -n -q https://chromium.googlesource.com/external/gyp.git build\gyp
if errorlevel 1 goto Error
cd build\gyp
git checkout -q "%gyprev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadGYPDone
:DownloadCygwin
echo Downloading Cygwin ...
git clone -n -q https://chromium.googlesource.com/chromium/deps/cygwin.git third_party\cygwin
if errorlevel 1 goto Error
cd third_party/cygwin
git checkout -q "%cygwinrev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadCygwinDone
:DownloadClang
echo Downloading Clang ...
git clone -n -q https://chromium.googlesource.com/chromium/src/tools/clang.git tools\clang
if errorlevel 1 goto Error
cd tools\clang
git checkout -q "%clangrev%"
if errorlevel 1 goto Error
cd ..\..
:DownloadClangDone
:DownloadTraceEventCommon
echo Downloading TraceEventCommon ...
git clone -n -q https://chromium.googlesource.com/chromium/src/base/trace_event/common.git base/trace_event/common
if errorlevel 1 goto Error
cd base/trace_event/common
git checkout -q "%traceeventcommonrev%"
if errorlevel 1 goto Error
cd ..\..\..
:DownloadTraceEventCommonDone
cd ..
:DownloadDone
::-----------------------------------------------------------------------------
:: build
::-----------------------------------------------------------------------------
:Build
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
:CreatePatchFile
echo Creating patch file ...
cd v8
git diff --ignore-space-change --ignore-space-at-eol >V8Patch.txt 2>createPatch.log
if errorlevel 1 goto Error
cd ..
:CreatePatchFileDone
:Copy32Bit
echo Building 32-bit V8 ...
if exist v8-ia32\ goto Copy32BitDone
md v8-ia32
if errorlevel 1 goto Error
xcopy v8\*.* v8-ia32\ /e /y >nul
if errorlevel 1 goto Error
:Copy32BitDone
:Build32Bit
cd v8-ia32
python build\gyp_v8 -Dtarget_arch=ia32 -Dcomponent=shared_library -Dv8_use_snapshot=false -Dv8_enable_i18n_support=0 >gyp.log
if errorlevel 1 goto Error
msbuild /p:Configuration=%mode% /p:Platform=Win32 /t:v8 tools\gyp\v8.sln >build.log
if errorlevel 1 goto Error
cd ..
:Build32BitDone
:Copy64Bit
echo Building 64-bit V8 ...
if exist v8-x64\ goto Copy64BitDone
md v8-x64
if errorlevel 1 goto Error
xcopy v8\*.* v8-x64\ /e /y >nul
if errorlevel 1 goto Error
:Copy64BitDone
:Build64Bit
cd v8-x64
python build\gyp_v8 -Dtarget_arch=x64 -Dcomponent=shared_library -Dv8_use_snapshot=false -Dv8_enable_i18n_support=0 >gyp.log
if errorlevel 1 goto Error
msbuild /p:Configuration=%mode% /p:Platform=x64 /t:v8 tools\gyp\v8.sln >build.log
if errorlevel 1 goto Error
cd ..
:Build64BitDone
:BuildDone
::-----------------------------------------------------------------------------
:: import
::-----------------------------------------------------------------------------
:Import
cd ..
:EnsureLibDir
if not exist lib\ goto CreateLibDir
echo Removing old lib directory ...
rd /s /q lib
:CreateLibDir
echo Creating lib directory ...
md lib
if errorlevel 1 goto Error
:EnsureLibDirDone
:ImportLibs
echo Importing V8 libraries ...
copy build\v8-ia32\build\%mode%\v8-ia32.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\build\%mode%\v8-ia32.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-ia32\build\%mode%\lib\v8-ia32.lib lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\build\%mode%\v8-x64.dll lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\build\%mode%\v8-x64.pdb lib\ >nul
if errorlevel 1 goto Error
copy build\v8-x64\build\%mode%\lib\v8-x64.lib lib\ >nul
if errorlevel 1 goto Error
:ImportLibsDone
:EnsureIncludeDir
if not exist include\ goto CreateIncludeDir
echo Removing old include directory ...
rd /s /q include
:CreateIncludeDir
echo Creating include directory ...
md include
if errorlevel 1 goto Error
:EnsureIncludeDirDone
:ImportHeaders
echo Importing V8 header files ...
copy build\v8\include\*.* include\ >nul
if errorlevel 1 goto Error
:ImportHeadersDone
:ImportPatchFile
echo Importing patch file ...
copy build\v8\V8Patch.txt .\ >nul
if errorlevel 1 goto Error
:ImportPatchFileDone
:ImportDone
::-----------------------------------------------------------------------------
:: exit
::-----------------------------------------------------------------------------
echo Succeeded!
goto Exit
:Error
echo *** THE PREVIOUS STEP FAILED ***
:Exit
endlocal