From 733a318709c7ba59cc025b12cad1ddb1378cba5a Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Sat, 10 Dec 2022 12:23:36 -0700 Subject: [PATCH] Meta+CMake: Extract Wasm spec tests into the binary directory Clean up the Wasm spec tests CMake rules to extract and compile the wat files into wasm files in the LibWasm binary directory instead of its source directory. Also make the rules more robust to missing host tools, and use more CMake install rules for the test files rather than relying on build-root-filesystem.sh. Add some FIXMEs for later, we really shouldn't be doing installation of test files into /home/anon at the build-root-filesystem stage in $CURRENT_YEAR. Tests go in /usr/Tests --- CMakeLists.txt | 1 - Meta/CMake/wasm_spec_tests.cmake | 30 +++++++++++++++-------- Meta/Lagom/CMakeLists.txt | 8 +++--- Meta/build-root-filesystem.sh | 4 +-- Userland/Libraries/LibWasm/CMakeLists.txt | 4 +++ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b536af832a..d316febfda1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,7 +208,6 @@ add_custom_target(components ALL) option(BUILD_EVERYTHING "Build all optional components" ON) include(utils) -include(wasm_spec_tests) include(flac_spec_tests) serenity_component( diff --git a/Meta/CMake/wasm_spec_tests.cmake b/Meta/CMake/wasm_spec_tests.cmake index 93f152223d9..0f75f2376a4 100644 --- a/Meta/CMake/wasm_spec_tests.cmake +++ b/Meta/CMake/wasm_spec_tests.cmake @@ -1,12 +1,11 @@ +# +# Download and compile the WebAssembly testsuite into the WebAssembly binary format +# + if(INCLUDE_WASM_SPEC_TESTS) - if (CMAKE_PROJECT_NAME STREQUAL "SerenityOS") - set(SOURCE_DIR "${SerenityOS_SOURCE_DIR}") - else() - set(SOURCE_DIR "${SERENITY_PROJECT_ROOT}") - endif() set(WASM_SPEC_TEST_GZ_URL https://github.com/WebAssembly/testsuite/archive/refs/heads/main.tar.gz) - set(WASM_SPEC_TEST_GZ_PATH ${CMAKE_BINARY_DIR}/wasm-spec-testsuite.tar.gz) - set(WASM_SPEC_TEST_PATH ${SOURCE_DIR}/Userland/Libraries/LibWasm/Tests/Fixtures/SpecTests) + set(WASM_SPEC_TEST_GZ_PATH ${CMAKE_BINARY_DIR}/wasm-spec-testsuite.tar.gz CACHE PATH "") + set(WASM_SPEC_TEST_PATH ${CMAKE_CURRENT_BINARY_DIR}/Tests/Fixtures/SpecTests CACHE PATH "") if(NOT EXISTS ${WASM_SPEC_TEST_GZ_PATH}) message(STATUS "Downloading the WebAssembly testsuite from ${WASM_SPEC_TEST_GZ_URL}...") @@ -18,7 +17,13 @@ if(INCLUDE_WASM_SPEC_TESTS) set(SKIP_PRETTIER true) endif() - if(EXISTS ${WASM_SPEC_TEST_GZ_PATH} AND NOT EXISTS ${WASM_SPEC_TEST_PATH}) + find_program(WAT2WASM wat2wasm REQUIRED) + find_program(PRETTIER prettier OPTIONAL) + if (NOT SKIP_PRETTIER AND NOT PRETTIER_FOUND) + message(FATAL_ERROR "Prettier required to format Wasm spec tests! Install prettier or set WASM_SPEC_TEST_SKIP_FORMATTING to ON") + endif() + + if(EXISTS ${WASM_SPEC_TEST_GZ_PATH} AND NOT EXISTS ${WASM_SPEC_TEST_PATH}/const_0.wasm) message(STATUS "Extracting the WebAssembly testsuite from ${WASM_SPEC_TEST_GZ_PATH}...") file(MAKE_DIRECTORY ${WASM_SPEC_TEST_PATH}) if (CMAKE_VERSION VERSION_LESS 3.18.0) @@ -26,7 +31,7 @@ if(INCLUDE_WASM_SPEC_TESTS) else() file(ARCHIVE_EXTRACT INPUT ${WASM_SPEC_TEST_GZ_PATH} ) endif() - file(GLOB WASM_TESTS "${CMAKE_BINARY_DIR}/testsuite-main/*.wast") + file(GLOB WASM_TESTS "${CMAKE_CURRENT_BINARY_DIR}/testsuite-main/*.wast") foreach(PATH ${WASM_TESTS}) get_filename_component(NAME ${PATH} NAME_WLE) message(STATUS "Generating test cases for WebAssembly test ${NAME}...") @@ -36,8 +41,13 @@ if(INCLUDE_WASM_SPEC_TESTS) continue() endif() execute_process( - COMMAND env SKIP_PRETTIER=${SKIP_PRETTIER} bash ${SOURCE_DIR}/Meta/generate-libwasm-spec-test.sh "${PATH}" "${SOURCE_DIR}/Userland/Libraries/LibWasm/Tests/Spec" "${NAME}" "${WASM_SPEC_TEST_PATH}") + COMMAND env SKIP_PRETTIER=${SKIP_PRETTIER} bash ${SerenityOS_SOURCE_DIR}/Meta/generate-libwasm-spec-test.sh "${PATH}" "${CMAKE_CURRENT_BINARY_DIR}/Tests/Spec" "${NAME}" "${WASM_SPEC_TEST_PATH}") endforeach() file(REMOVE testsuite-main) endif() + + # FIXME: Install these into usr/Tests/LibWasm + if (SERENITYOS) + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Tests/ DESTINATION home/anon/Tests/wasm-tests) + endif() endif() diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 40c9e4e4f73..3e1785b15c5 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -65,7 +65,6 @@ if (ENABLE_FUZZERS OR CMAKE_CROSSCOMPILING) set(BUILD_LAGOM_TOOLS OFF) endif() -include(wasm_spec_tests) include(flac_spec_tests) include(lagom_compile_options) @@ -665,13 +664,12 @@ if (BUILD_LAGOM) ../../Tests/LibWasm/test-wasm.cpp ../../Userland/Libraries/LibTest/JavaScriptTestRunnerMain.cpp) target_link_libraries(test-wasm LibCore LibTest LibWasm LibJS) + # FIXME: Don't require passing test-common.js path if you only want to pass a custom Test root path add_test( NAME WasmParser - COMMAND test-wasm --show-progress=false + COMMAND test-wasm --show-progress=false ${CMAKE_CURRENT_BINARY_DIR}/Userland/Libraries/LibWasm/Tests ${SERENITY_PROJECT_ROOT}/Userland/Libraries/LibJS/Tests/test-common.js ) - set_tests_properties(WasmParser PROPERTIES - ENVIRONMENT SERENITY_SOURCE_DIR=${SERENITY_PROJECT_ROOT} - SKIP_RETURN_CODE 1) + set_tests_properties(WasmParser PROPERTIES SKIP_RETURN_CODE 1) # Tests that are not LibTest based # Shell diff --git a/Meta/build-root-filesystem.sh b/Meta/build-root-filesystem.sh index 6acb2150ac9..242af08bde2 100755 --- a/Meta/build-root-filesystem.sh +++ b/Meta/build-root-filesystem.sh @@ -154,7 +154,8 @@ mkdir -p mnt/home/anon mkdir -p mnt/home/anon/Desktop mkdir -p mnt/home/anon/Downloads mkdir -p mnt/home/nona -rm -fr mnt/home/anon/Tests/js-tests mnt/home/anon/Tests/web-tests mnt/home/anon/Tests/cpp-tests mnt/home/anon/Tests/wasm-tests +# FIXME: Handle these test copies using CMake install rules +rm -fr mnt/home/anon/Tests/js-tests mnt/home/anon/Tests/web-tests mnt/home/anon/Tests/cpp-tests mkdir -p mnt/home/anon/Tests/cpp-tests/ cp "$SERENITY_SOURCE_DIR"/README.md mnt/home/anon/ cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests mnt/home/anon/Tests/js-tests @@ -162,7 +163,6 @@ cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWeb/Tests mnt/home/anon/Tests cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibCodeComprehension/Cpp/Tests mnt/home/anon/Tests/cpp-tests/comprehension cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibCpp/Tests/parser mnt/home/anon/Tests/cpp-tests/parser cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibCpp/Tests/preprocessor mnt/home/anon/Tests/cpp-tests/preprocessor -cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWasm/Tests mnt/home/anon/Tests/wasm-tests cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests/test-common.js mnt/home/anon/Tests/wasm-tests cp -r "$SERENITY_SOURCE_DIR"/Userland/Applications/Spreadsheet/Tests mnt/home/anon/Tests/spreadsheet-tests diff --git a/Userland/Libraries/LibWasm/CMakeLists.txt b/Userland/Libraries/LibWasm/CMakeLists.txt index cb004515cdc..f86cbe7e005 100644 --- a/Userland/Libraries/LibWasm/CMakeLists.txt +++ b/Userland/Libraries/LibWasm/CMakeLists.txt @@ -9,3 +9,7 @@ set(SOURCES serenity_lib(LibWasm wasm) target_link_libraries(LibWasm PRIVATE LibCore) + +# FIXME: Install these into usr/Tests/LibWasm +include(wasm_spec_tests) +install(DIRECTORY Tests/ DESTINATION home/anon/Tests/wasm-tests)