diff --git a/llvm/utils/release/build_llvm_release.bat b/llvm/utils/release/build_llvm_release.bat --- a/llvm/utils/release/build_llvm_release.bat +++ b/llvm/utils/release/build_llvm_release.bat @@ -7,13 +7,14 @@ echo Script for building the LLVM installer on Windows, echo used for the releases at https://github.com/llvm/llvm-project/releases echo. -echo Usage: build_llvm_release.bat --version ^ [--x86,--x64] +echo Usage: build_llvm_release.bat --version ^ [--x86,--x64, --arm64] echo. echo Options: echo --version: [required] version to build echo --help: display this help echo --x86: build and test x86 variant echo --x64: build and test x64 variant +echo --arm64: build and test arm64 variant echo. echo Note: At least one variant to build is required. echo. @@ -28,6 +29,7 @@ set help= set x86= set x64= +set arm64= call :parse_args %* if "%help%" NEQ "" goto usage @@ -38,9 +40,9 @@ goto usage ) -if "%x64%" == "" if "%x86%" == "" ( +if "%arm64%" == "" if "%x64%" == "" if "%x86%" == "" ( echo nothing to build! - echo choose one or several variants from: --x86 --x64 + echo choose one or several variants from: --x86 --x64 --arm64 exit /b 1 ) @@ -107,6 +109,7 @@ set python32_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python310-32 set python64_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python310 +set pythonarm64_dir=C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python311-arm64 set revision=llvmorg-%version% set package_version=%version% @@ -157,6 +160,7 @@ REM Build the 32-bits and/or 64-bits binaries. if "%x86%" == "true" call :do_build_32 || exit /b 1 if "%x64%" == "true" call :do_build_64 || exit /b 1 +if "%arm64%" == "true" call :do_build_arm64 || exit /b 1 exit /b 0 ::============================================================================== @@ -305,6 +309,121 @@ exit /b 0 ::============================================================================== +::============================================================================== +:: Build arm64 binaries. +::============================================================================== +:do_build_arm64 +REM Restore original path +set PATH=%OLDPATH% + +REM Set Python environment +set PYTHONHOME=%pythonarm64_dir% +set PATH=%PYTHONHOME%;%PATH% +%pythonarm64_dir%/python.exe --version || exit /b 1 + +set "VSCMD_START_DIR=%build_dir%" +call "%vsdevcmd%" -host_arch=x64 -arch=arm64 || exit /b 1 +@echo on +mkdir build_arm64_stage0 +cd build_arm64_stage0 + +mkdir libxmlbuild +cd libxmlbuild +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 +ninja install || exit /b 1 +set libxmldir=%cd%\install +set "libxmldir=%libxmldir:\=/%" +cd .. + +REM Stage0 binaries directory; used in stage1. +set "stage0_bin_dir=%build_dir%/build_arm64_stage0/bin" + +set cmake_flags=^ + %common_cmake_flags% ^ + -DLLVM_ENABLE_ASSERTIONS=ON ^ + -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-windows-msvc ^ + -DLLVM_HOST_TRIPLE=aarch64-windows-msvc ^ + -DLLVM_TARGET_ARCH=AArch64 ^ + -DCLANG_DEFAULT_LINKER=lld ^ + -DLIBXML2_INCLUDE_DIRS=%libxmldir%/include/libxml2 ^ + -DLIBXML2_LIBRARIES=%libxmldir%/lib/libxml2s.lib ^ + -DPython3_ROOT_DIR=%PYTHONHOME% + +REM Note that we only enable compiler-rt so we can build the builtins, which are +REM needed in the next stage when building flang. +REM We need to build stage0 with clang-cl (for builtins). +cmake -GNinja %cmake_flags% ^ + -DCMAKE_C_COMPILER=clang-cl.exe ^ + -DCMAKE_CXX_COMPILER=clang-cl.exe ^ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;compiler-rt" ^ + -DLLVM_TARGETS_TO_BUILD="AArch64" ^ + -DCOMPILER_RT_BUILD_BUILTINS=ON ^ + -DCOMPILER_RT_BUILD_CRT=OFF ^ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF ^ + -DCOMPILER_RT_BUILD_XRAY=OFF ^ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF ^ + -DCOMPILER_RT_BUILD_PROFILE=OFF ^ + -DCOMPILER_RT_BUILD_MEMPROF=OFF ^ + -DCOMPILER_RT_BUILD_ORC=OFF ^ + -DCOMPILER_RT_BUILD_GWP_ASAN=OFF ^ + ..\llvm-project\llvm || exit /b 1 +ninja || exit /b 1 +::ninja check-llvm || exit /b 1 +::ninja check-clang || exit /b 1 +::ninja check-lld || exit /b 1 +::ninja check-sanitizer || exit /b 1 +::ninja check-clang-tools || exit /b 1 +::ninja check-clangd || exit /b 1 +cd.. + +set builtins=%build_dir%\build_arm64_stage0\lib\clang\%package_version%\lib\windows\clang_rt.builtins-aarch64.lib +REM CMake expects the paths that specifies the compiler and linker to be +REM with forward slash. +set all_cmake_flags=^ + %cmake_flags% ^ + -DCMAKE_C_COMPILER=%stage0_bin_dir%/clang-cl.exe ^ + -DCMAKE_CXX_COMPILER=%stage0_bin_dir%/clang-cl.exe ^ + -DCMAKE_LINKER=%stage0_bin_dir%/lld-link.exe ^ + -DCMAKE_AR=%stage0_bin_dir%/llvm-lib.exe ^ + -DCMAKE_RC=%stage0_bin_dir%/llvm-windres.exe ^ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;flang;lld;lldb;compiler-rt" ^ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF ^ + -DCOMPILER_RT_BUILD_MEMPROF=OFF ^ + -DCOMPILER_RT_BUILD_XRAY=OFF ^ + -DLLDB_ENABLE_PYTHON=ON ^ + -DLLDB_RELOCATABLE_PYTHON=ON ^ + -DLLDB_EMBED_PYTHON_HOME=OFF ^ + -DCMAKE_EXE_LINKER_FLAGS=%builtins% ^ + -DCMAKE_SHARED_LINKER_FLAGS=%builtins% ^ + -DCMAKE_STATIC_LINKER_FLAGS=%builtins% ^ + -DCMAKE_MODULE_LINKER_FLAGS=%builtins% +set cmake_flags=%all_cmake_flags:\=/% + +mkdir build_arm64 +cd build_arm64 +cmake -GNinja %cmake_flags% ..\llvm-project\llvm || exit /b 1 +ninja || exit /b 1 +REM Check but do not fail on errors. +ninja check-lldb +ninja check-flang +::ninja check-llvm || exit /b 1 +::ninja check-clang || exit /b 1 +::ninja check-lld || exit /b 1 +::ninja check-sanitizer || exit /b 1 +::ninja check-clang-tools || exit /b 1 +::ninja check-clangd || exit /b 1 +ninja package || exit /b 1 + +rename LLVM-%package_version%-win64.exe LLVM-%package_version%-woa64.exe || exit /b 1 +7z x LLVM-%package_version%-woa64.exe -orepack || exit /b 1 +rmdir /s /q repack\$PLUGINSDIR || exit /b 1 +del repack\Uninstall.exe || exit /b 1 +7z a LLVM-%package_version%-woa64.zip .\repack\* -mx9 || exit /b 1 +cd .. + +exit /b 0 +::============================================================================== + ::============================================================================= :: Parse command line arguments. :: The format for the arguments is: