Add ARM64 Windows on Arm buildbots

This patch adds 2 new machines:
* linaro-armv8-windows-msvc-01
* linaro-armv8-windows-msvc-02
and 2 new builders:
* clang-arm64-windows-msvc
* clang-arm64-windows-msvc-2stage
to test LLVM on Windows on Arm platform.

The machines are Microsoft Surface X Pro laptops configured for 24x7 workload.

The host build environment is bootstrapped based on LLVM 11 custom build and
uses headers and libraries from MS Visual Studio 2019.  To accommodate the custom
setup we add "manual" value for "vs" parameter to ClangBuilder factory, which allows
to use manually pre-configured MSVC environment instead of initializing it during
build by running old-school vcvarsall.bat.

Finally, the bots have known failures in MCJIT unit-tests, which we are working on.
Once the failures are fixed, we'll enable unit-testsuite in both builders.

Reviewed By: gkistanova, omjavaid

Differential Revision: https://reviews.llvm.org/D87186
diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py
index 447b922..6f25b76 100644
--- a/buildbot/osuosl/master/config/builders.py
+++ b/buildbot/osuosl/master/config/builders.py
@@ -200,6 +200,18 @@
                         WithProperties("%(remote_test_user:+-DREMOTE_TEST_USER=)s%(remote_test_user:-)s"),
                       ],
                       cmake_cache="../llvm-project/clang/cmake/caches/CrossWinToARMLinux.cmake")},
+
+        {'name': "clang-arm64-windows-msvc",
+         'slavenames':["linaro-armv8-windows-msvc-01", "linaro-armv8-windows-msvc-02"],
+         'builddir':"clang-arm64-windows-msvc",
+         'factory' : ClangBuilder.getClangCMakeBuildFactory(
+                      vs="manual",
+                      test=False, # Disable testing until MCJIT failures are fixed
+                      extra_cmake_args=["-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-windows-msvc",
+                                        "-DLLVM_HOST_TRIPLE=aarch64-windows-msvc",
+                                        "-DLLVM_TARGET_ARCH=AArch64",
+                                        "-DCOMPILER_RT_BUILD_SANITIZERS=OFF",
+                                        "-DCOMPILER_RT_BUILD_XRAY=OFF"])},
     ]
 
 # Clang builders.
@@ -424,6 +436,20 @@
                                         "-DLLVM_TARGETS_TO_BUILD='ARM;AArch64'"],
                )},
 
+        {'name': "clang-arm64-windows-msvc-2stage",
+         'slavenames':["linaro-armv8-windows-msvc-01", "linaro-armv8-windows-msvc-02"],
+         'builddir':"clang-arm64-windows-msvc-2stage",
+         'factory' : ClangBuilder.getClangCMakeBuildFactory(
+                      vs="manual",
+                      test=False, # Disable testing until MCJIT failures are fixed
+                      useTwoStage=True,
+                      testStage1=False,
+                      extra_cmake_args=["-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-windows-msvc",
+                                        "-DLLVM_HOST_TRIPLE=aarch64-windows-msvc",
+                                        "-DLLVM_TARGET_ARCH=AArch64",
+                                        "-DCOMPILER_RT_BUILD_SANITIZERS=OFF",
+                                        "-DCOMPILER_RT_BUILD_XRAY=OFF"])},
+
         {'name': 'clang-x64-windows-msvc',
          'slavenames': ['windows-gcebot2'],
          'builddir': 'clang-x64-windows-msvc',
diff --git a/buildbot/osuosl/master/config/slaves.py b/buildbot/osuosl/master/config/slaves.py
index 277957e..60c8ca7 100644
--- a/buildbot/osuosl/master/config/slaves.py
+++ b/buildbot/osuosl/master/config/slaves.py
@@ -49,6 +49,10 @@
         create_slave("linaro-aarch64-libcxx", properties={'jobs' : 1}, max_builds=1),
         create_slave("linaro-aarch64-lldb", properties={'jobs': 16}, max_builds=1),
 
+        # AArch64
+        create_slave("linaro-armv8-windows-msvc-01", properties={'jobs' : 8}, max_builds=1),
+        create_slave("linaro-armv8-windows-msvc-02", properties={'jobs' : 8}, max_builds=1),
+
         # ARMv7 build cache slave
         create_slave("packet-linux-armv7-slave-1", properties={'jobs' : 64}, max_builds=1),
 
diff --git a/zorg/buildbot/builders/ClangBuilder.py b/zorg/buildbot/builders/ClangBuilder.py
index b1ea05f..8dae148 100644
--- a/zorg/buildbot/builders/ClangBuilder.py
+++ b/zorg/buildbot/builders/ClangBuilder.py
@@ -299,7 +299,7 @@
     stage2_install = 'stage2.install'
 
     # Set up VS environment, if appropriate.
-    if vs:
+    if vs and vs != "manual":
         f.addStep(SetProperty(
             command=builders_util.getVisualStudioEnvironment(vs, vs_target_arch),
             extract_fn=builders_util.extractSlaveEnvironment))