aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-10-05 22:34:09 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-10-06 23:55:00 +0300
commit219ac2636604ea94aaf185ebb0879e3936639a73 (patch)
treea3c0e762daa29bef4f6207619fa1c172e52e79a7
parente49d906b0ee7930c9d8f4ab9b6711af9c4f80f55 (diff)
Add build-clang.bat
-rw-r--r--build-clang.bat334
-rw-r--r--build-msvc.bat1
2 files changed, 334 insertions, 1 deletions
diff --git a/build-clang.bat b/build-clang.bat
new file mode 100644
index 0000000..460bddf
--- /dev/null
+++ b/build-clang.bat
@@ -0,0 +1,334 @@
+@echo off
+
+rem file : build-clang.bat
+rem copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
+rem license : MIT; see accompanying LICENSE file
+
+setlocal EnableDelayedExpansion
+goto start
+
+:usage
+echo.
+echo Usage: %0 [/?] [^<options^>] [^<clang++-compiler^>]
+echo Options:
+echo --install-dir ^<dir^> Alternative installation directory.
+echo --repo ^<loc^> Alternative package repository location.
+echo --trust ^<fp^> Repository certificate fingerprint to trust.
+echo --timeout ^<sec^> Network operations timeout in seconds.
+echo --make ^<arg^> Bootstrap using GNU make instead of batch file.
+echo --verbose ^<level^> Diagnostics verbosity level between 0 and 6.
+echo.
+echo By default the batch file will use clang++.exe as the C++ compiler and
+echo install into C:\build2. It also expects to find the base utilities in the
+echo bin\ subdirectory of the installation directory ^(C:\build2\bin\ by
+echo default^).
+echo.
+echo The --trust option recognizes two special values: 'yes' ^(trust everything^)
+echo and 'no' (trust nothing).
+echo.
+echo The --make option can be used to bootstrap using GNU make. The first
+echo --make value should specify the make executable optionally followed by
+echo additional make options, for example:
+echo.
+echo %0 --make mingw32-make --make -j8
+echo.
+echo See the BOOTSTRAP-CLANG file for details.
+echo.
+goto end
+
+:start
+
+set "owd=%CD%"
+
+rem Package repository URL (or path).
+rem
+if "_%BUILD2_REPO%_" == "__" (
+ set "BUILD2_REPO=https://stage.build2.org/1"
+rem set "BUILD2_REPO=https://pkg.cppget.org/1/queue/alpha"
+rem set "BUILD2_REPO=https://pkg.cppget.org/1/alpha"
+)
+
+rem The bpkg configuration directory.
+rem
+set "cver=0.12-a.0"
+set "cdir=build2-toolchain-%cver%"
+
+rem Parse options.
+rem
+set "idir=C:\build2"
+set "trust="
+set "timeout="
+set "make="
+set "verbose="
+
+:options
+if "_%~1_" == "_/?_" goto usage
+if "_%~1_" == "_-h_" goto usage
+if "_%~1_" == "_--help_" goto usage
+
+if "_%~1_" == "_--install-dir_" (
+ if "_%~2_" == "__" (
+ echo error: installation directory expected after --install-dir
+ goto error
+ )
+ set "idir=%~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--trust_" (
+ if "_%~2_" == "__" (
+ echo error: certificate fingerprint expected after --trust
+ goto error
+ )
+ set "trust=%~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--repo_" (
+ if "_%~2_" == "__" (
+ echo error: repository location expected after --repo
+ goto error
+ )
+ set "BUILD2_REPO=%~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--timeout_" (
+ if "_%~2_" == "__" (
+ echo error: value in seconds expected after --timeout
+ goto error
+ )
+ set "timeout=%~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--make_" (
+ if "_%~2_" == "__" (
+ echo error: argument expected after --make
+ goto error
+ )
+ set "make=%make% %~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--verbose_" (
+ if "_%~2_" == "__" (
+ echo error: diagnostics level between 0 and 6 expected after --verbose
+ goto error
+ )
+ set "verbose=%~2"
+ shift
+ shift
+ goto options
+)
+
+if "_%~1_" == "_--_" shift
+
+rem Validate options and arguments.
+rem
+
+rem Compiler.
+rem
+if "_%1_" == "__" (
+ set "cxx=clang++"
+) else (
+ set "cxx=%1"
+)
+
+rem Certificate to trust.
+rem
+if not "_%trust%_" == "__" (
+ if "_%trust%_" == "_yes_" (
+ set "trust=--trust-yes"
+ ) else (
+ if "_%trust%_" == "_no_" (
+ set "trust=--trust-no"
+ ) else (
+ set "trust=--trust %trust%"
+ )
+ )
+)
+
+rem Network timeout.
+rem
+if not "_%timeout%_" == "__" (
+ set "timeout=--fetch-timeout %timeout%"
+)
+
+rem Diagnostics verbosity.
+rem
+if not "_%verbose%_" == "__" (
+ set "verbose=--verbose %verbose%"
+)
+
+if not exist %idir%\bin\ (
+ echo error: %idir%\bin\ does not exist
+ goto error
+)
+
+if exist build\config.build (
+ echo error: current directory already configured, start with clean source
+ goto error
+)
+
+if exist ..\%cdir%\ (
+ echo error: ..\%cdir%\ bpkg configuration directory already exists, remove it
+ goto error
+)
+
+set "PATH=%idir%\bin;%PATH%"
+
+rem Show the steps we are performing.
+rem
+@echo on
+
+@rem Verify the compiler works.
+@rem
+%cxx% --version
+@if errorlevel 1 goto error
+
+@rem Bootstrap.
+@rem
+cd build2
+
+@if "_%make%_" == "__" (
+ goto batchfile
+) else (
+ goto makefile
+)
+
+:batchfile
+@rem Execute in a separate cmd.exe to preserve the echo mode.
+@rem
+cmd /C bootstrap-clang.bat %cxx%
+@if errorlevel 1 goto error
+@goto endfile
+
+:makefile
+%make% -f bootstrap.gmake CXX=%cxx%
+@if errorlevel 1 goto error
+@goto endfile
+
+:endfile
+build2\b-boot --version
+@if errorlevel 1 goto error
+
+build2\b-boot %verbose% config.cxx=%cxx% config.cc.coptions=-m64 config.bin.lib=static build2\exe{b}
+@if errorlevel 1 goto error
+
+move /y build2\b.exe build2\b-boot.exe
+@if errorlevel 1 goto error
+
+build2\b-boot --version
+@if errorlevel 1 goto error
+
+@rem Build and stage the build system and the package manager.
+@rem
+cd ..
+
+build2\build2\b-boot %verbose% configure^
+ config.cxx=%cxx%^
+ config.cc.coptions=-m64^
+ config.bin.suffix=-stage^
+ config.install.root=%idir%^
+ config.install.data_root=root\stage
+@if errorlevel 1 goto error
+
+build2\build2\b-boot %verbose% install: build2\ bpkg\
+@if errorlevel 1 goto error
+
+where b-stage
+@if errorlevel 1 goto error
+
+where bpkg-stage
+@if errorlevel 1 goto error
+
+b-stage --version
+@if errorlevel 1 goto error
+
+bpkg-stage --version
+@if errorlevel 1 goto error
+
+@rem Build the entire toolchain from packages.
+@rem
+cd ..
+
+md %cdir%
+@if errorlevel 1 goto error
+
+cd %cdir%
+
+@rem Save full path for later.
+@rem
+@set "cdir=%CD%"
+
+bpkg-stage %verbose% create^
+ cc^
+ config.cxx=%cxx%^
+ "config.cc.coptions=-m64 -O3"^
+ config.install.root=%idir%
+@if errorlevel 1 goto error
+
+bpkg-stage %verbose% add %BUILD2_REPO%
+@if errorlevel 1 goto error
+
+bpkg-stage %verbose% %timeout% %trust% fetch
+@if errorlevel 1 goto error
+
+bpkg-stage %verbose% %timeout% build --for install --yes --plan= build2 bpkg bdep
+@if errorlevel 1 goto error
+
+bpkg-stage %verbose% install build2 bpkg bdep
+@if errorlevel 1 goto error
+
+where b
+@if errorlevel 1 goto error
+
+where bpkg
+@if errorlevel 1 goto error
+
+where bdep
+@if errorlevel 1 goto error
+
+b --version
+@if errorlevel 1 goto error
+
+bpkg --version
+@if errorlevel 1 goto error
+
+bdep --version
+@if errorlevel 1 goto error
+
+@rem Clean up stage.
+@rem
+cd %owd%
+b %verbose% uninstall: build2/ bpkg/
+@if errorlevel 1 goto error
+
+@echo off
+
+echo.
+echo Toolchain installation: %idir%\bin
+echo Upgrade configuration: %cdir%
+echo.
+
+goto end
+
+:error
+@echo off
+cd %owd%
+endlocal
+exit /b 1
+
+:end
+endlocal
diff --git a/build-msvc.bat b/build-msvc.bat
index 4af962e..7d1e31a 100644
--- a/build-msvc.bat
+++ b/build-msvc.bat
@@ -174,7 +174,6 @@ if exist ..\%cdir%\ (
goto error
)
-set "sdir=%idir%\stage"
set "PATH=%idir%\bin;%PATH%"
rem Show the steps we are performing.