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)