mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Import WASM interpreter
* include wabt(WebAssembly Binary Toolkit) interpreter * https://github.com/WebAssembly/wabt * release version 1.0.20 Signed-off-by: HyukWoo Park <hyukwoo.park@samsung.com>
This commit is contained in:
parent
b7638a3b51
commit
74bf9c3233
6 changed files with 218 additions and 0 deletions
24
.github/workflows/es-actions.yml
vendored
24
.github/workflows/es-actions.yml
vendored
|
|
@ -115,6 +115,30 @@ jobs:
|
|||
rm $HOME/Escargot-cache/cache_list
|
||||
$RUNNER --arch=x86_64 --engine="$GITHUB_WORKSPACE/out/codecache/x64/escargot" sunspider-js
|
||||
|
||||
wasm_test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install Packages
|
||||
run: sudo apt-get install ninja-build gcc-multilib g++-multilib
|
||||
- name: Install ICU
|
||||
run: |
|
||||
wget http://mirrors.kernel.org/ubuntu/pool/main/i/icu/libicu-dev_66.1-2ubuntu2_i386.deb
|
||||
dpkg -X libicu-dev_66.1-2ubuntu2_i386.deb $GITHUB_WORKSPACE/icu32
|
||||
- name: Build x86
|
||||
env:
|
||||
BUILD_OPTIONS: -DESCARGOT_HOST=linux -DESCARGOT_ARCH=x86 -DESCARGOT_MODE=debug -DESCARGOT_LIBICU_SUPPORT_WITH_DLOPEN=OFF -DENABLE_WASM=ON -DESCARGOT_OUTPUT=shell_test -GNinja
|
||||
run: |
|
||||
CXXFLAGS=" -I$GITHUB_WORKSPACE/icu32/usr/include" LDFLAGS=" -L$GITHUB_WORKSPACE/icu32/usr/lib/i386-linux-gnu" cmake -H. -Bout/wasm/x86 $BUILD_OPTIONS
|
||||
ninja -Cout/wasm/x86
|
||||
- name: Build x64
|
||||
env:
|
||||
BUILD_OPTIONS: -DESCARGOT_HOST=linux -DESCARGOT_ARCH=x64 -DESCARGOT_MODE=debug -DENABLE_WASM=ON -DESCARGOT_OUTPUT=shell_test -GNinja
|
||||
run: |
|
||||
cmake -H. -Bout/wasm/x64 $BUILD_OPTIONS
|
||||
ninja -Cout/wasm/x64
|
||||
|
||||
coverity_scan:
|
||||
if: github.event_name == 'push'
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -38,3 +38,4 @@ cmake_install.cmake
|
|||
#etc
|
||||
.vscode
|
||||
EscargotInfo.h
|
||||
third_party/wasm/config.h
|
||||
|
|
|
|||
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -24,3 +24,6 @@
|
|||
[submodule "third_party/googletest"]
|
||||
path = third_party/googletest
|
||||
url = https://github.com/google/googletest.git
|
||||
[submodule "third_party/wasm/wabt"]
|
||||
path = third_party/wasm/wabt
|
||||
url = https://github.com/WebAssembly/wabt
|
||||
|
|
|
|||
|
|
@ -129,6 +129,16 @@ ADD_SUBDIRECTORY (third_party/runtime_icu_binder)
|
|||
|
||||
SET (ESCARGOT_LIBRARIES ${ESCARGOT_LIBRARIES} runtime-icu-binder-static)
|
||||
|
||||
# WASM (wabt)
|
||||
IF (ENABLE_WASM)
|
||||
SET (WASM_CXX_FLAGS ${ESCARGOT_GCUTIL_CFLAGS}) # we can share arch flags with gcutil
|
||||
SET (WASM_ARCH ${ESCARGOT_ARCH})
|
||||
|
||||
ADD_SUBDIRECTORY (third_party/wasm)
|
||||
|
||||
SET (ESCARGOT_LIBRARIES ${ESCARGOT_LIBRARIES} wasm)
|
||||
ENDIF()
|
||||
|
||||
# BUILD
|
||||
IF (${ESCARGOT_OUTPUT} MATCHES "shell")
|
||||
ADD_EXECUTABLE (${ESCARGOT_TARGET} ${ESCARGOT_SRC_LIST})
|
||||
|
|
|
|||
179
third_party/wasm/CMakeLists.txt
vendored
Normal file
179
third_party/wasm/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
PROJECT(WASM)
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)
|
||||
|
||||
if (NOT "${CMAKE_PROJECT_VERSION}")
|
||||
set(CMAKE_PROJECT_VERSION "1.0.19")
|
||||
endif ()
|
||||
|
||||
if (MSVC)
|
||||
set(COMPILER_IS_CLANG 0)
|
||||
set(COMPILER_IS_GNU 0)
|
||||
set(COMPILER_IS_MSVC 1)
|
||||
elseif (CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set(COMPILER_IS_CLANG 1)
|
||||
set(COMPILER_IS_GNU 0)
|
||||
set(COMPILER_IS_MSVC 0)
|
||||
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
set(COMPILER_IS_CLANG 0)
|
||||
set(COMPILER_IS_GNU 1)
|
||||
set(COMPILER_IS_MSVC 0)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||
set(COMPILER_IS_CLANG 1)
|
||||
set(COMPILER_IS_GNU 0)
|
||||
set(COMPILER_IS_MSVC 0)
|
||||
else ()
|
||||
set(COMPILER_IS_CLANG 0)
|
||||
set(COMPILER_IS_GNU 0)
|
||||
set(COMPILER_IS_MSVC 0)
|
||||
endif ()
|
||||
|
||||
include(CheckIncludeFile)
|
||||
include(CheckSymbolExists)
|
||||
check_include_file("alloca.h" HAVE_ALLOCA_H)
|
||||
check_include_file("unistd.h" HAVE_UNISTD_H)
|
||||
check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
|
||||
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
|
||||
|
||||
include(CheckTypeSize)
|
||||
check_type_size(ssize_t SSIZE_T)
|
||||
check_type_size(size_t SIZEOF_SIZE_T)
|
||||
|
||||
set(WABT_ROOT ${PROJECT_SOURCE_DIR}/wabt)
|
||||
configure_file(${WABT_ROOT}/src/config.h.in ${PROJECT_SOURCE_DIR}/config.h)
|
||||
|
||||
include_directories(${WABT_ROOT} ${PROJECT_SOURCE_DIR})
|
||||
|
||||
set(WASM_SRC
|
||||
wabt/src/apply-names.h
|
||||
wabt/src/apply-names.cc
|
||||
wabt/src/binary.h
|
||||
wabt/src/binary.cc
|
||||
wabt/src/binary-reader.h
|
||||
wabt/src/binary-reader.cc
|
||||
wabt/src/binary-reader-ir.h
|
||||
wabt/src/binary-reader-ir.cc
|
||||
wabt/src/binary-reader-logging.h
|
||||
wabt/src/binary-reader-logging.cc
|
||||
wabt/src/binary-writer.h
|
||||
wabt/src/binary-writer.cc
|
||||
wabt/src/binary-writer-spec.h
|
||||
wabt/src/binary-writer-spec.cc
|
||||
wabt/src/binding-hash.h
|
||||
wabt/src/binding-hash.cc
|
||||
wabt/src/color.h
|
||||
wabt/src/color.cc
|
||||
wabt/src/common.h
|
||||
wabt/src/common.cc
|
||||
wabt/src/config.h
|
||||
wabt/src/config.cc
|
||||
wabt/src/decompiler.h
|
||||
wabt/src/decompiler-ast.h
|
||||
wabt/src/decompiler-ls.h
|
||||
wabt/src/decompiler-naming.h
|
||||
wabt/src/decompiler.cc
|
||||
wabt/src/error-formatter.h
|
||||
wabt/src/error-formatter.cc
|
||||
wabt/src/expr-visitor.h
|
||||
wabt/src/expr-visitor.cc
|
||||
wabt/src/feature.h
|
||||
wabt/src/feature.cc
|
||||
wabt/src/filenames.h
|
||||
wabt/src/filenames.cc
|
||||
wabt/src/generate-names.h
|
||||
wabt/src/generate-names.cc
|
||||
wabt/src/hash-util.h
|
||||
wabt/src/hash-util.cc
|
||||
wabt/src/ir.h
|
||||
wabt/src/ir.cc
|
||||
wabt/src/ir-util.h
|
||||
wabt/src/ir-util.cc
|
||||
wabt/src/leb128.h
|
||||
wabt/src/leb128.cc
|
||||
wabt/src/lexer-source.h
|
||||
wabt/src/lexer-source.cc
|
||||
wabt/src/lexer-source-line-finder.h
|
||||
wabt/src/lexer-source-line-finder.cc
|
||||
wabt/src/literal.h
|
||||
wabt/src/literal.cc
|
||||
wabt/src/opcode.h
|
||||
wabt/src/opcode.cc
|
||||
wabt/src/opcode-code-table.h
|
||||
wabt/src/opcode-code-table.c
|
||||
wabt/src/option-parser.h
|
||||
wabt/src/option-parser.cc
|
||||
wabt/src/resolve-names.h
|
||||
wabt/src/resolve-names.cc
|
||||
wabt/src/shared-validator.h
|
||||
wabt/src/shared-validator.cc
|
||||
wabt/src/stream.h
|
||||
wabt/src/stream.cc
|
||||
wabt/src/string-view.h
|
||||
wabt/src/string-view.cc
|
||||
wabt/src/token.h
|
||||
wabt/src/token.cc
|
||||
wabt/src/tracing.h
|
||||
wabt/src/tracing.cc
|
||||
wabt/src/type.h
|
||||
wabt/src/type-checker.h
|
||||
wabt/src/type-checker.cc
|
||||
wabt/src/utf8.h
|
||||
wabt/src/utf8.cc
|
||||
wabt/src/validator.h
|
||||
wabt/src/validator.cc
|
||||
wabt/src/wast-lexer.h
|
||||
wabt/src/wast-lexer.cc
|
||||
wabt/src/wast-parser.h
|
||||
wabt/src/wast-parser.cc
|
||||
wabt/src/wat-writer.h
|
||||
wabt/src/wat-writer.cc
|
||||
|
||||
wabt/src/interp/binary-reader-interp.h
|
||||
wabt/src/interp/binary-reader-interp.cc
|
||||
wabt/src/interp/interp.h
|
||||
wabt/src/interp/interp.cc
|
||||
wabt/src/interp/interp-inl.h
|
||||
wabt/src/interp/interp-math.h
|
||||
wabt/src/interp/interp-util.h
|
||||
wabt/src/interp/interp-util.cc
|
||||
wabt/src/interp/istream.h
|
||||
wabt/src/interp/istream.cc
|
||||
)
|
||||
|
||||
# disable -Wpointer-arith: this is a GCC extension, and doesn't work in MSVC.
|
||||
set(WASM_CXX_FLAGS_INTERNAL
|
||||
-Wall -Wextra -Wno-unused-parameter -Wpointer-arith
|
||||
-g -Wuninitialized -std=c++11 -Wold-style-cast -fno-exceptions
|
||||
)
|
||||
|
||||
# Need to define __STDC_*_MACROS because C99 specifies that C++ shouldn't
|
||||
# define format (e.g. PRIu64) or limit (e.g. UINT32_MAX) macros without the
|
||||
# definition, and some libcs (e.g. glibc2.17 and earlier) follow that.
|
||||
set(WASM_CXX_FLAGS_INTERNAL ${WASM_CXX_FLAGS_INTERNAL} -D__STDC_LIMIT_MACROS=1 -D__STDC_FORMAT_MACROS=1)
|
||||
|
||||
if (COMPILER_IS_GNU)
|
||||
# disable -Wclobbered: it seems to be guessing incorrectly about a local
|
||||
# variable being clobbered by longjmp.
|
||||
set(WASM_CXX_FLAGS_INTERNAL ${WASM_CXX_FLAGS_INTERNAL} -Wno-clobbered)
|
||||
endif ()
|
||||
|
||||
if (WASM_ARCH STREQUAL "x86")
|
||||
# wasm doesn't allow for x87 floating point math
|
||||
set(WASM_CXX_FLAGS_INTERNAL ${WASM_CXX_FLAGS_INTERNAL} -msse2 -mfpmath=sse)
|
||||
endif ()
|
||||
|
||||
|
||||
add_compile_options(${WASM_CXX_FLAGS_INTERNAL})
|
||||
add_compile_options(${WASM_CXX_FLAGS})
|
||||
set(WASM_CFLAGS_FROM_ENV $ENV{CFLAGS})
|
||||
separate_arguments(WASM_CFLAGS_FROM_ENV)
|
||||
add_compile_options(${WASM_CFLAGS_FROM_ENV})
|
||||
|
||||
add_library(wasm STATIC ${WASM_SRC})
|
||||
|
||||
if (WASM_SPEC_TEST)
|
||||
set(WASM_EXE_TARGET spectest-interp)
|
||||
add_executable(${WASM_EXE_TARGET} wabt/src/tools/spectest-interp.cc)
|
||||
target_link_libraries(${WASM_EXE_TARGET} wasm)
|
||||
set_property(TARGET ${WASM_EXE_TARGET} PROPERTY CXX_STANDARD 11)
|
||||
set_property(TARGET ${WASM_EXE_TARGET} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
endif ()
|
||||
1
third_party/wasm/wabt
vendored
Submodule
1
third_party/wasm/wabt
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 830d32a41449278cacb0bf17530618d47c43340b
|
||||
Loading…
Add table
Add a link
Reference in a new issue