Add build for Windows on Arm in packaging script
authorPierrick Bouvier <pierrick.bouvier@linaro.org>
Mon, 13 Feb 2023 09:36:04 +0000 (14:36 +0500)
committerMuhammad Omair Javaid <omair.javaid@linaro.org>
Mon, 13 Feb 2023 09:36:37 +0000 (14:36 +0500)
Reviewed By: hans

Differential Revision: https://reviews.llvm.org/D142983

llvm/utils/release/build_llvm_release.bat

index 9ffcf9c..e83e4c9 100755 (executable)
@@ -7,13 +7,14 @@ goto begin
 echo Script for building the LLVM installer on Windows,\r
 echo used for the releases at https://github.com/llvm/llvm-project/releases\r
 echo.\r
-echo Usage: build_llvm_release.bat --version ^<version^> [--x86,--x64]\r
+echo Usage: build_llvm_release.bat --version ^<version^> [--x86,--x64, --arm64]\r
 echo.\r
 echo Options:\r
 echo --version: [required] version to build\r
 echo --help: display this help\r
 echo --x86: build and test x86 variant\r
 echo --x64: build and test x64 variant\r
+echo --arm64: build and test arm64 variant\r
 echo.\r
 echo Note: At least one variant to build is required.\r
 echo.\r
@@ -28,6 +29,7 @@ set version=
 set help=\r
 set x86=\r
 set x64=\r
+set arm64=\r
 call :parse_args %*\r
 \r
 if "%help%" NEQ "" goto usage\r
@@ -38,9 +40,9 @@ if "%version%" == "" (
     goto usage\r
 )\r
 \r
-if "%x64%" == "" if "%x86%" == "" (\r
+if "%arm64%" == "" if "%x64%" == "" if "%x86%" == "" (\r
     echo nothing to build!\r
-    echo choose one or several variants from: --x86 --x64\r
+    echo choose one or several variants from: --x86 --x64 --arm64\r
     exit /b 1\r
 )\r
 \r
@@ -107,6 +109,7 @@ echo Using VS devcmd: %vsdevcmd%
 \r
 set python32_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python310-32\r
 set python64_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python310\r
+set pythonarm64_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python311-arm64\r
 \r
 set revision=llvmorg-%version%\r
 set package_version=%version%\r
@@ -133,7 +136,7 @@ curl -O https://gitlab.gnome.org/GNOME/libxml2/-/archive/v2.9.12/libxml2-v2.9.12
 tar zxf libxml2-v2.9.12.tar.gz\r
 \r
 REM Setting CMAKE_CL_SHOWINCLUDES_PREFIX to work around PR27226.\r
-REM Common flags for both 32/64 builds.\r
+REM Common flags for all builds.\r
 set common_cmake_flags=^\r
   -DCMAKE_BUILD_TYPE=Release ^\r
   -DLLVM_ENABLE_ASSERTIONS=OFF ^\r
@@ -157,35 +160,19 @@ set OLDPATH=%PATH%
 REM Build the 32-bits and/or 64-bits binaries.\r
 if "%x86%" == "true" call :do_build_32 || exit /b 1\r
 if "%x64%" == "true" call :do_build_64 || exit /b 1\r
+if "%arm64%" == "true" call :do_build_arm64 || exit /b 1\r
 exit /b 0\r
 \r
 ::==============================================================================\r
 :: Build 32-bits binaries.\r
 ::==============================================================================\r
 :do_build_32\r
-REM Restore original path\r
-set PATH=%OLDPATH%\r
-\r
-REM TODO: Run the "check-all" tests.\r
-\r
-REM Set Python environment\r
-set PYTHONHOME=%python32_dir%\r
-set PATH=%PYTHONHOME%;%PATH%\r
-%python32_dir%/python.exe --version || exit /b 1\r
-\r
-set "VSCMD_START_DIR=%build_dir%"\r
+call :set_environment %python32_dir% || exit /b 1\r
 call "%vsdevcmd%" -arch=x86 || exit /b 1\r
 @echo on\r
 mkdir build32_stage0\r
 cd build32_stage0\r
-\r
-mkdir libxmlbuild\r
-cd libxmlbuild\r
-cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_C14N=OFF -DLIBXML2_WITH_CATALOG=OFF -DLIBXML2_WITH_DEBUG=OFF -DLIBXML2_WITH_DOCB=OFF -DLIBXML2_WITH_FTP=OFF -DLIBXML2_WITH_HTML=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_ICU=OFF -DLIBXML2_WITH_ISO8859X=OFF -DLIBXML2_WITH_LEGACY=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_MEM_DEBUG=OFF -DLIBXML2_WITH_MODULES=OFF -DLIBXML2_WITH_OUTPUT=ON -DLIBXML2_WITH_PATTERN=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_PUSH=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_READER=OFF -DLIBXML2_WITH_REGEXPS=OFF -DLIBXML2_WITH_RUN_DEBUG=OFF -DLIBXML2_WITH_SAX1=OFF -DLIBXML2_WITH_SCHEMAS=OFF -DLIBXML2_WITH_SCHEMATRON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_THREADS=ON -DLIBXML2_WITH_THREAD_ALLOC=OFF -DLIBXML2_WITH_TREE=ON -DLIBXML2_WITH_VALID=OFF -DLIBXML2_WITH_WRITER=OFF -DLIBXML2_WITH_XINCLUDE=OFF -DLIBXML2_WITH_XPATH=OFF -DLIBXML2_WITH_XPTR=OFF -DLIBXML2_WITH_ZLIB=OFF ../../libxml2-v2.9.12 || exit /b 1\r
-ninja install || exit /b 1\r
-set libxmldir=%cd%\install\r
-set "libxmldir=%libxmldir:\=/%"\r
-cd ..\r
+call :do_build_libxml || exit /b 1\r
 \r
 REM Stage0 binaries directory; used in stage1.\r
 set "stage0_bin_dir=%build_dir%/build32_stage0/bin"\r
@@ -236,27 +223,12 @@ exit /b 0
 :: Build 64-bits binaries.\r
 ::==============================================================================\r
 :do_build_64\r
-REM Restore original path\r
-set PATH=%OLDPATH%\r
-\r
-REM Set Python environment\r
-set PYTHONHOME=%python64_dir%\r
-set PATH=%PYTHONHOME%;%PATH%\r
-%python64_dir%/python.exe --version || exit /b 1\r
-\r
-set "VSCMD_START_DIR=%build_dir%"\r
+call :set_environment %python64_dir% || exit /b 1\r
 call "%vsdevcmd%" -arch=amd64 || exit /b 1\r
 @echo on\r
 mkdir build64_stage0\r
 cd build64_stage0\r
-\r
-mkdir libxmlbuild\r
-cd libxmlbuild\r
-cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_C14N=OFF -DLIBXML2_WITH_CATALOG=OFF -DLIBXML2_WITH_DEBUG=OFF -DLIBXML2_WITH_DOCB=OFF -DLIBXML2_WITH_FTP=OFF -DLIBXML2_WITH_HTML=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_ICU=OFF -DLIBXML2_WITH_ISO8859X=OFF -DLIBXML2_WITH_LEGACY=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_MEM_DEBUG=OFF -DLIBXML2_WITH_MODULES=OFF -DLIBXML2_WITH_OUTPUT=ON -DLIBXML2_WITH_PATTERN=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_PUSH=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_READER=OFF -DLIBXML2_WITH_REGEXPS=OFF -DLIBXML2_WITH_RUN_DEBUG=OFF -DLIBXML2_WITH_SAX1=OFF -DLIBXML2_WITH_SCHEMAS=OFF -DLIBXML2_WITH_SCHEMATRON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_THREADS=ON -DLIBXML2_WITH_THREAD_ALLOC=OFF -DLIBXML2_WITH_TREE=ON -DLIBXML2_WITH_VALID=OFF -DLIBXML2_WITH_WRITER=OFF -DLIBXML2_WITH_XINCLUDE=OFF -DLIBXML2_WITH_XPATH=OFF -DLIBXML2_WITH_XPTR=OFF -DLIBXML2_WITH_ZLIB=OFF ../../libxml2-v2.9.12 || exit /b 1\r
-ninja install || exit /b 1\r
-set libxmldir=%cd%\install\r
-set "libxmldir=%libxmldir:\=/%"\r
-cd ..\r
+call :do_build_libxml || exit /b 1\r
 \r
 REM Stage0 binaries directory; used in stage1.\r
 set "stage0_bin_dir=%build_dir%/build64_stage0/bin"\r
@@ -305,6 +277,119 @@ cd ..
 exit /b 0\r
 ::==============================================================================\r
 \r
+::==============================================================================\r
+:: Build arm64 binaries.\r
+::==============================================================================\r
+:do_build_arm64\r
+call :set_environment %pythonarm64_dir% || exit /b 1\r
+call "%vsdevcmd%" -host_arch=x64 -arch=arm64 || exit /b 1\r
+@echo on\r
+mkdir build_arm64_stage0\r
+cd build_arm64_stage0\r
+call :do_build_libxml || exit /b 1\r
+\r
+REM Stage0 binaries directory; used in stage1.\r
+set "stage0_bin_dir=%build_dir%/build_arm64_stage0/bin"\r
+set cmake_flags=^\r
+  %common_cmake_flags% ^\r
+  -DCLANG_DEFAULT_LINKER=lld ^\r
+  -DLIBXML2_INCLUDE_DIRS=%libxmldir%/include/libxml2 ^\r
+  -DLIBXML2_LIBRARIES=%libxmldir%/lib/libxml2s.lib ^\r
+  -DPython3_ROOT_DIR=%PYTHONHOME% ^\r
+  -DCOMPILER_RT_BUILD_PROFILE=OFF ^\r
+  -DCOMPILER_RT_BUILD_SANITIZERS=OFF\r
+\r
+REM We need to build stage0 compiler-rt with clang-cl (msvc lacks some builtins).\r
+cmake -GNinja %cmake_flags% ^\r
+  -DCMAKE_C_COMPILER=clang-cl.exe ^\r
+  -DCMAKE_CXX_COMPILER=clang-cl.exe ^\r
+  ..\llvm-project\llvm || exit /b 1\r
+ninja || exit /b 1\r
+::ninja check-llvm || exit /b 1\r
+::ninja check-clang || exit /b 1\r
+::ninja check-lld || exit /b 1\r
+::ninja check-sanitizer || exit /b 1\r
+::ninja check-clang-tools || exit /b 1\r
+::ninja check-clangd || exit /b 1\r
+cd..\r
+\r
+REM CMake expects the paths that specifies the compiler and linker to be\r
+REM with forward slash.\r
+REM CPACK_SYSTEM_NAME is set to have a correct name for installer generated.\r
+set all_cmake_flags=^\r
+  %cmake_flags% ^\r
+  -DCMAKE_C_COMPILER=%stage0_bin_dir%/clang-cl.exe ^\r
+  -DCMAKE_CXX_COMPILER=%stage0_bin_dir%/clang-cl.exe ^\r
+  -DCMAKE_LINKER=%stage0_bin_dir%/lld-link.exe ^\r
+  -DCMAKE_AR=%stage0_bin_dir%/llvm-lib.exe ^\r
+  -DCMAKE_RC=%stage0_bin_dir%/llvm-windres.exe ^\r
+  -DCPACK_SYSTEM_NAME=woa64\r
+set cmake_flags=%all_cmake_flags:\=/%\r
+\r
+mkdir build_arm64\r
+cd build_arm64\r
+cmake -GNinja %cmake_flags% ..\llvm-project\llvm || exit /b 1\r
+ninja || exit /b 1\r
+REM Check but do not fail on errors.\r
+ninja check-lldb\r
+::ninja check-llvm || exit /b 1\r
+::ninja check-clang || exit /b 1\r
+::ninja check-lld || exit /b 1\r
+::ninja check-sanitizer || exit /b 1\r
+::ninja check-clang-tools || exit /b 1\r
+::ninja check-clangd || exit /b 1\r
+ninja package || exit /b 1\r
+cd ..\r
+\r
+exit /b 0\r
+::==============================================================================\r
+::\r
+::==============================================================================\r
+:: Set PATH and some environment variables.\r
+::==============================================================================\r
+:set_environment\r
+REM Restore original path\r
+set PATH=%OLDPATH%\r
+\r
+set python_dir=%1\r
+\r
+REM Set Python environment\r
+%python_dir%/python.exe --version || exit /b 1\r
+set PYTHONHOME=%python_dir%\r
+set PATH=%PYTHONHOME%;%PATH%\r
+\r
+set "VSCMD_START_DIR=%build_dir%"\r
+\r
+exit /b 0\r
+\r
+::=============================================================================\r
+\r
+::==============================================================================\r
+:: Build libxml.\r
+::==============================================================================\r
+:do_build_libxml\r
+mkdir libxmlbuild\r
+cd libxmlbuild\r
+cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install ^\r
+  -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_C14N=OFF -DLIBXML2_WITH_CATALOG=OFF ^\r
+  -DLIBXML2_WITH_DEBUG=OFF -DLIBXML2_WITH_DOCB=OFF -DLIBXML2_WITH_FTP=OFF ^\r
+  -DLIBXML2_WITH_HTML=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF ^\r
+  -DLIBXML2_WITH_ICU=OFF -DLIBXML2_WITH_ISO8859X=OFF -DLIBXML2_WITH_LEGACY=OFF ^\r
+  -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_MEM_DEBUG=OFF -DLIBXML2_WITH_MODULES=OFF ^\r
+  -DLIBXML2_WITH_OUTPUT=ON -DLIBXML2_WITH_PATTERN=OFF -DLIBXML2_WITH_PROGRAMS=OFF ^\r
+  -DLIBXML2_WITH_PUSH=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_READER=OFF ^\r
+  -DLIBXML2_WITH_REGEXPS=OFF -DLIBXML2_WITH_RUN_DEBUG=OFF -DLIBXML2_WITH_SAX1=OFF ^\r
+  -DLIBXML2_WITH_SCHEMAS=OFF -DLIBXML2_WITH_SCHEMATRON=OFF -DLIBXML2_WITH_TESTS=OFF ^\r
+  -DLIBXML2_WITH_THREADS=ON -DLIBXML2_WITH_THREAD_ALLOC=OFF -DLIBXML2_WITH_TREE=ON ^\r
+  -DLIBXML2_WITH_VALID=OFF -DLIBXML2_WITH_WRITER=OFF -DLIBXML2_WITH_XINCLUDE=OFF ^\r
+  -DLIBXML2_WITH_XPATH=OFF -DLIBXML2_WITH_XPTR=OFF -DLIBXML2_WITH_ZLIB=OFF ^\r
+  ../../libxml2-v2.9.12 || exit /b 1\r
+ninja install || exit /b 1\r
+set libxmldir=%cd%\install\r
+set "libxmldir=%libxmldir:\=/%"\r
+cd ..\r
+\r
+exit /b 0\r
 ::=============================================================================\r
 :: Parse command line arguments.\r
 :: The format for the arguments is:\r