wasm_spec_tests.cmake 1.8 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #
  2. # Download and compile the WebAssembly testsuite into the WebAssembly binary format
  3. #
  4. if(INCLUDE_WASM_SPEC_TESTS)
  5. set(WASM_SPEC_TEST_GZ_URL https://github.com/WebAssembly/testsuite/archive/refs/heads/main.tar.gz)
  6. set(WASM_SPEC_TEST_GZ_PATH ${CMAKE_BINARY_DIR}/wasm-spec-testsuite.tar.gz CACHE PATH "")
  7. set(WASM_SPEC_TEST_PATH ${CMAKE_CURRENT_BINARY_DIR}/Tests/Fixtures/SpecTests CACHE PATH "")
  8. download_file(${WASM_SPEC_TEST_GZ_URL} ${WASM_SPEC_TEST_GZ_PATH})
  9. set(SKIP_PRETTIER false)
  10. if (WASM_SPEC_TEST_SKIP_FORMATTING)
  11. set(SKIP_PRETTIER true)
  12. endif()
  13. find_program(WAT2WASM wat2wasm REQUIRED)
  14. find_program(PRETTIER prettier OPTIONAL)
  15. if (NOT SKIP_PRETTIER AND PRETTIER EQUAL "PRETTIER-NOTFOUND")
  16. message(FATAL_ERROR "Prettier required to format Wasm spec tests! Install prettier or set WASM_SPEC_TEST_SKIP_FORMATTING to ON")
  17. endif()
  18. if(EXISTS ${WASM_SPEC_TEST_GZ_PATH} AND NOT EXISTS ${WASM_SPEC_TEST_PATH}/const_0.wasm)
  19. message(STATUS "Extracting the WebAssembly testsuite from ${WASM_SPEC_TEST_GZ_PATH}...")
  20. extract_path("${CMAKE_CURRENT_BINARY_DIR}" "${WASM_SPEC_TEST_GZ_PATH}" "testsuite-main/*.wast" "${WASM_SPEC_TEST_PATH}")
  21. file(MAKE_DIRECTORY ${WASM_SPEC_TEST_PATH})
  22. file(GLOB WASM_TESTS "${CMAKE_CURRENT_BINARY_DIR}/testsuite-main/*.wast")
  23. foreach(PATH ${WASM_TESTS})
  24. get_filename_component(NAME ${PATH} NAME_WLE)
  25. message(STATUS "Generating test cases for WebAssembly test ${NAME}...")
  26. execute_process(
  27. 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}")
  28. endforeach()
  29. file(REMOVE testsuite-main)
  30. endif()
  31. endif()