diff --git a/cmake/caches/Windows-aarch64.cmake b/cmake/caches/Windows-aarch64.cmake index 6dd9a786b9065..fef9e80fe1672 100644 --- a/cmake/caches/Windows-aarch64.cmake +++ b/cmake/caches/Windows-aarch64.cmake @@ -26,9 +26,24 @@ set(LLVM_DEFAULT_TARGET_TRIPLE aarch64-unknown-windows-msvc CACHE STRING "") set(LLVM_APPEND_VC_REV NO CACHE BOOL "") set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR YES CACHE BOOL "") set(LLVM_ENABLE_PYTHON YES CACHE BOOL "") -set(LLVM_RUNTIME_TARGETS + +set(default_targets + x86_64-unknown-windows-msvc aarch64-unknown-windows-msvc - CACHE STRING "") + i686-unknown-windows-msvc) +set(LLVM_RUNTIME_TARGETS ${default_targets} CACHE STRING "") + +# Build the android builtins if NDK path is provided. +if(NOT "$ENV{NDKPATH}" STREQUAL "") + list(APPEND default_targets + aarch64-unknown-linux-android + x86_64-unknown-linux-android + i686-unknown-linux-android + armv7-unknown-linux-androideabi) +endif() + +set(LLVM_BUILTIN_TARGETS ${default_targets} CACHE STRING "") + foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES compiler-rt @@ -36,11 +51,40 @@ foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_CMAKE_MT mt CACHE STRING "") set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "") set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") + set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS YES CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_CRT NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER NO CACHE BOOL "") + set(RUNTIMES_${target}_COMPILER_RT_BUILD_ORC NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_PROFILE YES CACHE BOOL "") - set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_XRAY NO CACHE BOOL "") + # Sanitizers will be configured, but not built. We have separate build + # steps for that, because we need a different shell for each target. + set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "") +endforeach() + +foreach(target ${LLVM_BUILTIN_TARGETS}) + set(BUILTINS_${target}_CMAKE_MT mt CACHE STRING "") + if(${target} MATCHES windows-msvc) + set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "") + elseif(${target} MATCHES linux-android) + # Use a single 'linux' directory and arch-based lib names on Android. + set(BUILTINS_${target}_LLVM_ENABLE_PER_TARGET_RUNTIME_DIR NO CACHE BOOL "") + set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Android CACHE STRING "") + if(${target} MATCHES aarch64) + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI arm64-v8a CACHE STRING "") + elseif(${target} MATCHES armv7) + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI armeabi-v7a CACHE STRING "") + elseif(${target} MATCHES i686) + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86 CACHE STRING "") + else() + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86_64 CACHE STRING "") + endif() + set(BUILTINS_${target}_CMAKE_ANDROID_NDK $ENV{NDKPATH} CACHE PATH "") + set(BUILTINS_${target}_CMAKE_ANDROID_API 21 CACHE STRING "") + set(BUILTINS_${target}_CMAKE_C_COMPILER_TARGET "${target}21" CACHE STRING "") + set(BUILTINS_${target}_CMAKE_CXX_COMPILER_TARGET "${target}21" CACHE STRING "") + endif() + set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") endforeach() set(LLVM_TARGETS_TO_BUILD AArch64 ARM WebAssembly X86 CACHE STRING "") @@ -165,6 +209,7 @@ set(LLVM_DISTRIBUTION_COMPONENTS libclang libclang-headers LTO + builtins runtimes ${LLVM_TOOLCHAIN_TOOLS} ${CLANG_TOOLS} diff --git a/cmake/caches/Windows-x86_64.cmake b/cmake/caches/Windows-x86_64.cmake index 0f146d3f4e43a..7878887b3f824 100644 --- a/cmake/caches/Windows-x86_64.cmake +++ b/cmake/caches/Windows-x86_64.cmake @@ -27,24 +27,22 @@ set(LLVM_APPEND_VC_REV NO CACHE BOOL "") set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR YES CACHE BOOL "") set(LLVM_ENABLE_PYTHON YES CACHE BOOL "") -set(DEFAULT_BUILTIN_TARGETS +set(default_targets x86_64-unknown-windows-msvc - aarch64-unknown-windows-msvc) + aarch64-unknown-windows-msvc + i686-unknown-windows-msvc) +set(LLVM_RUNTIME_TARGETS ${default_targets} CACHE STRING "") + # Build the android builtins if NDK path is provided. if(NOT "$ENV{NDKPATH}" STREQUAL "") - list(APPEND DEFAULT_BUILTIN_TARGETS + list(APPEND default_targets aarch64-unknown-linux-android - x86_64-unknown-linux-android) + x86_64-unknown-linux-android + i686-unknown-linux-android + armv7-unknown-linux-androideabi) endif() -# The builtin targets are used to build the compiler-rt builtins. -set(LLVM_BUILTIN_TARGETS ${DEFAULT_BUILTIN_TARGETS} CACHE STRING "") - -# The runtime targets are used to build the compiler-rt profile library. -set(LLVM_RUNTIME_TARGETS - x86_64-unknown-windows-msvc - aarch64-unknown-windows-msvc - CACHE STRING "") +set(LLVM_BUILTIN_TARGETS ${default_targets} CACHE STRING "") foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES @@ -53,13 +51,15 @@ foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_CMAKE_MT mt CACHE STRING "") set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "") set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") - set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS NO CACHE BOOL "") + set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS YES CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_CRT NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_ORC NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_PROFILE YES CACHE BOOL "") - set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "") set(RUNTIMES_${target}_COMPILER_RT_BUILD_XRAY NO CACHE BOOL "") + # Sanitizers will be configured, but not built. We have separate build + # steps for that, because we need a different shell for each target. + set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "") endforeach() foreach(target ${LLVM_BUILTIN_TARGETS}) @@ -72,6 +72,10 @@ foreach(target ${LLVM_BUILTIN_TARGETS}) set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Android CACHE STRING "") if(${target} MATCHES aarch64) set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI arm64-v8a CACHE STRING "") + elseif(${target} MATCHES armv7) + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI armeabi-v7a CACHE STRING "") + elseif(${target} MATCHES i686) + set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86 CACHE STRING "") else() set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86_64 CACHE STRING "") endif() diff --git a/test/Driver/sanitize_coverage.swift b/test/Driver/sanitize_coverage.swift index e41562a7a4c2f..3192f24945169 100644 --- a/test/Driver/sanitize_coverage.swift +++ b/test/Driver/sanitize_coverage.swift @@ -1,3 +1,5 @@ +// UNSUPPORTED: OS=windows-msvc + // Different sanitizer coverage types // RUN: %swiftc_driver -driver-print-jobs -sanitize-coverage=func -sanitize=address %s | %FileCheck -check-prefix=SANCOV_FUNC %s // RUN: %swiftc_driver -driver-print-jobs -sanitize-coverage=bb -sanitize=address %s | %FileCheck -check-prefix=SANCOV_BB %s diff --git a/test/IRGen/address_sanitizer_use_odr_indicator.swift b/test/IRGen/address_sanitizer_use_odr_indicator.swift index 1ed723e25c08e..a529a4067cbfa 100644 --- a/test/IRGen/address_sanitizer_use_odr_indicator.swift +++ b/test/IRGen/address_sanitizer_use_odr_indicator.swift @@ -1,3 +1,4 @@ +// UNSUPPORTED: OS=windows-msvc // REQUIRES: asan_runtime // Default instrumentation that does not use ODR indicators diff --git a/test/Interpreter/indirect_enum.swift b/test/Interpreter/indirect_enum.swift index 3f5359ed360a7..fdc54ed5ff400 100644 --- a/test/Interpreter/indirect_enum.swift +++ b/test/Interpreter/indirect_enum.swift @@ -1,3 +1,5 @@ +// UNSUPPORTED: OS=windows-msvc + // RUN: %target-swiftc_driver %s -g -sanitize=address -o %t_asan-binary // RUN: %target-codesign %t_asan-binary // RUN: env ASAN_OPTIONS=detect_leaks=0 %target-run %t_asan-binary diff --git a/test/Reflection/typeref_decoding_asan.swift b/test/Reflection/typeref_decoding_asan.swift index 2bd6be187db44..8ddc7ae2c1489 100644 --- a/test/Reflection/typeref_decoding_asan.swift +++ b/test/Reflection/typeref_decoding_asan.swift @@ -1,4 +1,5 @@ // UNSUPPORTED: OS=linux-gnu && CPU=aarch64 +// UNSUPPORTED: OS=windows-msvc // rdar://100805115 // UNSUPPORTED: CPU=arm64e diff --git a/test/Sanitizers/asan/asan.swift b/test/Sanitizers/asan/asan.swift index 3b2005523a009..b929582346856 100644 --- a/test/Sanitizers/asan/asan.swift +++ b/test/Sanitizers/asan/asan.swift @@ -1,3 +1,5 @@ +// UNSUPPORTED: OS=windows-msvc + // RUN: %target-swiftc_driver %s -g -sanitize=address -o %t_asan-binary // RUN: %target-codesign %t_asan-binary // RUN: env %env-ASAN_OPTIONS=abort_on_error=0 not %target-run %t_asan-binary 2>&1 | %FileCheck %s diff --git a/test/Sanitizers/sanitizer_coverage.swift b/test/Sanitizers/sanitizer_coverage.swift index 8044beeb37033..a945d63994c70 100644 --- a/test/Sanitizers/sanitizer_coverage.swift +++ b/test/Sanitizers/sanitizer_coverage.swift @@ -9,6 +9,7 @@ // For now restrict this test to platforms where we know this test will pass // REQUIRES: CPU=x86_64 // UNSUPPORTED: remote_run +// UNSUPPORTED: OS=windows-msvc func sayHello() { print("Hello") diff --git a/utils/build.ps1 b/utils/build.ps1 index cb800f768d3c4..942c3464e8bc2 100644 --- a/utils/build.ps1 +++ b/utils/build.ps1 @@ -1764,6 +1764,21 @@ function Build-CURL([Platform]$Platform, $Arch) { }) } +function Build-Sanitizers([Platform]$Platform, $Arch, $InstallTo) { + Isolate-EnvVars { + # Use configured compilers + Build-CMakeProject ` + -Src $SourceCache\llvm-project\runtimes ` + -Bin "$(Get-HostProjectBinaryCache Compilers)\runtimes\runtimes-$($Arch.LLVMTarget)-bins" ` + -InstallTo $InstallTo ` + -Arch $Arch ` + -Platform $Platform ` + -Defines (@{ + COMPILER_RT_BUILD_SANITIZERS = "YES" + }) + } +} + function Build-Runtime([Platform]$Platform, $Arch) { $PlatformDefines = @{} if ($Platform -eq "Android") { @@ -2756,6 +2771,11 @@ if (-not $SkipBuild) { Invoke-BuildStep Build-CMark $HostArch Invoke-BuildStep Build-Compilers $HostArch + + $InstallTo = "$($HostArch.ToolchainInstallRoot)\usr" + foreach ($Arch in $WindowsSDKArchs) { + Invoke-BuildStep Build-Sanitizers Windows $Arch $InstallTo + } } if ($Clean) {