Skip to content

Commit ab7cd23

Browse files
authored
[6.2] test/CMakeLists.txt: run Embedded Swift for Wasm tests (#83287)
Cherry-pick of #83128, #82399, and #82878, merged as ea6ca2b, 0c4e561, and e34eb33 respectively. **Explanation**: Currently `test/CMakeLists.txt` can only set `SWIFT_LIT_ARGS` for all tests uniformly. This means that we can't have tests for Embedded Swift with a different set of `lit.py` arguments. Also, create new `check-swift-embedded-wasi` target from `test/CMakeLists.txt`, tweak `lit.cfg` to support WASI Clang resource dir, exclude unsupported tests based on `CPU=wasm32` instead of `OS=wasi`. **Scope**: Limited to Embedded Swift test suite. **Risk**: Low, due to limited scope. **Testing**: #82878 was incubated on `main` for 2 weeks, #82399 for 3 weeks with no disruption, #83128 merged this week, but enables all these tests on CI, which are consistently passing. **Issue**: rdar://156585717 **Reviewer**: @bnbarham
1 parent 215620a commit ab7cd23

File tree

71 files changed

+302
-202
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+302
-202
lines changed

test/CMakeLists.txt

Lines changed: 182 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -180,51 +180,129 @@ set(SWIFT_LIT_ARGS "" CACHE STRING "Arguments to pass to lit")
180180

181181
set(SWIFT_LIT_ENVIRONMENT "" CACHE STRING "Environment to use for lit invocations")
182182

183-
if(NOT SWIFT_INCLUDE_TOOLS)
184-
if(SWIFT_RUN_TESTS_WITH_HOST_COMPILER)
185-
precondition(CMAKE_Swift_COMPILER MESSAGE "Can only run tests if a Swift compiler is specified")
186-
get_filename_component(SWIFT_COMPILER_DIR "${CMAKE_Swift_COMPILER}" DIRECTORY)
187-
precondition(SWIFT_COMPILER_DIR)
188-
# We assume that we are building against a toolchain where all tools are
189-
# next to swiftc.
190-
list(APPEND SWIFT_LIT_ARGS
191-
"--path=${SWIFT_COMPILER_DIR}")
192-
else()
193-
list(APPEND SWIFT_LIT_ARGS
194-
"--path=${SWIFT_NATIVE_LLVM_TOOLS_PATH}"
195-
"--param" "swift_native_llvm_tools_path=${SWIFT_NATIVE_LLVM_TOOLS_PATH}"
196-
"--path=${SWIFT_NATIVE_CLANG_TOOLS_PATH}"
197-
"--param" "swift_native_clang_tools_path=${SWIFT_NATIVE_CLANG_TOOLS_PATH}"
198-
"--path=${SWIFT_NATIVE_SWIFT_TOOLS_PATH}"
199-
"--param" "swift_native_swift_tools_path=${SWIFT_NATIVE_SWIFT_TOOLS_PATH}"
200-
)
201-
endif()
202-
if(SWIFT_BUILD_STDLIB)
203-
# If building only static stdlib, use `swift_static` resources directory.
204-
if(NOT SWIFT_BUILD_DYNAMIC_STDLIB AND SWIFT_BUILD_STATIC_STDLIB)
205-
list(APPEND SWIFT_LIT_ARGS
206-
"--param" "test_resource_dir=${SWIFTSTATICLIB_DIR}")
183+
option(SWIFT_TEST_USE_LEAKS "Run Swift stdlib tests under leaks" FALSE)
184+
185+
function(setup_lit_args ARGS_VAR_OUT tested_sdk test_results_dir resource_dir_override)
186+
set(swift_lit_args_result)
187+
188+
if(NOT SWIFT_INCLUDE_TOOLS)
189+
if(SWIFT_RUN_TESTS_WITH_HOST_COMPILER)
190+
precondition(CMAKE_Swift_COMPILER MESSAGE "Can only run tests if a Swift compiler is specified")
191+
get_filename_component(SWIFT_COMPILER_DIR "${CMAKE_Swift_COMPILER}" DIRECTORY)
192+
precondition(SWIFT_COMPILER_DIR)
193+
# We assume that we are building against a toolchain where all tools are
194+
# next to swiftc.
195+
list(APPEND swift_lit_args_result
196+
"--path=${SWIFT_COMPILER_DIR}")
207197
else()
208-
list(APPEND SWIFT_LIT_ARGS
209-
"--param" "test_resource_dir=${SWIFTLIB_DIR}")
198+
list(APPEND swift_lit_args_result
199+
"--path=${SWIFT_NATIVE_LLVM_TOOLS_PATH}"
200+
"--param" "swift_native_llvm_tools_path=${SWIFT_NATIVE_LLVM_TOOLS_PATH}"
201+
"--path=${SWIFT_NATIVE_CLANG_TOOLS_PATH}"
202+
"--param" "swift_native_clang_tools_path=${SWIFT_NATIVE_CLANG_TOOLS_PATH}"
203+
"--path=${SWIFT_NATIVE_SWIFT_TOOLS_PATH}"
204+
"--param" "swift_native_swift_tools_path=${SWIFT_NATIVE_SWIFT_TOOLS_PATH}"
205+
)
206+
endif()
207+
if(SWIFT_BUILD_STDLIB)
208+
if(resource_dir_override)
209+
list(APPEND swift_lit_args_result
210+
"--param" "test_resource_dir=${resource_dir_override}")
211+
# If building only static stdlib, use `swift_static` resources directory.
212+
elseif(NOT SWIFT_BUILD_DYNAMIC_STDLIB AND SWIFT_BUILD_STATIC_STDLIB)
213+
list(APPEND swift_lit_args_result
214+
"--param" "test_resource_dir=${SWIFTSTATICLIB_DIR}")
215+
else()
216+
list(APPEND swift_lit_args_result
217+
"--param" "test_resource_dir=${SWIFTLIB_DIR}")
218+
endif()
210219
endif()
211220
endif()
212-
endif()
213221

214-
option(SWIFT_TEST_USE_LEAKS "Run Swift stdlib tests under leaks" FALSE)
215-
if (SWIFT_TEST_USE_LEAKS)
216-
list(APPEND SWIFT_LIT_ARGS "--param" "leaks-all")
217-
endif()
222+
if (SWIFT_TEST_USE_LEAKS)
223+
list(APPEND swift_lit_args_result "--param" "leaks-all")
224+
endif()
218225

219-
if (SWIFT_ENABLE_ARRAY_COW_CHECKS)
220-
list(APPEND SWIFT_LIT_ARGS
221-
"--param" "array_cow_checks")
222-
endif()
226+
if (SWIFT_ENABLE_ARRAY_COW_CHECKS)
227+
list(APPEND swift_lit_args_result
228+
"--param" "array_cow_checks")
229+
endif()
223230

224-
if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
225-
list(APPEND SWIFT_LIT_ARGS
226-
"--param" "build_mode=${CMAKE_CFG_INTDIR}")
227-
endif()
231+
if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
232+
list(APPEND swift_lit_args_result
233+
"--param" "build_mode=${CMAKE_CFG_INTDIR}")
234+
endif()
235+
236+
if(SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING)
237+
list(APPEND swift_lit_args_result "--param" "differentiable_programming")
238+
endif()
239+
240+
if(SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY)
241+
list(APPEND swift_lit_args_result "--param" "concurrency")
242+
endif()
243+
244+
if(SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED)
245+
list(APPEND swift_lit_args_result "--param" "distributed")
246+
endif()
247+
248+
if(SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING)
249+
list(APPEND swift_lit_args_result "--param" "string_processing")
250+
endif()
251+
252+
if(SWIFT_ENABLE_BACKTRACING)
253+
list(APPEND swift_lit_args_result "--param" "backtracing")
254+
endif()
255+
256+
if(SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION)
257+
list(APPEND swift_lit_args_result "--param" "observation")
258+
endif()
259+
260+
if(SWIFT_ENABLE_SYNCHRONIZATION)
261+
list(APPEND swift_lit_args_result "--param" "synchronization")
262+
endif()
263+
264+
if(SWIFT_ENABLE_VOLATILE)
265+
list(APPEND swift_lit_args_result "--param" "volatile")
266+
endif()
267+
268+
if(SWIFT_ENABLE_RUNTIME_MODULE)
269+
list(APPEND swift_lit_args_result "--param" "runtime_module")
270+
endif()
271+
272+
if(SWIFT_BUILD_REMOTE_MIRROR)
273+
list(APPEND swift_lit_args_result "--param" "remote_mirror")
274+
endif()
275+
276+
list(APPEND swift_lit_args_result "--param" "threading=${SWIFT_SDK_${tested_sdk}_THREADING_PACKAGE}")
277+
278+
# Enable on-crash backtracing if supported
279+
if(("${tested_sdk}" STREQUAL "OSX" OR "${tested_sdk}" STREQUAL "LINUX")
280+
AND NOT SWIFT_ASAN_BUILD)
281+
list(APPEND swift_lit_args_result "--param" "backtrace_on_crash")
282+
endif()
283+
284+
execute_process(COMMAND
285+
$<TARGET_FILE:Python3::Interpreter> "-c" "import psutil"
286+
RESULT_VARIABLE python_psutil_status
287+
TIMEOUT 1 # second
288+
ERROR_QUIET)
289+
if(NOT python_psutil_status)
290+
list(APPEND swift_lit_args_result "--timeout=3000") # 50 minutes
291+
endif()
292+
293+
list(APPEND swift_lit_args_result "--xunit-xml-output=${test_results_dir}/lit-tests.xml")
294+
295+
if(NOT SWIFT_BUILD_STDLIB AND NOT SWIFT_PATH_TO_EXTERNAL_STDLIB_BUILD)
296+
list(APPEND swift_lit_args_result
297+
"--param" "test_sdk_overlay_dir=${SWIFTLIB_DIR}/${SWIFT_SDK_${tested_sdk}_LIB_SUBDIR}")
298+
endif()
299+
300+
301+
set(swift_lit_args_result "${swift_lit_args_result} ${SWIFT_LIT_ARGS} ${LLVM_LIT_ARGS}")
302+
separate_arguments(swift_lit_args_result)
303+
304+
set(${ARGS_VAR_OUT} ${swift_lit_args_result} PARENT_SCOPE)
305+
endfunction()
228306

229307
if (LLVM_USE_SANITIZER STREQUAL "Address")
230308
set(SWIFT_ASAN_BUILD TRUE)
@@ -330,6 +408,14 @@ foreach(SDK ${SWIFT_SDKS})
330408
set(VARIANT_EXTERNAL_EMBEDDED_PLATFORM FALSE)
331409
set(VARIANT_EXTERNAL_EMBEDDED_DEVICE)
332410

411+
# Reset these values for WASI, as Embedded Swift for WASI requires separate lit configs.
412+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_old ${SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB})
413+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING_old ${SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING})
414+
if(${SDK} STREQUAL "WASI")
415+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB OFF)
416+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING OFF)
417+
endif()
418+
333419
swift_configure_lit_site_cfg(
334420
"${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in"
335421
"${test_bin_dir}/lit.site.cfg"
@@ -352,6 +438,10 @@ foreach(SDK ${SWIFT_SDKS})
352438
"${test_bin_dir}/lit.swift-features.cfg"
353439
"${validation_test_bin_dir}/lit.swift-features.cfg")
354440

441+
# Restore old values in case they were reset for WASI tests lit configs.
442+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB ${SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_old})
443+
set(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING ${SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING_old})
444+
355445
set(test_dependencies)
356446
get_test_dependencies("${SDK}" test_dependencies)
357447

@@ -429,73 +519,6 @@ foreach(SDK ${SWIFT_SDKS})
429519
COMMENT "Uploading stdlib")
430520

431521
foreach(test_mode ${TEST_MODES})
432-
set(LIT_ARGS "${SWIFT_LIT_ARGS} ${LLVM_LIT_ARGS}")
433-
separate_arguments(LIT_ARGS)
434-
435-
if(NOT SWIFT_BUILD_STDLIB AND NOT SWIFT_PATH_TO_EXTERNAL_STDLIB_BUILD)
436-
list(APPEND LIT_ARGS
437-
"--param" "test_sdk_overlay_dir=${SWIFTLIB_DIR}/${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
438-
endif()
439-
440-
execute_process(COMMAND
441-
$<TARGET_FILE:Python3::Interpreter> "-c" "import psutil"
442-
RESULT_VARIABLE python_psutil_status
443-
TIMEOUT 1 # second
444-
ERROR_QUIET)
445-
if(NOT python_psutil_status)
446-
list(APPEND LIT_ARGS "--timeout=3000") # 50 minutes
447-
endif()
448-
449-
list(APPEND LIT_ARGS "--xunit-xml-output=${SWIFT_TEST_RESULTS_DIR}/lit-tests.xml")
450-
451-
if(SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING)
452-
list(APPEND LIT_ARGS "--param" "differentiable_programming")
453-
endif()
454-
455-
if(SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY)
456-
list(APPEND LIT_ARGS "--param" "concurrency")
457-
endif()
458-
459-
if(SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED)
460-
list(APPEND LIT_ARGS "--param" "distributed")
461-
endif()
462-
463-
if(SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING)
464-
list(APPEND LIT_ARGS "--param" "string_processing")
465-
endif()
466-
467-
if(SWIFT_ENABLE_BACKTRACING)
468-
list(APPEND LIT_ARGS "--param" "backtracing")
469-
endif()
470-
471-
if(SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION)
472-
list(APPEND LIT_ARGS "--param" "observation")
473-
endif()
474-
475-
if(SWIFT_ENABLE_SYNCHRONIZATION)
476-
list(APPEND LIT_ARGS "--param" "synchronization")
477-
endif()
478-
479-
if(SWIFT_ENABLE_VOLATILE)
480-
list(APPEND LIT_ARGS "--param" "volatile")
481-
endif()
482-
483-
if(SWIFT_ENABLE_RUNTIME_MODULE)
484-
list(APPEND LIT_ARGS "--param" "runtime_module")
485-
endif()
486-
487-
if(SWIFT_BUILD_REMOTE_MIRROR)
488-
list(APPEND LIT_ARGS "--param" "remote_mirror")
489-
endif()
490-
491-
list(APPEND LIT_ARGS "--param" "threading=${SWIFT_SDK_${SDK}_THREADING_PACKAGE}")
492-
493-
# Enable on-crash backtracing if supported
494-
if(("${SDK}" STREQUAL "OSX" OR "${SDK}" STREQUAL "LINUX")
495-
AND NOT SWIFT_ASAN_BUILD)
496-
list(APPEND LIT_ARGS "--param" "backtrace_on_crash")
497-
endif()
498-
499522
foreach(test_subset ${TEST_SUBSETS})
500523
set(directories)
501524
set(dependencies ${test_dependencies})
@@ -535,6 +558,8 @@ foreach(SDK ${SWIFT_SDKS})
535558
set(maybe_command_upload_stdlib ${command_upload_stdlib})
536559
endif()
537560

561+
setup_lit_args(final_lit_args "${SDK}" "${SWIFT_TEST_RESULTS_DIR}" OFF)
562+
538563
set(test_target_name
539564
"check-swift${test_subset_target_suffix}${test_mode_target_suffix}${VARIANT_SUFFIX}")
540565
add_custom_target("${test_target_name}"
@@ -544,7 +569,7 @@ foreach(SDK ${SWIFT_SDKS})
544569
COMMAND
545570
${CMAKE_COMMAND} -E env ${SWIFT_LIT_ENVIRONMENT}
546571
$<TARGET_FILE:Python3::Interpreter> "${LIT}"
547-
${LIT_ARGS}
572+
${final_lit_args}
548573
"--param" "swift_test_subset=${test_subset}"
549574
"--param" "swift_test_mode=${test_mode}"
550575
${directories}
@@ -564,7 +589,7 @@ foreach(SDK ${SWIFT_SDKS})
564589
COMMAND
565590
${CMAKE_COMMAND} -E env ${SWIFT_LIT_ENVIRONMENT}
566591
$<TARGET_FILE:Python3::Interpreter> "${LIT}"
567-
${LIT_ARGS}
592+
${final_lit_args}
568593
"--param" "swift_test_subset=${test_subset}"
569594
"--param" "swift_test_mode=${test_mode}"
570595
${SWIFT_LIT_TEST_PATHS}
@@ -578,6 +603,43 @@ foreach(SDK ${SWIFT_SDKS})
578603
PROPERTY FOLDER "Tests/check-swift")
579604
endforeach()
580605
endforeach()
606+
607+
if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING AND (${ARCH} STREQUAL "wasm32"))
608+
set(test_mode "optimize_none")
609+
set(test_subset "primary")
610+
set(VARIANT_SUFFIX "-embedded-wasi")
611+
set(VARIANT_TRIPLE "wasm32-unknown-wasip1")
612+
set(test_bin_dir "${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/embedded")
613+
set(VARIANT_EXTERNAL_EMBEDDED_PLATFORM FALSE)
614+
set(VARIANT_EXTERNAL_EMBEDDED_DEVICE)
615+
set(SWIFT_TEST_RESULTS_DIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/swift-test-results/${VARIANT_TRIPLE}")
616+
swift_configure_lit_site_cfg(
617+
"${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in"
618+
"${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.site.cfg"
619+
"test${VARIANT_SUFFIX}.lit.site.cfg")
620+
swift_generate_lit_swift_features_cfg("${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.swift-features.cfg")
621+
622+
set(test_target_name "check-swift${VARIANT_SUFFIX}")
623+
set(directories "${test_bin_dir}")
624+
625+
set(embedded_wasm_lit_args)
626+
setup_lit_args(embedded_wasm_lit_args "${SDK}" "${SWIFT_TEST_RESULTS_DIR}" "${SWIFTLIB_DIR}")
627+
628+
add_custom_target("${test_target_name}"
629+
${maybe_command_upload_stdlib}
630+
${command_upload_swift_reflection_test}
631+
${command_clean_test_results_dir}
632+
COMMAND
633+
${CMAKE_COMMAND} -E env ${SWIFT_LIT_ENVIRONMENT}
634+
$<TARGET_FILE:Python3::Interpreter> "${LIT}"
635+
${embedded_wasm_lit_args}
636+
"--param" "swift_test_subset=${test_subset}"
637+
"--param" "swift_test_mode=${test_mode}"
638+
${directories}
639+
DEPENDS ${dependencies}
640+
COMMENT "Running ${test_subset} Swift tests for ${VARIANT_TRIPLE}"
641+
USES_TERMINAL)
642+
endif()
581643
endforeach()
582644
endforeach()
583645
endforeach()
@@ -615,6 +677,18 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING)
615677
"${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.site.cfg"
616678
"test${VARIANT_SUFFIX}.lit.site.cfg")
617679
swift_generate_lit_swift_features_cfg("${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.swift-features.cfg")
680+
681+
set(VARIANT_SUFFIX "-embedded-wasi")
682+
set(VARIANT_TRIPLE "wasm32-unknown-wasip1")
683+
set(VARIANT_EXTERNAL_EMBEDDED_PLATFORM FALSE)
684+
set(VARIANT_EXTERNAL_EMBEDDED_DEVICE)
685+
set(SWIFT_TEST_RESULTS_DIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/swift-test-results/${VARIANT_TRIPLE}")
686+
swift_configure_lit_site_cfg(
687+
"${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in"
688+
"${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.site.cfg"
689+
"test${VARIANT_SUFFIX}.lit.site.cfg")
690+
swift_generate_lit_swift_features_cfg("${CMAKE_CURRENT_BINARY_DIR}${VARIANT_SUFFIX}/lit.swift-features.cfg")
691+
message(STATUS "SWIFT_LIT_ARGS is ${SWIFT_LIT_ARGS}")
618692
endif()
619693

620694
# Add shortcuts for the default variant.

test/ClangImporter/availability_returns_twice.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// UNSUPPORTED: OS=windows-msvc
44

55
// `setjmp` is not available on WebAssembly/WASI
6-
// UNSUPPORTED: OS=wasi
6+
// UNSUPPORTED: OS=wasip1
77

88
// https://github.com/apple/swift/issues/51632
99
// In Android jmp_buf is int[16], which doesn't convert to &Int

test/Concurrency/Runtime/continuation_validation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// UNSUPPORTED: back_deploy_concurrency
1313
// UNSUPPORTED: use_os_stdlib
1414
// UNSUPPORTED: freestanding
15-
// UNSUPPORTED: OS=wasi
15+
// UNSUPPORTED: OS=wasip1
1616

1717
import StdlibUnittest
1818

0 commit comments

Comments
 (0)