From 7fc899dfd63e4a4f201f8dc72780ce71b36b0170 Mon Sep 17 00:00:00 2001 From: Emily Hudson Date: Thu, 29 Aug 2019 22:13:53 +0100 Subject: [PATCH] bootstrap: single make.bat, default msvc option for forcing gcc --- .travis.yml | 4 +-- compiler/msvc.v | 2 +- make.bat | 91 +++++++++++++++++++++++++++++++++++++++++++------ make_msvc.bat | 60 -------------------------------- 4 files changed, 84 insertions(+), 73 deletions(-) delete mode 100644 make_msvc.bat diff --git a/.travis.yml b/.travis.yml index f299d1a246..de84d496f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,8 +46,8 @@ script: ./v.exe test v ##echo "Running only the repl tests directly" ##./v.exe ./compiler/tests/repl/repl_test.v - echo "Testing msvc bootstrapping" - ./make_msvc.bat + echo "Testing gcc bootstrapping" + ./make.bat -gcc fi - | if [[ "${TRAVIS_OS_NAME}" != "windows" ]]; then diff --git a/compiler/msvc.v b/compiler/msvc.v index 960a70ab06..948b7953b9 100644 --- a/compiler/msvc.v +++ b/compiler/msvc.v @@ -228,7 +228,7 @@ pub fn (v mut V) cc_msvc() { // -w: no warnings // 2 unicode defines // /Fo sets the object file name - needed so we can clean up after ourselves properly - mut a := ['-w', '/volatile:ms', '/D_UNICODE', '/DUNICODE', '/Fo$out_name_obj'] + mut a := ['-w', '/we4013', '/volatile:ms', '/D_UNICODE', '/DUNICODE', '/Fo$out_name_obj'] if v.pref.is_prod { a << '/O2' diff --git a/make.bat b/make.bat index 63ac57adb3..de2b3b670d 100644 --- a/make.bat +++ b/make.bat @@ -1,35 +1,106 @@ -set exiterror=0 @echo off -echo Building V for Windows... +echo Building V if exist "vc" ( - rd /s /q vc + rd /s /q vc ) git version git clone --depth 1 --quiet https://github.com/vlang/vc -echo Building v.c... -gcc -std=gnu11 -DUNICODE -D_UNICODE -w -o v2.exe vc/v_win.c 2>&1 +REM option to force msvc or gcc +if "%~1"=="-gcc" goto :gccstrap +if "%~1"=="-msvc" goto :gccstrap + +goto :msvcstrap + +:gccstrap + +echo attempting to bootstrap with GCC + +for /f "usebackq tokens=*" %%i in (`where gcc`) do ( + set gccpath=%%i +) + +if not exist "%gccpath%" ( + goto:msvcstrap +) + +gcc -std=gnu11 -DUNICODE -D_UNICODE -w -o v2.exe vc\v_win.c if %ERRORLEVEL% GEQ 1 ( - echo gcc failed to compile - Create an issue at 'https://github.com/vlang' - exit /b 1 + echo gcc failed to compile - Create an issue at 'https://github.com/vlang' + exit /b 1 ) echo Building v.v... v2.exe -o v.exe compiler if %ERRORLEVEL% GEQ 1 ( echo v.exe failed to compile itself - Create an issue at 'https://github.com/vlang' - exit /b 1 + exit /b 1 ) -echo Cleaning up... -rem del v2.exe +del v2.exe rd /s /q vc +goto :success + + +:msvcstrap +echo Attempting to bootstrap with MSVC + +for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do ( + set InstallDir=%%i +) + +if exist "%InstallDir%\Common7\Tools\vsdevcmd.bat" ( + call "%InstallDir%\Common7\Tools\vsdevcmd.bat" -arch=x64 -host_arch=x64 +) else ( + goto :nocompiler +) + +cl.exe /w /volatile:ms /D_UNICODE /DUNICODE /Fo.v.c.obj /O2 /MD vc\v_win.c user32.lib kernel32.lib advapi32.lib shell32.lib /link /NOLOGO /OUT:v2.exe /INCREMENTAL:NO + +if %ERRORLEVEL% GEQ 1 ( + echo cl.exe failed to build V + goto :compileerror +) + +echo rebuild from source +v2.exe -o v.exe compiler +if %ERRORLEVEL% GEQ 1 ( + echo V failed to build itself + goto :compileerror +) + +del v2.exe +rd /s /q vc + +goto :success + +:nocompiler +echo You do not appear to have a GCC installation on your PATH and also do not have an MSVC installation +echo - this means that you cannot bootstrap a V installation at this time... +echo. +echo Head to 'https://github.com/vlang/v/releases/download/v0.1.10/mingw-w64-install.exe' to download and install GCC +echo or head to 'https://visualstudio.microsoft.com/downloads/' to download and install MSVC +echo (look for the Build Tools if you don't want to install the Visual Studio IDE) +echo. +goto :error + +:compileerror +echo Failed to compile - Create an issue at 'https://github.com/vlang' and tag '@emily33901'! +goto :error + +:error +echo Exiting from error +exit /b 1 + +:success +dir if exist "v.exe" ( echo V has been successfully built + exit ) else ( echo v.exe was not generated - Create an issue at 'https://github.com/vlang' exit /b 1 diff --git a/make_msvc.bat b/make_msvc.bat deleted file mode 100644 index 1482d3740f..0000000000 --- a/make_msvc.bat +++ /dev/null @@ -1,60 +0,0 @@ -@echo off - -set exiterror=0 - -echo finding an MSVC installation - -for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do ( - set InstallDir=%%i -) - -REM set up a devcmd - -if exist "%InstallDir%\Common7\Tools\vsdevcmd.bat" ( - call "%InstallDir%\Common7\Tools\vsdevcmd.bat" -arch=x64 -host_arch=x64 -) else ( - goto :nomsvc -) - -echo fetch v_win.c -curl -O https://raw.githubusercontent.com/vlang/vc/master/v_win.c - -echo build v_win.c with msvc -cl.exe /w /volatile:ms /D_UNICODE /DUNICODE /D_BOOTSTRAP_NO_UNICODE_STREAM /Fo.v_win.c.obj /O2 /MD v_win.c user32.lib kernel32.lib advapi32.lib shell32.lib /link /DEBUG:NONE /NOLOGO /OUT:v2.exe /INCREMENTAL:NO - -if %ERRORLEVEL% GEQ 1 ( - goto :compileerror -) - -echo rebuild from source -v2.exe -os msvc -o v.exe compiler -if %ERRORLEVEL% GEQ 1 ( - goto :compileerror -) - -dir v_win.c v2.exe v.exe - -del .v_win.c.obj -del v_win.c -del v2.exe - -echo Success -goto :done - - -:nomsvc -echo Cannot find an msvc installation -goto :error - -:compileerror -echo Failed to compile - Create an issue at 'https://github.com/vlang' and tag '@emily33901'! -goto :error - - -:error -echo fail -exit /b 1 - - -:done -echo pass