Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 33 additions & 11 deletions .github/actions/install-wasi-sdk-wabt/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ inputs:
os:
description: "Operating system to install on (ubuntu, macos)"
required: true
# Default 29 because addr2line.py (samples/debug-tools*) requires
# llvm-symbolizer / llvm-addr2line, which only ship in wasi-sdk 29+.
# Callers can pin a different version when they have a specific need.
wasi_sdk_version:
description: "wasi-sdk major version to install (e.g. '25', '29', '33')"
required: false
default: "29"

runs:
using: "composite"
Expand All @@ -29,13 +36,17 @@ runs:
- name: Set up wasi-sdk and wabt on Ubuntu
if: ${{ startsWith(inputs.os, 'ubuntu') }}
shell: bash
env:
SDK_VER: ${{ inputs.wasi_sdk_version }}
run: |
SDK_DIR="wasi-sdk-${SDK_VER}.0-x86_64-linux"
echo "Downloading wasi-sdk for Ubuntu..."
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-x86_64-linux.tar.gz
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga \
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${SDK_VER}/${SDK_DIR}.tar.gz"

echo "Extracting wasi-sdk..."
sudo tar -xf wasi-sdk.tar.gz
sudo ln -sf wasi-sdk-25.0-x86_64-linux/ wasi-sdk
sudo ln -sf "${SDK_DIR}/" wasi-sdk

echo "Downloading wabt for Ubuntu..."
sudo wget -O wabt.tar.gz --progress=dot:giga https://github.com/WebAssembly/wabt/releases/download/1.0.37/wabt-1.0.37-ubuntu-20.04.tar.gz
Expand All @@ -47,19 +58,23 @@ runs:
/opt/wasi-sdk/bin/clang --version
/opt/wabt/bin/wasm-interp --version

echo "::notice::wasi-sdk-25 and wabt-1.0.37 installed on ubuntu"
echo "::notice::wasi-sdk-${SDK_VER} and wabt-1.0.37 installed on ubuntu"
working-directory: /opt

- name: Set up wasi-sdk and wabt on macOS on Intel
if: ${{ inputs.os == 'macos-15-intel' }}
shell: bash
env:
SDK_VER: ${{ inputs.wasi_sdk_version }}
run: |
SDK_DIR="wasi-sdk-${SDK_VER}.0-x86_64-macos"
echo "Downloading wasi-sdk for macOS on Intel..."
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-x86_64-macos.tar.gz
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga \
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${SDK_VER}/${SDK_DIR}.tar.gz"

echo "Extracting wasi-sdk..."
sudo tar -xf wasi-sdk.tar.gz
sudo ln -sf wasi-sdk-25.0-x86_64-macos wasi-sdk
sudo ln -sf "${SDK_DIR}" wasi-sdk

echo "Downloading wabt for macOS on Intel..."
sudo wget -O wabt.tar.gz --progress=dot:giga https://github.com/WebAssembly/wabt/releases/download/1.0.36/wabt-1.0.36-macos-12.tar.gz
Expand All @@ -71,19 +86,23 @@ runs:
/opt/wasi-sdk/bin/clang --version
/opt/wabt/bin/wasm-interp --version

echo "::notice::wasi-sdk-25 and wabt-1.0.36 installed on ${{ inputs.os }}"
echo "::notice::wasi-sdk-${SDK_VER} and wabt-1.0.36 installed on ${{ inputs.os }}"
working-directory: /opt

- name: Set up wasi-sdk and wabt on macOS on ARM
if: ${{ inputs.os == 'macos-15' }}
shell: bash
env:
SDK_VER: ${{ inputs.wasi_sdk_version }}
run: |
SDK_DIR="wasi-sdk-${SDK_VER}.0-arm64-macos"
echo "Downloading wasi-sdk for macOS on ARM..."
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-arm64-macos.tar.gz
sudo wget -O wasi-sdk.tar.gz --progress=dot:giga \
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${SDK_VER}/${SDK_DIR}.tar.gz"

echo "Extracting wasi-sdk..."
sudo tar -xf wasi-sdk.tar.gz
sudo ln -sf wasi-sdk-25.0-arm64-macos wasi-sdk
sudo ln -sf "${SDK_DIR}" wasi-sdk

echo "Downloading wabt for macOS on ARM..."
sudo wget -O wabt.tar.gz --progress=dot:giga https://github.com/WebAssembly/wabt/releases/download/1.0.37/wabt-1.0.37-macos-14.tar.gz
Expand All @@ -95,20 +114,23 @@ runs:
/opt/wasi-sdk/bin/clang --version
/opt/wabt/bin/wasm-interp --version

echo "::notice::wasi-sdk-25 and wabt-1.0.37 installed on ${{ inputs.os }}"
echo "::notice::wasi-sdk-${SDK_VER} and wabt-1.0.37 installed on ${{ inputs.os }}"
working-directory: /opt

- name: Set up wasi-sdk and wabt on Windows
if: ${{ startsWith(inputs.os, 'windows') }}
shell: bash
env:
SDK_VER: ${{ inputs.wasi_sdk_version }}
run: |
choco install -y wget

mkdir -p /opt/wasi-sdk
mkdir -p /opt/wabt

echo "Downloading wasi-sdk for Windows..."
wget -O wasi-sdk.tar.gz --progress=dot:giga https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-x86_64-windows.tar.gz
wget -O wasi-sdk.tar.gz --progress=dot:giga \
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${SDK_VER}/wasi-sdk-${SDK_VER}.0-x86_64-windows.tar.gz"

echo "Extracting wasi-sdk..."
tar --strip-components=1 -xf wasi-sdk.tar.gz -C /opt/wasi-sdk
Expand All @@ -122,4 +144,4 @@ runs:
/opt/wasi-sdk/bin/clang --version
/opt/wabt/bin/wasm-interp --version

echo "::notice::wasi-sdk-25 and wabt-1.0.37 installed on Windows"
echo "::notice::wasi-sdk-${SDK_VER} and wabt-1.0.37 installed on Windows"
26 changes: 23 additions & 3 deletions .github/workflows/compilation_on_android_ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -602,9 +602,29 @@ jobs:
mkdir build && cd build
cmake ..
cmake --build . --config Debug --parallel 4
./iwasm wasm-apps/trap.wasm | grep "#" > call_stack.txt
./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt
bash -x ../symbolicate.sh
cd ..
./verify.sh

- name: Install binaryen (for debug-tools-optimized)
run: |
sudo mkdir -p /opt/binaryen
curl -L https://github.com/WebAssembly/binaryen/releases/download/version_117/binaryen-version_117-x86_64-linux.tar.gz \
| sudo tar xz -C /opt/binaryen --strip-components=1
/opt/binaryen/bin/wasm-opt --version

- name: Build Sample [debug-tools-optimized]
run: |
cd samples/debug-tools-optimized
for INTERP_FLAG in "" "-DUSE_FAST_INTERP=ON"; do
rm -rf build && mkdir build && cd build
cmake .. $INTERP_FLAG
make -j$(nproc)
cd ..
./verify.sh oob wasm
./verify.sh oob aot
./verify.sh stackoverflow wasm
./verify.sh stackoverflow aot
done

- name: Build Sample [native-stack-overflow]
run: |
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/compilation_on_macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -413,9 +413,8 @@ jobs:
mkdir build && cd build
cmake ..
cmake --build . --config Debug --parallel 4
./iwasm wasm-apps/trap.wasm | grep "#" > call_stack.txt
./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt
bash -x ../symbolicate.sh
cd ..
./verify.sh

- name: Build Sample [native-stack-overflow]
run: |
Expand Down
37 changes: 37 additions & 0 deletions .github/workflows/nightly_run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,43 @@ jobs:
./build.sh --aot
./run.sh --aot

addr2line_tests_multi_sdk:
runs-on: ubuntu-22.04
steps:
- name: checkout
uses: actions/checkout@v6.0.2

- name: Install wasi-sdk 29.0
run: |
sudo mkdir -p /opt/wasi-sdk-29.0-x86_64-linux
curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-29/wasi-sdk-29.0-x86_64-linux.tar.gz \
| sudo tar xz -C /opt/wasi-sdk-29.0-x86_64-linux --strip-components=1

- name: Install wasi-sdk 33.0
run: |
sudo mkdir -p /opt/wasi-sdk-33.0-x86_64-linux
curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz \
| sudo tar xz -C /opt/wasi-sdk-33.0-x86_64-linux --strip-components=1

- name: Install wabt
run: |
sudo mkdir -p /opt/wabt
curl -L https://github.com/WebAssembly/wabt/releases/download/1.0.34/wabt-1.0.34-ubuntu.tar.gz \
| sudo tar xz -C /opt/wabt --strip-components=1

- name: Install binaryen
run: |
sudo mkdir -p /opt/binaryen
curl -L https://github.com/WebAssembly/binaryen/releases/download/version_117/binaryen-version_117-x86_64-linux.tar.gz \
| sudo tar xz -C /opt/binaryen --strip-components=1

- name: Install pytest
run: pip install pytest

- name: Run addr2line.py tests across both SDKs
working-directory: test-tools/addr2line/tests
run: ./run_tests.sh --multi-sdk -v

test:
needs: [build_iwasm, build_llvm_libraries_on_ubuntu, build_wamrc]
runs-on: ${{ matrix.os }}
Expand Down
89 changes: 89 additions & 0 deletions samples/debug-tools-optimized/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Copyright (C) 2026 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

cmake_minimum_required(VERSION 3.14)

include(CheckPIESupported)

project(debug_tools_optimized_sample)

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake)

# WAMR features switch
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
if (APPLE)
add_definitions(-DBH_PLATFORM_DARWIN)
endif ()

set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")

if (NOT DEFINED WAMR_BUILD_TARGET)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
set (WAMR_BUILD_TARGET "AARCH64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
set (WAMR_BUILD_TARGET "RISCV64")
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
set (WAMR_BUILD_TARGET "X86_64")
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
set (WAMR_BUILD_TARGET "X86_32")
else ()
message(SEND_ERROR "Unsupported build target platform!")
endif ()
endif ()

if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Release)
endif ()

option(USE_FAST_INTERP "Build iwasm with fast interpreter instead of classic interpreter" OFF)

set(WAMR_BUILD_INTERP 1)
set(WAMR_BUILD_LIBC_WASI 1)
if (USE_FAST_INTERP)
set(WAMR_BUILD_FAST_INTERP 1)
message(STATUS "Building iwasm with fast interpreter (USE_FAST_INTERP=ON)")
else ()
set(WAMR_BUILD_FAST_INTERP 0)
message(STATUS "Building iwasm with classic interpreter (default; pass -DUSE_FAST_INTERP=ON for fast-interp)")
endif ()
set(WAMR_BUILD_AOT 1)
set(WAMR_BUILD_DUMP_CALL_STACK 1)
# Disable hardware bound checks so OOB memory traps go through the
# interpreter's exception path (which calls SYNC_ALL_TO_FRAME and captures
# frame_ip), instead of the SIGSEGV signal-handler-and-longjmp path
# (which doesn't update frame->ip). Capturing frame_ip is what lets
# addr2line.py recover inline frames for the OOB sample.
set(WAMR_DISABLE_HW_BOUND_CHECK 1)

if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang"))
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
endif ()

set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)

add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE})

################ wasm application ################
include(ExternalProject)

ExternalProject_Add(wasm-apps
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wasm-apps"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -S ${CMAKE_CURRENT_SOURCE_DIR}/wasm-apps -B build
BUILD_COMMAND ${CMAKE_COMMAND} --build build
INSTALL_COMMAND ${CMAKE_COMMAND} --install build --prefix ${CMAKE_CURRENT_BINARY_DIR}
)

################ wamr runtime ################
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)

set (RUNTIME_SOURCE_ALL
${CMAKE_CURRENT_LIST_DIR}/../../product-mini/platforms/linux/main.c
${UNCOMMON_SHARED_SOURCE}
)
add_executable (iwasm ${RUNTIME_SOURCE_ALL})
check_pie_supported()
set_target_properties (iwasm PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_link_libraries(iwasm vmlib -lm -ldl)
add_dependencies(iwasm wasm-apps)
Loading
Loading