Skip to content

Commit 3ab2a3e

Browse files
authored
Merge pull request #77770 from weliveindetail/windows-toolchain-sanitizers
[windows][toolchain] Enable builtins and sanitizers
2 parents ec0bf28 + 2f7116a commit 3ab2a3e

9 files changed

+95
-17
lines changed

cmake/caches/Windows-aarch64.cmake

+48-3
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,65 @@ set(LLVM_DEFAULT_TARGET_TRIPLE aarch64-unknown-windows-msvc CACHE STRING "")
2626
set(LLVM_APPEND_VC_REV NO CACHE BOOL "")
2727
set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR YES CACHE BOOL "")
2828
set(LLVM_ENABLE_PYTHON YES CACHE BOOL "")
29-
set(LLVM_RUNTIME_TARGETS
29+
30+
set(default_targets
31+
x86_64-unknown-windows-msvc
3032
aarch64-unknown-windows-msvc
31-
CACHE STRING "")
33+
i686-unknown-windows-msvc)
34+
set(LLVM_RUNTIME_TARGETS ${default_targets} CACHE STRING "")
35+
36+
# Build the android builtins if NDK path is provided.
37+
if(NOT "$ENV{NDKPATH}" STREQUAL "")
38+
list(APPEND default_targets
39+
aarch64-unknown-linux-android
40+
x86_64-unknown-linux-android
41+
i686-unknown-linux-android
42+
armv7-unknown-linux-androideabi)
43+
endif()
44+
45+
set(LLVM_BUILTIN_TARGETS ${default_targets} CACHE STRING "")
46+
3247
foreach(target ${LLVM_RUNTIME_TARGETS})
3348
set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES
3449
compiler-rt
3550
CACHE STRING "")
3651
set(RUNTIMES_${target}_CMAKE_MT mt CACHE STRING "")
3752
set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "")
3853
set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "")
54+
set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS YES CACHE BOOL "")
3955
set(RUNTIMES_${target}_COMPILER_RT_BUILD_CRT NO CACHE BOOL "")
4056
set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER NO CACHE BOOL "")
57+
set(RUNTIMES_${target}_COMPILER_RT_BUILD_ORC NO CACHE BOOL "")
4158
set(RUNTIMES_${target}_COMPILER_RT_BUILD_PROFILE YES CACHE BOOL "")
42-
set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "")
4359
set(RUNTIMES_${target}_COMPILER_RT_BUILD_XRAY NO CACHE BOOL "")
60+
# Sanitizers will be configured, but not built. We have separate build
61+
# steps for that, because we need a different shell for each target.
62+
set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "")
63+
endforeach()
64+
65+
foreach(target ${LLVM_BUILTIN_TARGETS})
66+
set(BUILTINS_${target}_CMAKE_MT mt CACHE STRING "")
67+
if(${target} MATCHES windows-msvc)
68+
set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "")
69+
elseif(${target} MATCHES linux-android)
70+
# Use a single 'linux' directory and arch-based lib names on Android.
71+
set(BUILTINS_${target}_LLVM_ENABLE_PER_TARGET_RUNTIME_DIR NO CACHE BOOL "")
72+
set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Android CACHE STRING "")
73+
if(${target} MATCHES aarch64)
74+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI arm64-v8a CACHE STRING "")
75+
elseif(${target} MATCHES armv7)
76+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI armeabi-v7a CACHE STRING "")
77+
elseif(${target} MATCHES i686)
78+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86 CACHE STRING "")
79+
else()
80+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86_64 CACHE STRING "")
81+
endif()
82+
set(BUILTINS_${target}_CMAKE_ANDROID_NDK $ENV{NDKPATH} CACHE PATH "")
83+
set(BUILTINS_${target}_CMAKE_ANDROID_API 21 CACHE STRING "")
84+
set(BUILTINS_${target}_CMAKE_C_COMPILER_TARGET "${target}21" CACHE STRING "")
85+
set(BUILTINS_${target}_CMAKE_CXX_COMPILER_TARGET "${target}21" CACHE STRING "")
86+
endif()
87+
set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "")
4488
endforeach()
4589

4690
set(LLVM_TARGETS_TO_BUILD AArch64 ARM WebAssembly X86 CACHE STRING "")
@@ -167,6 +211,7 @@ set(LLVM_DISTRIBUTION_COMPONENTS
167211
libclang
168212
libclang-headers
169213
LTO
214+
builtins
170215
runtimes
171216
${LLVM_TOOLCHAIN_TOOLS}
172217
${CLANG_TOOLS}

cmake/caches/Windows-x86_64.cmake

+18-14
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,22 @@ set(LLVM_APPEND_VC_REV NO CACHE BOOL "")
2727
set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR YES CACHE BOOL "")
2828
set(LLVM_ENABLE_PYTHON YES CACHE BOOL "")
2929

30-
set(DEFAULT_BUILTIN_TARGETS
30+
set(default_targets
3131
x86_64-unknown-windows-msvc
32-
aarch64-unknown-windows-msvc)
32+
aarch64-unknown-windows-msvc
33+
i686-unknown-windows-msvc)
34+
set(LLVM_RUNTIME_TARGETS ${default_targets} CACHE STRING "")
35+
3336
# Build the android builtins if NDK path is provided.
3437
if(NOT "$ENV{NDKPATH}" STREQUAL "")
35-
list(APPEND DEFAULT_BUILTIN_TARGETS
38+
list(APPEND default_targets
3639
aarch64-unknown-linux-android
37-
x86_64-unknown-linux-android)
40+
x86_64-unknown-linux-android
41+
i686-unknown-linux-android
42+
armv7-unknown-linux-androideabi)
3843
endif()
3944

40-
# The builtin targets are used to build the compiler-rt builtins.
41-
set(LLVM_BUILTIN_TARGETS ${DEFAULT_BUILTIN_TARGETS} CACHE STRING "")
42-
43-
# The runtime targets are used to build the compiler-rt profile library.
44-
set(LLVM_RUNTIME_TARGETS
45-
x86_64-unknown-windows-msvc
46-
aarch64-unknown-windows-msvc
47-
CACHE STRING "")
45+
set(LLVM_BUILTIN_TARGETS ${default_targets} CACHE STRING "")
4846

4947
foreach(target ${LLVM_RUNTIME_TARGETS})
5048
set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES
@@ -53,13 +51,15 @@ foreach(target ${LLVM_RUNTIME_TARGETS})
5351
set(RUNTIMES_${target}_CMAKE_MT mt CACHE STRING "")
5452
set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Windows CACHE STRING "")
5553
set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "")
56-
set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS NO CACHE BOOL "")
54+
set(RUNTIMES_${target}_COMPILER_RT_BUILD_BUILTINS YES CACHE BOOL "")
5755
set(RUNTIMES_${target}_COMPILER_RT_BUILD_CRT NO CACHE BOOL "")
5856
set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER NO CACHE BOOL "")
5957
set(RUNTIMES_${target}_COMPILER_RT_BUILD_ORC NO CACHE BOOL "")
6058
set(RUNTIMES_${target}_COMPILER_RT_BUILD_PROFILE YES CACHE BOOL "")
61-
set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "")
6259
set(RUNTIMES_${target}_COMPILER_RT_BUILD_XRAY NO CACHE BOOL "")
60+
# Sanitizers will be configured, but not built. We have separate build
61+
# steps for that, because we need a different shell for each target.
62+
set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS NO CACHE BOOL "")
6363
endforeach()
6464

6565
foreach(target ${LLVM_BUILTIN_TARGETS})
@@ -72,6 +72,10 @@ foreach(target ${LLVM_BUILTIN_TARGETS})
7272
set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Android CACHE STRING "")
7373
if(${target} MATCHES aarch64)
7474
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI arm64-v8a CACHE STRING "")
75+
elseif(${target} MATCHES armv7)
76+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI armeabi-v7a CACHE STRING "")
77+
elseif(${target} MATCHES i686)
78+
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86 CACHE STRING "")
7579
else()
7680
set(BUILTINS_${target}_CMAKE_ANDROID_ARCH_ABI x86_64 CACHE STRING "")
7781
endif()

test/Driver/sanitize_coverage.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// UNSUPPORTED: OS=windows-msvc
2+
13
// Different sanitizer coverage types
24
// RUN: %swiftc_driver -driver-print-jobs -sanitize-coverage=func -sanitize=address %s | %FileCheck -check-prefix=SANCOV_FUNC %s
35
// RUN: %swiftc_driver -driver-print-jobs -sanitize-coverage=bb -sanitize=address %s | %FileCheck -check-prefix=SANCOV_BB %s

test/IRGen/address_sanitizer_use_odr_indicator.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// UNSUPPORTED: OS=windows-msvc
12
// REQUIRES: asan_runtime
23

34
// Default instrumentation that does not use ODR indicators

test/Interpreter/indirect_enum.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// UNSUPPORTED: OS=windows-msvc
2+
13
// RUN: %target-swiftc_driver %s -g -sanitize=address -o %t_asan-binary
24
// RUN: %target-codesign %t_asan-binary
35
// RUN: env ASAN_OPTIONS=detect_leaks=0 %target-run %t_asan-binary

test/Reflection/typeref_decoding_asan.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// UNSUPPORTED: OS=linux-gnu && CPU=aarch64
2+
// UNSUPPORTED: OS=windows-msvc
23

34
// rdar://100805115
45
// UNSUPPORTED: CPU=arm64e

test/Sanitizers/asan/asan.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// UNSUPPORTED: OS=windows-msvc
2+
13
// RUN: %target-swiftc_driver %s -g -sanitize=address -o %t_asan-binary
24
// RUN: %target-codesign %t_asan-binary
35
// RUN: env %env-ASAN_OPTIONS=abort_on_error=0 not %target-run %t_asan-binary 2>&1 | %FileCheck %s

test/Sanitizers/sanitizer_coverage.swift

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// For now restrict this test to platforms where we know this test will pass
1010
// REQUIRES: CPU=x86_64
1111
// UNSUPPORTED: remote_run
12+
// UNSUPPORTED: OS=windows-msvc
1213

1314
func sayHello() {
1415
print("Hello")

utils/build.ps1

+20
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,21 @@ function Build-CURL([Platform]$Platform, $Arch) {
18481848
})
18491849
}
18501850

1851+
function Build-Sanitizers([Platform]$Platform, $Arch, $InstallTo) {
1852+
Isolate-EnvVars {
1853+
# Use configured compilers
1854+
Build-CMakeProject `
1855+
-Src $SourceCache\llvm-project\runtimes `
1856+
-Bin "$(Get-HostProjectBinaryCache Compilers)\runtimes\runtimes-$($Arch.LLVMTarget)-bins" `
1857+
-InstallTo $InstallTo `
1858+
-Arch $Arch `
1859+
-Platform $Platform `
1860+
-Defines (@{
1861+
COMPILER_RT_BUILD_SANITIZERS = "YES"
1862+
})
1863+
}
1864+
}
1865+
18511866
function Build-Runtime([Platform]$Platform, $Arch) {
18521867
$PlatformDefines = @{}
18531868
if ($Platform -eq [Platform]::Android) {
@@ -2858,6 +2873,11 @@ if (-not $SkipBuild) {
28582873
Invoke-BuildStep Build-CMark $HostArch
28592874
Invoke-BuildStep Build-XML2 Windows $HostArch
28602875
Invoke-BuildStep Build-Compilers $HostArch
2876+
2877+
$InstallTo = "$($HostArch.ToolchainInstallRoot)\usr"
2878+
foreach ($Arch in $WindowsSDKArchs) {
2879+
Invoke-BuildStep Build-Sanitizers Windows $Arch $InstallTo
2880+
}
28612881
}
28622882

28632883
if ($Clean) {

0 commit comments

Comments
 (0)