summaryrefslogtreecommitdiff
path: root/build_llvm_package.bat
blob: b7c8df8b024246eb38f7c08765a2440c4264a95f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
@echo on
setlocal

REM Script for building the LLVM installer on Windows,
REM used for the the weekly snapshots at http://www.llvm.org/builds.
REM
REM Usage: build_llvm_package.bat <revision> [test]

REM Prerequisites:
REM
REM   Visual Studio 2019, CMake, Ninja, GNUWin32, SWIG, Python 3,
REM   NSIS with the strlen_8192 patch,
REM   Visual Studio 2019 SDK and Nuget (for the clang-format plugin),
REM   Perl (for the OpenMP run-time), 7Zip.
REM
REM
REM   For LLDB, SWIG version <= 3.0.8 needs to be used to work around
REM   https://github.com/swig/swig/issues/769


REM You need to modify the paths below:
set vsdevcmd=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat

set python32_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python36-32
set python64_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python36

for /f "usebackq" %%i in (`PowerShell ^(Get-Date^).ToString^('yyyyMMdd'^)`) do set datestamp=%%i

set revision=%1

if "%2" == "test" (
    set git_ref=%revision%
    set package_version=%revision:~0,8%
) else (
    set git_ref=llvmorg-%revision%
    set package_version=%revision%
)
set clang_format_vs_version=13.0.0.%datestamp%
set build_dir=llvm_package_%package_version%

echo Revision: %revision%
echo Package version: %package_version%
echo Clang format plugin version: %clang_format_vs_version%
echo Build dir: %build_dir%
echo.
REM pause

mkdir %build_dir%
cd %build_dir%

echo Checking out %git_ref%
curl -L https://github.com/llvm/llvm-project/archive/%git_ref%.zip -o src.zip || exit /b
7z x src.zip || exit /b
mv llvm-project-* llvm-project || exit /b

REM Setting CMAKE_CL_SHOWINCLUDES_PREFIX to work around PR27226.
set cmake_flags=^
  -DCMAKE_BUILD_TYPE=Release ^
  -DLLVM_ENABLE_ASSERTIONS=ON ^
  -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON ^
  -DLLVM_BUILD_LLVM_C_DYLIB=ON ^
  -DCMAKE_INSTALL_UCRT_LIBRARIES=ON ^
  -DPACKAGE_VERSION=%package_version% ^
  -DCMAKE_CL_SHOWINCLUDES_PREFIX="Note: including file: " ^
  -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-windows-msvc ^
  -DLLVM_HOST_TRIPLE=aarch64-windows-msvc ^
  -DLLVM_TARGET_ARCH=AArch64 ^
  -DCLANG_DEFAULT_LINKER=lld

REM TODO: Run the "check-all" tests.

set "VSCMD_START_DIR=%CD%"
call "%vsdevcmd%" -host_arch=x86 -arch=arm64
@echo on
set CC=clang-cl
set CXX=clang-cl
mkdir build32_stage0
cd build32_stage0
cmake -GNinja %cmake_flags% ^
  -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" ^
  -DLLVM_TARGETS_TO_BUILD="AArch64" ^
  -DCMAKE_C_FLAGS="-fms-compatibility-version=19.14" ^
  -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.14" ^
  ..\llvm-project\llvm || exit /b
ninja all || ninja all || ninja all || exit /b
REM ninja check || ninja check || ninja check || exit /b
REM ninja check-clang || ninja check-clang || ninja check-clang || exit /b
REM ninja check-lld || ninja check-lld || ninja check-lld || exit /b
REM ninja check-sanitizer || ninja check-sanitizer || ninja check-sanitizer || exit /b
REM ninja check-clang-tools || ninja check-clang-tools || ninja check-clang-tools || exit /b
REM ninja check-clangd || ninja check-clangd || ninja check-clangd || exit /b
cd..

mkdir build32
cd build32
set CC=..\build32_stage0\bin\clang-cl
set CXX=..\build32_stage0\bin\clang-cl
cmake -GNinja %cmake_flags% ^
  -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;compiler-rt" ^
  -DCOMPILER_RT_BUILD_SANITIZERS=OFF ^
  -DCOMPILER_RT_BUILD_MEMPROF=OFF ^
  -DCOMPILER_RT_BUILD_XRAY=OFF ^
  ..\llvm-project\llvm || exit /b
ninja all || ninja all || ninja all || exit /b
REM ninja check || ninja check || ninja check || exit /b
REM ninja check-clang || ninja check-clang || ninja check-clang || exit /b
REM ninja check-lld || ninja check-lld || ninja check-lld || exit /b
REM ninja check-sanitizer || ninja check-sanitizer || ninja check-sanitizer || exit /b
REM ninja check-clang-tools || ninja check-clang-tools || ninja check-clang-tools || exit /b
REM ninja check-clangd || ninja check-clangd || ninja check-clangd || exit /b
ninja package || exit /b

rename LLVM-%package_version%-win64.exe LLVM-%package_version%-woa64.exe || exit /b
7z x LLVM-%package_version%-woa64.exe -orepack || exit /b
rmdir /s /q repack\$PLUGINSDIR || exit /b
del repack\Uninstall.exe || exit /b
7z a LLVM-%package_version%-woa64.zip .\repack\* -mx9 || exit /b
cd ..

exit /b

REM The plug-in is built separately as it uses a statically linked clang-format.exe.
mkdir build_vsix
cd build_vsix
REM Having VSSDKINSTALL set makes devenv *not* find the SDK for some reason.
set VSSDKINSTALL=
set CC=..\build32_stage0\bin\clang-cl
set CXX=..\build32_stage0\bin\clang-cl
cmake -GNinja %cmake_flags% -DLLVM_USE_CRT_RELEASE=MT -DBUILD_CLANG_FORMAT_VS_PLUGIN=ON -DPYTHON_HOME=%python32_dir% -DPYTHON_EXECUTABLE=%python32_dir%\python.exe ..\llvm-project\llvm || exit /b
ninja clang_format_vsix || exit /b
copy ..\llvm-project\llvm\tools\clang\tools\clang-format-vs\ClangFormat\bin\Release\ClangFormat.vsix ClangFormat-r%revision%.vsix
cd ..


set "VSCMD_START_DIR=%CD%"
call "%vsdevcmd%" -arch=amd64
set CC=
set CXX=
mkdir build64_stage0
cd build64_stage0
cmake -GNinja %cmake_flags% -DPYTHON_HOME=%python64_dir% -DPYTHON_EXECUTABLE=%python64_dir%\python.exe ..\llvm-project\llvm || exit /b
ninja all || ninja all || ninja all || exit /b
ninja check || ninja check || ninja check || exit /b
ninja check-clang || ninja check-clang || ninja check-clang || exit /b
ninja check-lld || ninja check-lld || ninja check-lld || exit /b
ninja check-sanitizer || ninja check-sanitizer || ninja check-sanitizer || exit /b
ninja check-clang-tools || ninja check-clang-tools || ninja check-clang-tools || exit /b
ninja check-clangd || ninja check-clangd || ninja check-clangd || exit /b
cd..

mkdir build64
cd build64
set CC=..\build64_stage0\bin\clang-cl
set CXX=..\build64_stage0\bin\clang-cl
cmake -GNinja %cmake_flags% -DPYTHON_HOME=%python64_dir% -DPYTHON_EXECUTABLE=%python64_dir%\python.exe ..\llvm-project\llvm || exit /b
ninja all || ninja all || ninja all || exit /b
ninja check || ninja check || ninja check || exit /b
ninja check-clang || ninja check-clang || ninja check-clang || exit /b
ninja check-lld || ninja check-lld || ninja check-lld || exit /b
ninja check-sanitizer || ninja check-sanitizer || ninja check-sanitizer || exit /b
ninja check-clang-tools || ninja check-clang-tools || ninja check-clang-tools || exit /b
ninja check-clangd || ninja check-clangd || ninja check-clangd || exit /b
ninja package || exit /b

7z x LLVM-%package_version%-win64.exe -orepack
rmdir /s /q repack\$PLUGINSDIR
del repack\Uninstall.exe
7z a LLVM-%package_version%-win64.zip .\repack\* -mx9
cd ..