
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.cw2c2는 모듈을 별도의 C 파일로 컴파일할 수 있습니다. 이는 대규모 모듈을 컴파일할 때와 리소스가 제한된 호스트에서 권장됩니다.
예를 들어, module.wasm (및 module.h )을 각각 100개의 함수가 있는 여러 파일로 컴파일하려면 다음을 수행하세요.
./w2c2 -f 100 module.wasm module.cw2c2가 스레딩 지원으로 빌드되면 모듈을 병렬로 컴파일할 수 있습니다. 기본적으로 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-testsargs_getargs_sizes_getclock_res_getclock_time_getenviron_getenviron_sizes_getfd_advisefd_allocatefd_closefd_datasyncfd_fdstat_getfd_fdstat_set_flagsfd_fdstat_set_rightsfd_filestat_getfd_filestat_set_sizefd_filestat_set_timesfd_preadfd_prestat_getfd_prestat_dir_namefd_pwritefd_readfd_readdirfd_renumberfd_seekfd_syncfd_tellfd_writepath_create_directorypath_filestat_getpath_filestat_set_timespath_linkpath_openpath_readlinkpath_remove_directorypath_renamepath_symlinkpath_unlink_filepoll_oneoffproc_exitrandom_getsched_yieldsock_recvsock_sendsock_shutdownthread-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