WebAssembly 모듈을 이식 가능한 C로 변환합니다. wabt의 wasm2c에서 영감을 받았습니다.
파악하기 어려운 범용 바이너리인 WebAssembly를 향한 작업:
↗ different
source code → WebAssembly → C89 → OSes,
(C++, Rust, ...) ↘ CPUs
names
사용자 정의 섹션에 제공되는 경우).debug_line
사용자 정의 섹션에 제공되는 경우 소스 라인 매핑. libdwarf가 설치되어 있어야 합니다. 아래 지침을 참조하세요.시스템이 CMake 2.8.12 이상에서 지원되는 경우 CMake를 사용하여 기능을 감지하는 것이 좋습니다. CMake가 없는 시스템에서는 Make를 사용할 수도 있습니다.
cd w2c2
cmake -B build
cmake --build build
cd wasi
cmake -B build
cmake --build build
예를 들어, module.wasm
module.c
(및 module.h
)로 컴파일하려면 다음을 수행하세요.
./w2c2 module.wasm module.c
w2c2는 모듈을 별도의 C 파일로 컴파일할 수 있습니다. 이는 대규모 모듈을 컴파일할 때와 리소스가 제한된 호스트에서 권장됩니다.
예를 들어, module.wasm
(및 module.h
)을 각각 100개의 함수가 있는 여러 파일로 컴파일하려면 다음을 수행하세요.
./w2c2 -f 100 module.wasm module.c
w2c2가 스레딩 지원으로 빌드되면 모듈을 병렬로 컴파일할 수 있습니다. 기본적으로 w2c2는 사용 가능한 CPU 코어 수만큼 작업자 스레드를 생성합니다.
작업자 스레드 수를 수동으로 지정하려면 -t
플래그를 사용하여 숫자를 전달하십시오.
예를 들어, 2개의 스레드를 사용하여 컴파일하려면 다음을 수행하십시오.
./w2c2 -t 2 module.wasm module.c
코어마크:
cd examples/coremark
make
./coremark
Python 3 및 wabt( wast2json
의 경우)가 필요합니다.
cd tests
make gen
make run-tests
args_get
args_sizes_get
clock_res_get
clock_time_get
environ_get
environ_sizes_get
fd_advise
fd_allocate
fd_close
fd_datasync
fd_fdstat_get
fd_fdstat_set_flags
fd_fdstat_set_rights
fd_filestat_get
fd_filestat_set_size
fd_filestat_set_times
fd_pread
fd_prestat_get
fd_prestat_dir_name
fd_pwrite
fd_read
fd_readdir
fd_renumber
fd_seek
fd_sync
fd_tell
fd_write
path_create_directory
path_filestat_get
path_filestat_set_times
path_link
path_open
path_readlink
path_remove_directory
path_rename
path_symlink
path_unlink_file
poll_oneoff
proc_exit
random_get
sched_yield
sock_recv
sock_send
sock_shutdown
thread-spawn
(스레드 제안에서) 디버그 릴리스를 빌드하려면 BUILD=debug
전달하여 make
.
새니타이저를 활성화하려면 make
에 전달된 SANITIZERS
변수에 이를 나열하십시오(예: make BUILD=debug SANITIZERS="base clang address thread"
.
base
정의되지 않은 행동 소독기를 활성화합니다.clang
Clang 전용 새니타이저를 활성화합니다.thread
Thread Sanitizer를 활성화합니다.address
Address Sanitizer를 활성화합니다. Linux에서는 libdwarf-dev
와 같은 패키지를 설치해 보세요.
macOS에서는 Homebrew를 사용하고 libdwarf
설치할 수 있습니다( dwarf
아님!)
w2c2는 현재 기본적으로 v0.4.2 이상의 libdwarf API를 사용합니다. v0.6.0도 성공적으로 작동하도록 테스트되었습니다.
<0.4.2 버전을 사용하는 경우 -DDWARF_OLD=1
CMake에 전달해 보세요. 버전 20200114가 작동하는 것으로 알려져 있습니다.
버전 0.1.1부터 libdwarf는 CMake가 자동으로 감지할 수 있는 pkg-config 파일과 함께 제공됩니다.
CMake가 libdwarf를 자동으로 찾을 수 없으면 다음 메시지가 표시됩니다.
-- Checking for module 'libdwarf'
-- No package 'libdwarf' found
이 경우에도 다음 옵션의 변형을 전달하여 필요한 정보를 수동으로 제공할 수 있습니다.
-DDWARF_FOUND=1 -DDWARF_LIBRARIES=-ldwarf -DDWARF_LIBRARY_DIRS=/usr/lib -DDWARF_INCLUDE_DIRS=/usr/include/libdwarf