@echo off setlocal enableextensions disabledelayedexpansion cls set DPROJ=GLideN64.sln set DMN=REM set ERR=if errorlevel 1 goto err set MSG=%DPROJ% does not exist in the same directory if not exist "%~dp0%DPROJ%" goto err set ARCH= set BOTH=0 set CONF=Release set DLQT=0 set REB= set NOQT=0 set NOWTL=0 set NOM64=0 set ESIM=0 set EBQ=explorer "." taskkill /im msbuild.exe /f 2>nul taskkill /im vctip.exe /f 2>nul taskkill /im mspdbsrv.exe /f 2>nul if "%*"=="" goto help for %%P in (%*) do ( if /i "%%P"=="--clean" goto clean if /i "%%P"=="--x86" set ARCH=x86 if /i "%%P"=="--x64" set ARCH=x64& set BOTH=0 if /i "%%P"=="--all" set ARCH=x64& set BOTH=1 if /i "%%P"=="--debug" set CONF=Debug if /i "%%P"=="--rebuild" set REB=/t:Rebuild if /i "%%P"=="--noqt" set NOQT=1 if /i "%%P"=="--nowtl" set NOWTL=1 if /i "%%P"=="--nom64" set NOM64=1 if /i "%%P"=="--dlqt" set DLQT=1 if /i "%%P"=="--sim" set ESIM=1 if /i "%%P"=="--q" set EBQ=REM ) if not defined ARCH goto help set /a MOD=%NOQT%+%NOWTL%+%NOM64% set MSG=All compilation tasks were disabled on request if %MOD%==3 goto err set MSG=7z was not found in the environment 7z >nul 2>&1 %ERR% set tVSPF=%ProgramFiles(x86)% if "%PROCESSOR_ARCHITECTURE%"=="x86" set tVSPF=%ProgramFiles% set "tVSPF=%tVSPF%\Microsoft Visual Studio" set tVSDS=Common7\Tools\VsDevCmd.bat set MOD=\Community\ \Enterprise\ \Professional\ goto vsbeg :vsenv for %%V in (%MOD%) do ( if exist "%tVSPF%%~1%%V%tVSDS%" set "tVSDS=%tVSPF%%~1%%V%tVSDS%" ) goto:eof :vsbeg call :vsenv "\2019" call :vsenv "\2017" set MOD=\ call :vsenv " 14.0" call :vsenv " 12.0" set MSG=Visual Studio developer environment was not loaded msbuild -version >nul 2>&1 if errorlevel 1 call "%tVSDS%" %ERR% set MSG=Git was not found in the environment git --version >nul 2>&1 %ERR% set "TARCH=%ARCH%" :X86 pushd "%~dp0..\..\" if "%ARCH%"=="x86" set TARCH=Win32 if %NOQT%==1 goto noqt if defined QTDIR_%ARCH% goto nodl set "QTVER=qt-5_7_1-%ARCH%-msvc2017-static" if exist "..\Qt\%QTVER%\include\QtCore" goto nodl set MSG=Path to Qt %ARCH% was not specified or detected if %DLQT%==0 goto err set MSG=cURL was not found in the environment curl --version >nul 2>&1 %ERR% del /f /q "..\%QTVER%.7z" 2>nul set errorlevel=0 set QTURL=https://github.com/gonetz/GLideN64/releases/download/qt_build set MSG=cURL failed to download:^& echo %QTURL%/%QTVER%.7z curl -L -o "..\%QTVER%.7z" "%QTURL%/%QTVER%.7z" %ERR% set MSG=7z failed to extract:^& echo %QTVER%.7z 7z x -y "..\%QTVER%.7z" -o"..\Qt" %ERR% :nodl set "QTDIR=%~dp0..\..\..\Qt\%QTVER%" if "%ARCH%"=="x64" ( if defined QTDIR_x64 set "QTDIR="%QTDIR_x64%"" ) else ( if defined QTDIR_x86 set "QTDIR="%QTDIR_x86%"" ) set QTDIR=%QTDIR:"=% set MSG=Something went wrong when detecting Qt:^& echo %QTDIR% if not exist "%QTDIR%\include\QtCore" goto err :noqt if not defined BUILDROUTE set "BUILDROUTE="%~dp0..\..\build"" set BUILDROUTE=%BUILDROUTE:"=% set "PJ64QT=%BUILDROUTE%\QT_for_Project64_%ARCH%" set "PJ64WTL=%BUILDROUTE%\WTL_for_Project64_%ARCH%" set "M64CL=%BUILDROUTE%\for_Mupen64Plus_%ARCH%" set JACK= if "%ARCH%"=="x64" set JACK=_x64 set "PJ64PluginsDirQT%JACK%=%PJ64QT%" set "PJ64PluginsDirWTL%JACK%=%PJ64WTL%" set "Mupen64PluginsDir%JACK%=%M64CL%" set MOD=%random:~0,1% if %MOD% LEQ 4 (set MOD=Lylat) else ( if %MOD% GEQ 8 (set MOD=Kildean) else set MOD=Caryll) set MBQT=msbuild if %ESIM%==1 ( set "MBQT=echo %MBQT%" md "translations\wtl" 2>nul cd.>"translations\wtl\%MOD%.Lang" del /f /q "%BUILDROUTE%\*_%ARCH%.7z" 2>nul set errorlevel=0 ) set "MBWTL=%MBQT%" set "MBM64=%MBQT%" if %NOQT%==1 set MBQT=REM if %NOWTL%==1 set MBWTL=REM if %NOM64%==1 set MBM64=REM set "PTS=Platform=%TARCH%" if defined TOOLSET set "PTS="%PTS%;PlatformToolset=%TOOLSET%"" set PTS=%PTS:"=% goto mbbeg :mbcl %~1 "%~dp0%~2" /m /p:Configuration=%CONF%%~3;%PTS% %REB% %ERR% echo. goto:eof :mbbeg set MSG=Qt version, architecture and path are really correct?^& echo %QTDIR% call :mbcl "%MBQT%" "GLideNUI.vcxproj" "" %DMN% call :mbcl "%MBQT%" "%DPROJ%" "_qt" %DMN% set MSG=ERROR! call :mbcl "%MBWTL%" "GLideNUI-wtl.vcxproj" "" %DMN% call :mbcl "%MBWTL%" "%DPROJ%" "_wtl" %DMN% call :mbcl "%MBM64%" "%DPROJ%" "_mupenplus" %DMN% goto pjqt :cini set MSG=Failed to copy some project files to:^&echo %~1 if %ESIM%==1 md "%~1" 2>nul set errorlevel=0 copy /y ini\GLideN64.custom.ini "%~1\" %ERR% del /f /q "%~1\*.lib" "%~1\*.exp" 2>nul set errorlevel=0 goto:eof :pjqt if %NOQT%==1 goto pjwtl call :cini "%PJ64QT%" %DMN% copy /y translations\release\*.qm "%PJ64QT%\" %ERR% :pjwtl if %NOWTL%==1 goto mpcl call :cini "%PJ64WTL%" %DMN% md "%PJ64WTL%\translations" 2>nul set errorlevel=0 copy /y translations\wtl\*.Lang "%PJ64WTL%\translations\" %ERR% :mpcl if %NOM64%==1 goto pkg call :cini "%M64CL%" %DMN% :pkg for /f "tokens=1" %%R in ('git describe --always') do set "REV=%%R" set MSG=The route could not be accessed:^& echo %BUILDROUTE% pushd "%BUILDROUTE%" %ERR% for /f "tokens=*" %%Z in ('dir /ad /b *_%ARCH%') do 7z a -t7z "GLideN64-%REV%-%%Z.7z" ".\%%Z\*" if "%ARCH%"=="x64" ( if %BOTH%==1 set ARCH=x86& goto X86 ) set MSG=DONE!^& echo Path to the compressed files:^& echo %CD% %EBQ% :err set WTF=%errorlevel% set DMN=exit /b %WTF% echo. echo %MSG% exit /b %WTF% :clean pushd "%~dp0" for /f "tokens=*" %%E in ('dir /ad /b') do ( if /i "%%E" NEQ "lib" rd /s /q "%%E" ) cd ..\.. del /f /q "src\Revision.h" 2>nul rd /s /q "build" 2>nul rd /s /q "translations\wtl" 2>nul exit /b 0 :help echo. echo GLideN64's simplified build and packaging script echo. echo Usage: echo set ^ echo %~nx0 ^ ^ echo. echo ^ echo set BUILDROUTE=^ echo e.g. "Z:\My share folder" echo set QTDIR_x86=^ echo e.g. "D:\Static Qt\qt-5.7.1-x86-msvc2013" echo set QTDIR_x64=^ echo e.g. F:\Qt\qt-5_7_1-x64-msvc2015-static echo set TOOLSET=^ echo e.g. v141_xp echo. echo ^ echo --x86 To compile x86 echo --x64 To compile x64 echo --all To compile x86 and x64 echo n.b. If more than one of these is used, only the last one will echo take effect echo. echo ^ echo --clean Clean ALL auto-generated build files within the project echo --debug For debug builds echo --dlqt Auto download and configure Qt for VS2017-2019, it echo would have no effect if QTDIR_x* is used or if the echo same version has already been extracted echo --noqt To build without Qt support, it will ignore the echo effects of QTDIR_x* and "--dlqt" echo --nowtl To skip WTL builds echo --nom64 To skip mupen64plus builds echo --rebuild To rebuild without cleaning echo --sim Simulated build, quick environment check without compiling echo It's destructive to the final product by creating echo dummy files, make sure to use "--clean" afterwards echo --q Don't interact with Windows Explorer at the end echo. echo Usage examples: echo. echo %~nx0 --all --dlqt echo. echo %~nx0 --x86 --debug --rebuild echo. echo set BUILDROUTE=H:\%USERNAME%\experiment echo set TOOLSET=ClangCL echo %~nx0 --noqt --x64 echo. echo set QTDIR_x86="G:\Static Qt\qt-5.7.1-x86-msvc2015" echo set QTDIR_x64=G:\Static Qt\qt-5.7.1-x64-msvc2015 echo %~nx0 --nowtl --nom64 --all exit /b 0