mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2026-01-21 16:49:12 +00:00
* Implement the first few SIMD opcodes for fast interpreter (v128.const, v128.any_true) (#3818) Tested on the following code: ``` (module (import "wasi_snapshot_preview1" "proc_exit" (func $proc_exit (param i32))) (memory (export "memory") 1) ;; WASI entry point (func $main (export "_start") v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 v128.any_true if unreachable end v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 v128.any_true i32.const 0 i32.eq if unreachable end i32.const 0 call $proc_exit ) ) ``` * implement POP_V128() This is to simplify the simd implementation for fast interpreter * Add all SIMD operations into wasm_interp_fast switch * Add V128 comparison operations Tested using ``` (module (import "wasi_snapshot_preview1" "proc_exit" (func $proc_exit (param i32))) (memory (export "memory") 1) (func $assert_true (param v128) local.get 0 v128.any_true i32.eqz if unreachable end ) (func $main (export "_start") ;; Test v128.not v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 v128.not v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 i8x16.eq call $assert_true ;; Test v128.and v128.const i8x16 255 255 255 255 0 0 0 0 255 255 255 255 0 0 0 0 v128.const i8x16 255 255 0 0 255 255 0 0 255 255 0 0 255 255 0 0 v128.and v128.const i8x16 255 255 0 0 0 0 0 0 255 255 0 0 0 0 0 0 i8x16.eq call $assert_true ;; Test v128.andnot v128.const i8x16 255 255 255 255 0 0 0 0 255 255 255 255 0 0 0 0 v128.const i8x16 255 255 0 0 255 255 0 0 255 255 0 0 255 255 0 0 v128.andnot v128.const i8x16 0 0 255 255 0 0 0 0 0 0 255 255 0 0 0 0 i8x16.eq call $assert_true ;; Test v128.or v128.const i8x16 255 255 0 0 0 0 255 255 255 255 0 0 0 0 255 0 v128.const i8x16 0 0 255 255 255 255 0 0 0 0 255 255 255 255 0 0 v128.or v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 i8x16.eq call $assert_true ;; Test v128.xor v128.const i8x16 255 255 0 0 255 255 0 0 255 255 0 0 255 255 0 0 v128.const i8x16 255 255 255 255 0 0 0 0 255 255 255 255 0 0 0 0 v128.xor v128.const i8x16 0 0 255 255 255 255 0 0 0 0 255 255 255 255 0 0 i8x16.eq call $assert_true i32.const 0 call $proc_exit ) ) ``` * Add first NEON SIMD opcode implementations to fast interpreter (#3859) Add some implementations of SIMD opcodes using NEON instructions. Tested using: ```wast (module (import "wasi_snapshot_preview1" "proc_exit" (func $proc_exit (param i32))) (memory (export "memory") 1) (func $assert_true (param v128) local.get 0 v128.any_true i32.eqz if unreachable end ) (func $main (export "_start") i32.const 0 i32.const 32 memory.grow drop i32.const 0 v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 v128.store i32.const 0 v128.load v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 i8x16.eq call $assert_true i32.const 16 v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 v128.store i32.const 16 v128.load v128.const i8x16 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 i8x16.eq call $assert_true i32.const 0 v128.load v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 i8x16.eq call $assert_true drop i32.const 0 i32.const 1 memory.grow drop i32.const 0 i64.const 0x7F80FF017E02FE80 i64.store i32.const 0 v128.load8x8_s v128.const i16x8 127 -128 -1 1 126 2 -2 -128 i16x8.eq call $assert_true i32.const 0 i64.const 0x80FE027E01FF807F i64.store i32.const 0 v128.load8x8_u v128.const i16x8 128 254 2 126 1 255 128 127 i16x8.eq call $assert_true i32.const 0 i64.const 0x8000FFFE7FFF0001 i64.store i32.const 0 v128.load16x4_s v128.const i32x4 -32768 -2 32767 1 i32x4.eq call $assert_true i32.const 0 i64.const 0x8000FFFE7FFF0001 i64.store i32.const 0 v128.load16x4_u v128.const i32x4 32768 65534 32767 1 i32x4.eq call $assert_true i32.const 0 i64.const 0x8000000000000001 i64.store i32.const 0 v128.load32x2_s v128.const i64x2 -2147483648 1 i64x2.eq call $assert_true i32.const 0 i64.const 0x8000000000000001 i64.store i32.const 0 v128.load32x2_u v128.const i64x2 2147483648 1 i64x2.eq call $assert_true call $proc_exit ) ) ``` * Emit imm for lane extract and replace (#3906) * Fix replacement value not being correct (#3919) * Implement load lanes opcodes for wasm (#3942) * Implement final SIMD opcodes: store lane (#4001) * Fix load/store (#4054) * Correctly use unsigned functions (#4055) * implement local and function calls for v128 in the fast interpreter * Fix splat opcodes, add V128 handling in preserve_referenced_local and reserve_block_ret * Fix incorrect memory overflow values + SIMD ifdefs * Fix load/load_splat macros * correct endif wasm loader * Update core/iwasm/interpreter/wasm_opcode.h * Fix spec tests when WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS is 0 * Resolve merge conflicts arising from main -> dev/simd_for_interp and implement fast interpreter const offset loader support for V128 * Enable SIMDe tests on CI * Document WAMR_BUILD_LIB_SIMDE --------- Co-authored-by: James Marsh <mrshnja@amazon.co.uk> Co-authored-by: jammar1 <108334558+jammar1@users.noreply.github.com> Co-authored-by: Maks Litskevich <makslit@amazon.com> Co-authored-by: Marcin Kolny <marcin.kolny@gmail.com> Co-authored-by: Wenyong Huang <wenyong.huang@intel.com>
926 lines
35 KiB
YAML
926 lines
35 KiB
YAML
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
name: compilation on android, ubuntu-22.04
|
|
|
|
on:
|
|
# will be triggered on PR events
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
paths:
|
|
- ".github/workflows/build_llvm_libraries.yml"
|
|
- ".github/workflows/compilation_on_android_ubuntu.yml"
|
|
- "build-scripts/**"
|
|
- "core/**"
|
|
- "!core/deps/**"
|
|
- "product-mini/**"
|
|
- "samples/**"
|
|
- "!samples/workload/**"
|
|
- "tests/wamr-test-suites/**"
|
|
- "tests/unit/**"
|
|
- "wamr-compiler/**"
|
|
- "test-tools/wamr-ide/**"
|
|
# will be triggered on push events
|
|
push:
|
|
branches:
|
|
- main
|
|
- "dev/**"
|
|
paths:
|
|
- ".github/workflows/build_llvm_libraries.yml"
|
|
- ".github/workflows/compilation_on_android_ubuntu.yml"
|
|
- "build-scripts/**"
|
|
- "core/**"
|
|
- "!core/deps/**"
|
|
- "product-mini/**"
|
|
- "samples/**"
|
|
- "!samples/workload/**"
|
|
- "tests/wamr-test-suites/**"
|
|
- "tests/unit/**"
|
|
- "wamr-compiler/**"
|
|
- "test-tools/wamr-ide/**"
|
|
# allow to be triggered manually
|
|
workflow_dispatch:
|
|
|
|
# Cancel any in-flight jobs for the same PR/branch so there's only one active
|
|
# at a time
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
# For BUILD
|
|
AOT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
|
|
CLASSIC_INTERP_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=0 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
|
|
FAST_INTERP_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=0 -DWAMR_BUILD_FAST_INTERP=1 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
|
|
FAST_JIT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
|
|
LLVM_LAZY_JIT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=1"
|
|
LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0"
|
|
MULTI_TIER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=1"
|
|
# For Spec Test
|
|
DEFAULT_TEST_OPTIONS: "-s spec -b -P"
|
|
MULTI_MODULES_TEST_OPTIONS: "-s spec -b -M -P"
|
|
SIMD_TEST_OPTIONS: "-s spec -b -S -P"
|
|
THREADS_TEST_OPTIONS: "-s spec -b -p -P"
|
|
X86_32_TARGET_TEST_OPTIONS: "-m x86_32 -P"
|
|
WASI_TEST_OPTIONS: "-s wasi_certification -w"
|
|
WAMR_COMPILER_TEST_OPTIONS: "-s wamr_compiler -S -b -P"
|
|
GC_TEST_OPTIONS: "-s spec -G -b -P"
|
|
MEMORY64_TEST_OPTIONS: "-s spec -W -b -P"
|
|
MULTI_MEMORY_TEST_OPTIONS: "-s spec -E -b -P"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
check_version_h:
|
|
permissions:
|
|
contents: read
|
|
actions: write
|
|
uses: ./.github/workflows/check_version_h.yml
|
|
|
|
build_llvm_libraries_on_ubuntu_2204:
|
|
permissions:
|
|
contents: read
|
|
actions: write
|
|
uses: ./.github/workflows/build_llvm_libraries.yml
|
|
with:
|
|
os: "ubuntu-22.04"
|
|
arch: "X86"
|
|
|
|
build_wamrc:
|
|
needs:
|
|
[build_llvm_libraries_on_ubuntu_2204]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
# since jobs.id can't contain the dot character
|
|
# it is hard to use `format` to assemble the cache key
|
|
- name: Get LLVM libraries
|
|
id: retrieve_llvm_libs
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
|
|
- name: Quit if cache miss
|
|
if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true'
|
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
|
|
|
- name: Build wamrc
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: wamr-compiler
|
|
|
|
build_iwasm:
|
|
needs:
|
|
[build_llvm_libraries_on_ubuntu_2204]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
make_options_run_mode: [
|
|
# Running mode
|
|
$AOT_BUILD_OPTIONS,
|
|
$CLASSIC_INTERP_BUILD_OPTIONS,
|
|
$FAST_INTERP_BUILD_OPTIONS,
|
|
$FAST_JIT_BUILD_OPTIONS,
|
|
$LLVM_LAZY_JIT_BUILD_OPTIONS,
|
|
$LLVM_EAGER_JIT_BUILD_OPTIONS,
|
|
$MULTI_TIER_JIT_BUILD_OPTIONS,
|
|
]
|
|
make_options_feature: [
|
|
# Features
|
|
"-DWAMR_BUILD_CUSTOM_NAME_SECTION=1",
|
|
"-DWAMR_BUILD_DEBUG_AOT=1",
|
|
"-DWAMR_BUILD_DEBUG_INTERP=1",
|
|
"-DWAMR_BUILD_DUMP_CALL_STACK=1",
|
|
"-DWAMR_BUILD_LIB_PTHREAD=1",
|
|
"-DWAMR_BUILD_LIB_WASI_THREADS=1",
|
|
"-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1",
|
|
"-DWAMR_BUILD_MINI_LOADER=1",
|
|
"-DWAMR_BUILD_MEMORY_PROFILING=1",
|
|
"-DWAMR_BUILD_MULTI_MODULE=1",
|
|
"-DWAMR_BUILD_PERF_PROFILING=1",
|
|
"-DWAMR_BUILD_REF_TYPES=1",
|
|
"-DWAMR_BUILD_SIMD=1",
|
|
"-DWAMR_BUILD_LIB_SIMDE=1",
|
|
"-DWAMR_BUILD_TAIL_CALL=1",
|
|
"-DWAMR_DISABLE_HW_BOUND_CHECK=1",
|
|
"-DWAMR_BUILD_MEMORY64=1",
|
|
"-DWAMR_BUILD_MULTI_MEMORY=1",
|
|
"-DWAMR_BUILD_SHARED=1",
|
|
]
|
|
os: [ubuntu-22.04]
|
|
platform: [android, linux]
|
|
exclude:
|
|
# incompatible feature and platform
|
|
# incompatible mode and feature
|
|
# MULTI_MODULE only on INTERP mode and AOT mode
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
|
|
# SIMD only on JIT/AOT/fast interpreter mode
|
|
- make_options_run_mode: $CLASSIC_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_SIMD=1"
|
|
# DEBUG_INTERP only on CLASSIC INTERP mode
|
|
- make_options_run_mode: $AOT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
- make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
|
|
# DEBUG_AOT only on JIT/AOT mode
|
|
- make_options_run_mode: $CLASSIC_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
- make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
# TODO: DEBUG_AOT on JIT
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
|
|
# MINI_LOADER only on INTERP mode
|
|
- make_options_run_mode: $AOT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
|
# Memory64 only on CLASSIC INTERP and AOT mode, and only on 64-bit platform
|
|
- make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
platform: android
|
|
- make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
# Multi memory only on CLASSIC INTERP mode, and only on 64-bit platform
|
|
- make_options_feature: "-DWAMR_BUILD_MEMORY64=1"
|
|
platform: android
|
|
- make_options_run_mode: $AOT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
- make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
make_options_feature: "-DWAMR_BUILD_MULTI_MEMORY=1"
|
|
# Fast-JIT and Multi-Tier-JIT mode don't support android
|
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
|
platform: android
|
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
|
platform: android
|
|
# LLVM JIT pre-built binary wasn't compiled by Android NDK
|
|
# and isn't available for android
|
|
- make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
|
|
platform: android
|
|
- make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
|
|
platform: android
|
|
# android does not support WAMR_BUILD_SHARED in its CMakeLists.txt.
|
|
- make_options_feature: "-DWAMR_BUILD_SHARED=1"
|
|
platform: android
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
# only download llvm cache when needed
|
|
- name: Get LLVM libraries
|
|
id: retrieve_llvm_libs
|
|
if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
|
|
- name: Quit if cache miss
|
|
if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
|
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
|
|
|
- name: Build iwasm for linux
|
|
if: matrix.platform == 'linux'
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: product-mini/platforms/${{ matrix.platform }}
|
|
|
|
- name: Build iwasm for android
|
|
if: matrix.platform == 'android'
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }} \
|
|
-DWAMR_BUILD_TARGET=X86_64
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: product-mini/platforms/${{ matrix.platform }}
|
|
|
|
build_unit_tests:
|
|
needs:
|
|
[
|
|
build_llvm_libraries_on_ubuntu_2204,
|
|
build_wamrc
|
|
]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
wasi_sdk_release:
|
|
[
|
|
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
|
|
]
|
|
wabt_release:
|
|
[
|
|
"https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz",
|
|
]
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Get LLVM libraries
|
|
id: retrieve_llvm_libs
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
|
|
- name: Quit if cache miss
|
|
if: (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
|
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
|
|
|
- name: download and install wasi-sdk
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wasi_sdk_release }}
|
|
sudo tar -xzf wasi-sdk-*.tar.gz
|
|
sudo ln -sf wasi-sdk-20.0 wasi-sdk
|
|
|
|
- name: download and install wabt
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wabt_release }}
|
|
sudo tar -xzf wabt-1.0.31-*.tar.gz
|
|
sudo mv wabt-1.0.31 wabt
|
|
|
|
- name: Build wamrc
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: wamr-compiler
|
|
|
|
- name: Build and run unit tests
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Release --parallel 4
|
|
ctest
|
|
working-directory: tests/unit
|
|
|
|
build_samples_wasm_c_api:
|
|
needs:
|
|
[
|
|
build_iwasm,
|
|
build_llvm_libraries_on_ubuntu_2204,
|
|
build_wamrc,
|
|
]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
make_options: [
|
|
# Running mode
|
|
$AOT_BUILD_OPTIONS,
|
|
$CLASSIC_INTERP_BUILD_OPTIONS,
|
|
$FAST_INTERP_BUILD_OPTIONS,
|
|
$FAST_JIT_BUILD_OPTIONS,
|
|
$LLVM_LAZY_JIT_BUILD_OPTIONS,
|
|
$LLVM_EAGER_JIT_BUILD_OPTIONS,
|
|
$MULTI_TIER_JIT_BUILD_OPTIONS,
|
|
]
|
|
os: [ubuntu-22.04]
|
|
wasi_sdk_release:
|
|
[
|
|
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
|
|
]
|
|
wabt_release:
|
|
[
|
|
"https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz",
|
|
]
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Get LLVM libraries
|
|
id: retrieve_llvm_libs
|
|
if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS'))
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
|
|
- name: Quit if cache miss
|
|
if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
|
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
|
|
|
- name: download and install wabt
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wabt_release }}
|
|
sudo tar -xzf wabt-1.0.31-*.tar.gz
|
|
sudo mv wabt-1.0.31 wabt
|
|
|
|
- name: Build wamrc
|
|
if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS'))
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: wamr-compiler
|
|
|
|
- name: Build Sample [wasm-c-api]
|
|
run: |
|
|
VERBOSE=1
|
|
cmake -S . -B build ${{ matrix.make_options }}
|
|
cmake --build build --config Debug --parallel 4
|
|
ctest --test-dir build --output-on-failure
|
|
working-directory: samples/wasm-c-api
|
|
|
|
build_samples_others:
|
|
needs:
|
|
[
|
|
build_iwasm,
|
|
build_llvm_libraries_on_ubuntu_2204,
|
|
build_wamrc,
|
|
]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
wasi_sdk_release:
|
|
[
|
|
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
|
|
]
|
|
wabt_release:
|
|
[
|
|
"https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz",
|
|
]
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: download and install wasi-sdk
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wasi_sdk_release }}
|
|
sudo tar -xzf wasi-sdk-*.tar.gz
|
|
sudo ln -sf wasi-sdk-20.0 wasi-sdk
|
|
|
|
- name: download and install wabt
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wabt_release }}
|
|
sudo tar -xzf wabt-1.0.31-*.tar.gz
|
|
sudo ln -sf wabt-1.0.31 wabt
|
|
- name: Get LLVM libraries
|
|
id: retrieve_llvm_libs
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
- name: Build wamrc
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Release --parallel 4
|
|
working-directory: wamr-compiler
|
|
- name: Build Sample [basic]
|
|
run: |
|
|
cd samples/basic
|
|
./build.sh
|
|
./run.sh
|
|
|
|
- name: Build Sample [file]
|
|
run: |
|
|
cd samples/file
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./src/iwasm -f wasm-app/file.wasm -d .
|
|
|
|
- name: Build Sample [multi-thread]
|
|
run: |
|
|
cd samples/multi-thread
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./iwasm wasm-apps/test.wasm
|
|
|
|
- name: Build Sample [multi-module]
|
|
run: |
|
|
cd samples/multi-module
|
|
mkdir build && cd build
|
|
cmake .. -DWAMR_BUILD_AOT=1
|
|
cmake --build . --config Debug --parallel 4
|
|
./multi_module mC.wasm
|
|
./multi_module mC.aot
|
|
|
|
- name: Build Sample [spawn-thread]
|
|
run: |
|
|
cd samples/spawn-thread
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./spawn_thread
|
|
|
|
- name: Build Sample [ref-types]
|
|
run: |
|
|
cd samples/ref-types
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./hello
|
|
|
|
- name: Build Sample [wasi-threads]
|
|
run: |
|
|
cd samples/wasi-threads
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./iwasm wasm-apps/no_pthread.wasm
|
|
|
|
- name: Build Sample [shared-module]
|
|
run: |
|
|
cd samples/shared-module
|
|
./build.sh
|
|
./run.sh
|
|
|
|
- name: Build Sample [terminate]
|
|
run: |
|
|
cd samples/terminate
|
|
./build.sh
|
|
./run.sh
|
|
|
|
- name: Build Sample [debug-tools]
|
|
run: |
|
|
cd samples/debug-tools
|
|
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
|
|
|
|
- name: Build Sample [native-stack-overflow]
|
|
run: |
|
|
cd samples/native-stack-overflow
|
|
./build.sh
|
|
./run.sh test1
|
|
./run.sh test2
|
|
|
|
- name: Build Sample [shared-heap]
|
|
run: |
|
|
cd samples/shared-heap
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug --parallel 4
|
|
./shared_heap_test
|
|
./shared_heap_test --aot
|
|
|
|
test:
|
|
needs:
|
|
[
|
|
build_iwasm,
|
|
build_llvm_libraries_on_ubuntu_2204,
|
|
build_wamrc,
|
|
]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
running_mode:
|
|
[
|
|
"classic-interp",
|
|
"fast-interp",
|
|
"jit",
|
|
"aot",
|
|
"fast-jit",
|
|
"multi-tier-jit",
|
|
]
|
|
test_option:
|
|
[
|
|
$DEFAULT_TEST_OPTIONS,
|
|
$MULTI_MODULES_TEST_OPTIONS,
|
|
$SIMD_TEST_OPTIONS,
|
|
$THREADS_TEST_OPTIONS,
|
|
$WASI_TEST_OPTIONS,
|
|
$GC_TEST_OPTIONS,
|
|
$MEMORY64_TEST_OPTIONS,
|
|
$MULTI_MEMORY_TEST_OPTIONS,
|
|
]
|
|
wasi_sdk_release:
|
|
[
|
|
"https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
|
|
]
|
|
include:
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
ubuntu_version: "22.04"
|
|
- os: ubuntu-22.04
|
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
|
running_mode: aot
|
|
test_option: $WAMR_COMPILER_TEST_OPTIONS
|
|
exclude:
|
|
# incompatible modes and features
|
|
# classic-interp doesn't support simd
|
|
- running_mode: "classic-interp"
|
|
test_option: $SIMD_TEST_OPTIONS
|
|
# llvm jit doesn't support multi module
|
|
- running_mode: "jit"
|
|
test_option: $MULTI_MODULES_TEST_OPTIONS
|
|
# fast-jit doesn't support multi module, simd
|
|
- running_mode: "fast-jit"
|
|
test_option: $MULTI_MODULES_TEST_OPTIONS
|
|
- running_mode: "fast-jit"
|
|
test_option: $SIMD_TEST_OPTIONS
|
|
# multi-tier-jit doesn't support multi module, simd
|
|
- running_mode: "multi-tier-jit"
|
|
test_option: $MULTI_MODULES_TEST_OPTIONS
|
|
- running_mode: "multi-tier-jit"
|
|
test_option: $SIMD_TEST_OPTIONS
|
|
# fast-jit and multi-tier-jit don't support GC
|
|
- running_mode: "fast-jit"
|
|
test_option: $GC_TEST_OPTIONS
|
|
- running_mode: "multi-tier-jit"
|
|
test_option: $GC_TEST_OPTIONS
|
|
# fast-interp, fast-jit, llvm-jit, multi-tier-jit don't support Memory64
|
|
- running_mode: "fast-interp"
|
|
test_option: $MEMORY64_TEST_OPTIONS
|
|
- running_mode: "fast-jit"
|
|
test_option: $MEMORY64_TEST_OPTIONS
|
|
- running_mode: "jit"
|
|
test_option: $MEMORY64_TEST_OPTIONS
|
|
- running_mode: "multi-tier-jit"
|
|
test_option: $MEMORY64_TEST_OPTIONS
|
|
# aot, fast-interp, fast-jit, llvm-jit, multi-tier-jit don't support Multi Memory
|
|
- running_mode: "aot"
|
|
test_option: $MULTI_MEMORY_TEST_OPTIONS
|
|
- running_mode: "fast-interp"
|
|
test_option: $MULTI_MEMORY_TEST_OPTIONS
|
|
- running_mode: "fast-jit"
|
|
test_option: $MULTI_MEMORY_TEST_OPTIONS
|
|
- running_mode: "jit"
|
|
test_option: $MULTI_MEMORY_TEST_OPTIONS
|
|
- running_mode: "multi-tier-jit"
|
|
test_option: $MULTI_MEMORY_TEST_OPTIONS
|
|
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set-up OCaml
|
|
uses: ocaml/setup-ocaml@v3
|
|
if: matrix.test_option == '$GC_TEST_OPTIONS'
|
|
with:
|
|
ocaml-compiler: 4.13
|
|
|
|
- name: Set-up Ocamlbuild
|
|
if: matrix.test_option == '$GC_TEST_OPTIONS'
|
|
run: opam install ocamlbuild dune menhir
|
|
|
|
- name: download and install wasi-sdk
|
|
if: matrix.test_option == '$WASI_TEST_OPTIONS'
|
|
run: |
|
|
cd /opt
|
|
sudo wget ${{ matrix.wasi_sdk_release }}
|
|
sudo tar -xzf wasi-sdk-*.tar.gz
|
|
sudo mv wasi-sdk-20.0 wasi-sdk
|
|
|
|
# It is a temporary solution until new wasi-sdk that includes bug fixes is released
|
|
- name: build wasi-libc from source
|
|
if: matrix.test_option == '$WASI_TEST_OPTIONS'
|
|
run: |
|
|
git clone https://github.com/WebAssembly/wasi-libc
|
|
cd wasi-libc
|
|
make -j AR=/opt/wasi-sdk/bin/llvm-ar NM=/opt/wasi-sdk/bin/llvm-nm CC=/opt/wasi-sdk/bin/clang THREAD_MODEL=posix
|
|
echo "SYSROOT_PATH=$PWD/sysroot" >> $GITHUB_ENV
|
|
|
|
- name: set env variable(if llvm are used)
|
|
if: matrix.running_mode == 'aot' || matrix.running_mode == 'jit' || matrix.running_mode == 'multi-tier-jit'
|
|
run: echo "USE_LLVM=true" >> $GITHUB_ENV
|
|
|
|
- name: set env variable(if x86_32 test needed)
|
|
if: >
|
|
((matrix.test_option == '$DEFAULT_TEST_OPTIONS' || matrix.test_option == '$THREADS_TEST_OPTIONS'
|
|
|| matrix.test_option == '$WASI_TEST_OPTIONS' || matrix.test_option == '$GC_TEST_OPTIONS')
|
|
&& matrix.test_option != '$MEMORY64_TEST_OPTIONS'
|
|
&& matrix.running_mode != 'fast-jit' && matrix.running_mode != 'jit' && matrix.running_mode != 'multi-tier-jit')
|
|
run: echo "TEST_ON_X86_32=true" >> $GITHUB_ENV
|
|
|
|
#only download llvm libraries in jit and aot mode
|
|
- name: Get LLVM libraries
|
|
if: env.USE_LLVM == 'true'
|
|
id: retrieve_llvm_libs
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./core/deps/llvm/build/bin
|
|
./core/deps/llvm/build/include
|
|
./core/deps/llvm/build/lib
|
|
./core/deps/llvm/build/libexec
|
|
./core/deps/llvm/build/share
|
|
key: ${{ matrix.llvm_cache_key }}
|
|
|
|
- name: Quit if cache miss
|
|
if: env.USE_LLVM == 'true' && steps.retrieve_llvm_libs.outputs.cache-hit != 'true'
|
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
|
|
|
- name: install jq JSON processor
|
|
if: matrix.running_mode == 'aot' && matrix.test_option == '$WASI_TEST_OPTIONS'
|
|
run: sudo apt-get update && sudo apt install -y jq
|
|
|
|
- name: Build WASI thread tests
|
|
if: matrix.test_option == '$WASI_TEST_OPTIONS'
|
|
run: bash build.sh --sysroot "$SYSROOT_PATH"
|
|
working-directory: ./core/iwasm/libraries/lib-wasi-threads/test/
|
|
|
|
- name: build socket api tests
|
|
if: matrix.test_option == '$WASI_TEST_OPTIONS'
|
|
run: bash build.sh
|
|
working-directory: ./core/iwasm/libraries/lib-socket/test/
|
|
|
|
- name: run tests
|
|
timeout-minutes: 30
|
|
if: matrix.test_option != '$GC_TEST_OPTIONS'
|
|
run: ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
|
|
working-directory: ./tests/wamr-test-suites
|
|
|
|
- name: run gc tests
|
|
timeout-minutes: 20
|
|
if: matrix.test_option == '$GC_TEST_OPTIONS'
|
|
run: |
|
|
eval $(opam env)
|
|
./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
|
|
working-directory: ./tests/wamr-test-suites
|
|
|
|
#only install x32 support libraries when to run x86_32 cases
|
|
- name: install x32 support libraries
|
|
if: env.TEST_ON_X86_32 == 'true'
|
|
run:
|
|
# Add another apt repository as some packages cannot
|
|
# be downloaded with the github default repository
|
|
sudo curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc &&
|
|
sudo apt-add-repository https://packages.microsoft.com/ubuntu/${{ matrix.ubuntu_version }}/prod &&
|
|
sudo apt-get update &&
|
|
sudo apt install -y g++-multilib lib32gcc-9-dev
|
|
|
|
- name: run tests x86_32
|
|
timeout-minutes: 30
|
|
if: env.TEST_ON_X86_32 == 'true' && matrix.test_option != '$GC_TEST_OPTIONS'
|
|
run: ./test_wamr.sh ${{ env.X86_32_TARGET_TEST_OPTIONS }} ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
|
|
working-directory: ./tests/wamr-test-suites
|
|
|
|
- name: run gc tests x86_32
|
|
timeout-minutes: 20
|
|
if: env.TEST_ON_X86_32 == 'true' && matrix.test_option == '$GC_TEST_OPTIONS'
|
|
run: |
|
|
eval $(opam env)
|
|
./test_wamr.sh ${{ env.X86_32_TARGET_TEST_OPTIONS }} ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
|
|
working-directory: ./tests/wamr-test-suites
|
|
|
|
test-wamr-ide:
|
|
needs:
|
|
[
|
|
build_iwasm
|
|
]
|
|
runs-on: ubuntu-22.04
|
|
env:
|
|
PYTHON_VERSION: '3.10'
|
|
PYTHON_UBUNTU_STANDALONE_BUILD: https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
|
|
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: install dependencies
|
|
run: |
|
|
rustup target add wasm32-wasip1
|
|
sudo apt update && sudo apt-get install -y lld ninja-build
|
|
npm install
|
|
working-directory: test-tools/wamr-ide/VSCode-Extension
|
|
|
|
- name: code style check
|
|
run: |
|
|
npm install --save-dev prettier
|
|
npm run prettier-format-check
|
|
working-directory: test-tools/wamr-ide/VSCode-Extension
|
|
|
|
- name: build iwasm with source debugging feature
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DWAMR_BUILD_DEBUG_INTERP=1 -DWAMR_BUILD_REF_TYPES=1
|
|
make
|
|
working-directory: product-mini/platforms/linux
|
|
|
|
- name: Cache LLDB
|
|
id: cache-lldb
|
|
uses: actions/cache@v4
|
|
env:
|
|
cache-name: cache-lldb-vscode
|
|
with:
|
|
path: test-tools/wamr-ide/VSCode-Extension/resource/debug/linux
|
|
key: ${{ env.cache-name }}-${{ hashFiles('build-scripts/lldb_wasm.patch') }}-${{ env.PYTHON_UBUNTU_STANDALONE_BUILD }}
|
|
|
|
- if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
|
|
name: get stand-alone python ubuntu
|
|
run: |
|
|
wget ${{ env.PYTHON_UBUNTU_STANDALONE_BUILD }} -O python.tar.gz
|
|
tar -xvf python.tar.gz
|
|
working-directory: core/deps
|
|
|
|
- if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
|
|
name: download llvm
|
|
run: |
|
|
wget https://github.com/llvm/llvm-project/archive/1f27fe6128769f00197925c3b8f6abb9d0e5cd2e.zip
|
|
unzip -q 1f27fe6128769f00197925c3b8f6abb9d0e5cd2e.zip
|
|
mv llvm-project-1f27fe6128769f00197925c3b8f6abb9d0e5cd2e llvm-project
|
|
working-directory: core/deps
|
|
|
|
- if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
|
|
name: apply wamr patch
|
|
run: |
|
|
git init
|
|
git config user.email "action@github.com"
|
|
git config user.name "github action"
|
|
git apply ../../../build-scripts/lldb_wasm.patch
|
|
working-directory: core/deps/llvm-project
|
|
|
|
- if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
|
|
name: build lldb ubuntu
|
|
run: |
|
|
echo "start to build lldb..."
|
|
mkdir -p wamr-lldb
|
|
cmake -S ./llvm -B build \
|
|
-G Ninja \
|
|
-DCMAKE_INSTALL_PREFIX=../wamr-lldb \
|
|
-DCMAKE_BUILD_TYPE:STRING="Release" \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
-DLLVM_ENABLE_PROJECTS="clang;lldb" \
|
|
-DLLVM_TARGETS_TO_BUILD:STRING="X86;WebAssembly" \
|
|
-DLLVM_BUILD_BENCHMARKS:BOOL=OFF \
|
|
-DLLVM_BUILD_DOCS:BOOL=OFF \
|
|
-DLLVM_BUILD_EXAMPLES:BOOL=OFF \
|
|
-DLLVM_BUILD_LLVM_DYLIB:BOOL=OFF \
|
|
-DLLVM_BUILD_TESTS:BOOL=OFF \
|
|
-DLLVM_INCLUDE_BENCHMARKS:BOOL=OFF \
|
|
-DLLVM_INCLUDE_DOCS:BOOL=OFF \
|
|
-DLLVM_INCLUDE_EXAMPLES:BOOL=OFF \
|
|
-DLLVM_INCLUDE_TESTS:BOOL=OFF \
|
|
-DLLVM_ENABLE_BINDINGS:BOOL=OFF \
|
|
-DLLVM_ENABLE_LIBXML2:BOOL=ON \
|
|
-DLLVM_ENABLE_LLD:BOOL=ON \
|
|
-DLLDB_ENABLE_PYTHON:BOOL=ON \
|
|
-DLLDB_EMBED_PYTHON_HOME=ON \
|
|
-DLLDB_PYTHON_HOME=.. \
|
|
-DLLDB_PYTHON_RELATIVE_PATH=lib/lldb-python \
|
|
-DPython3_EXECUTABLE="$(pwd)/../python/bin/python${{ env.PYTHON_VERSION }}"
|
|
cmake --build build --target lldb install --parallel $(nproc)
|
|
working-directory: core/deps/llvm-project
|
|
|
|
- if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
|
|
name: copy lldb to extension folder
|
|
run: |
|
|
mkdir -p bin
|
|
mkdir -p lib
|
|
cp ../../../../../../core/deps/llvm-project/lldb/tools/lldb-vscode/package.json ./
|
|
cp -r ../../../../../../core/deps/llvm-project/lldb/tools/lldb-vscode/syntaxes/ ./
|
|
cp ../../../../../../core/deps/llvm-project/build/bin/lldb* bin
|
|
cp ../../../../../../core/deps/llvm-project/build/lib/liblldb*.so lib
|
|
cp ../../../../../../core/deps/llvm-project/build/lib/liblldb*.so.* lib
|
|
cp -R ../../../../../../core/deps/llvm-project/build/lib/lldb-python lib
|
|
cp -R ../../../../../../core/deps/python/lib/python* lib
|
|
cp ../../../../../../core/deps/python/lib/libpython${{ env.PYTHON_VERSION }}.so.1.0 lib
|
|
working-directory: test-tools/wamr-ide/VSCode-Extension/resource/debug/linux
|
|
|
|
- name: run tests
|
|
timeout-minutes: 5
|
|
run: xvfb-run npm run test
|
|
working-directory: test-tools/wamr-ide/VSCode-Extension
|