aboutsummaryrefslogtreecommitdiff
path: root/bootstrap-clang.bat
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-10-03 15:58:59 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-10-07 14:15:19 +0300
commit3f31ec3805c28b479e25912930e930a8556e25dd (patch)
tree673926f0ff3f32ae794b1fe498675bed576e7c41 /bootstrap-clang.bat
parent4a4c60c51204e3738165028c7dfbc6162e047697 (diff)
Add bootstrap-clang.bat
Diffstat (limited to 'bootstrap-clang.bat')
-rw-r--r--bootstrap-clang.bat125
1 files changed, 125 insertions, 0 deletions
diff --git a/bootstrap-clang.bat b/bootstrap-clang.bat
new file mode 100644
index 0000000..ee22950
--- /dev/null
+++ b/bootstrap-clang.bat
@@ -0,0 +1,125 @@
+@echo off
+
+rem file : bootstrap-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 [/?] ^<cxx^> [^<cxx-option^>...]
+echo.
+echo The batch file expects to find the libbutl\ or libbutl-*\ directory
+echo either in the current directory ^(build2 root^) or one level up. The
+echo result is saved as build2\b-boot.exe.
+echo.
+echo Example usage:
+echo.
+echo %0 clang++
+echo.
+echo See the INSTALL file for details.
+echo.
+goto end
+
+:start
+
+if "_%1_" == "_/?_" goto usage
+
+rem Compiler executable.
+rem
+if "_%1_" == "__" (
+ echo error: compiler executable expected, run %0 /? for details
+ goto error
+) else (
+ set "cxx=%1"
+)
+
+rem See if there is libbutl or libbutl-* in the current directory and one
+rem directory up. Note that globbing returns paths in alphabetic order.
+rem
+if exist libbutl\ (
+ set "libbutl=libbutl"
+) else (
+ for /D %%d in (libbutl-*) do set "libbutl=%%d"
+)
+
+if "_%libbutl%_" == "__" (
+ if exist ..\libbutl\ (
+ set "libbutl=..\libbutl"
+ ) else (
+ for /D %%d in (..\libbutl-*) do set "libbutl=%%d"
+ )
+)
+
+if "_%libbutl%_" == "__" (
+ echo error: unable to find libbutl, run %0 /? for details
+ goto error
+)
+
+rem All the source directories.
+rem
+set "src=build2"
+
+set "src=%src% libbuild2"
+set "src=%src% libbuild2\config"
+set "src=%src% libbuild2\dist"
+set "src=%src% libbuild2\test"
+set "src=%src% libbuild2\test\script"
+set "src=%src% libbuild2\install"
+set "src=%src% libbuild2\bin"
+set "src=%src% libbuild2\c"
+set "src=%src% libbuild2\cc"
+set "src=%src% libbuild2\cxx"
+set "src=%src% libbuild2\version"
+set "src=%src% libbuild2\in"
+
+set "src=%src% %libbutl%\libbutl"
+
+rem Get the compile options.
+rem
+rem Note that we compile in the C++14 mode to be consistent with other
+rem bootstrap scripts/makefiles (see bootstrap-mingw.bat for details).
+rem
+rem Clang 8 has a bunch of apparently harmless linker warnings that can be
+rem worked around by passing an obscure internal option. Clang 9 doesn't
+rem have this problem. To keep things simple, let's just suppress this
+rem warning.
+rem
+set "ops=-m64 -std=c++1y -D_MT -D_CRT_SECURE_NO_WARNINGS -Xlinker /ignore:4217"
+:ops_next
+shift
+if "_%1_" == "__" (
+ goto ops_done
+) else (
+ set "ops=%ops% %1"
+ goto ops_next
+)
+:ops_done
+
+rem Compile.
+rem
+rem Note that echo does not override errorlevel.
+rem
+
+rem Filter out *.test.cxx sources.
+rem
+set "r="
+for %%d in (%src%) do (
+ for /F "tokens=*" %%i in ('dir /b "%%d\*.cxx" ^| findstr /v "\.test\.cxx"') do set "r=!r! %%d\%%i"
+)
+
+echo on
+%cxx% -I%libbutl% -I. -DBUILD2_BOOTSTRAP -DBUILD2_HOST_TRIPLET=\"x86_64-microsoft-win32-msvc\" %ops% -o build2\b-boot.exe %r% -lshell32 -limagehlp
+@echo off
+if errorlevel 1 goto error
+
+goto end
+
+:error
+endlocal
+exit /b 1
+
+:end
+endlocal