@@ -180,51 +180,129 @@ set(SWIFT_LIT_ARGS "" CACHE STRING "Arguments to pass to lit")
180180
181181set (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
229307if (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 ()
583645endforeach ()
@@ -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} " )
618692endif ()
619693
620694# Add shortcuts for the default variant.
0 commit comments