mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-10-28 03:42:35 +00:00
Merge pull request #3251 from bytecodealliance/main
Merge branch main into dev/memory64
This commit is contained in:
commit
06ce060591
5
.github/ISSUE_TEMPLATE/blank_issue.md
vendored
Normal file
5
.github/ISSUE_TEMPLATE/blank_issue.md
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
name: Blank Issue
|
||||||
|
about: Create a blank issue.
|
||||||
|
title: ''
|
||||||
|
---
|
||||||
28
.github/ISSUE_TEMPLATE/improvement.md
vendored
Normal file
28
.github/ISSUE_TEMPLATE/improvement.md
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
name: Improvement
|
||||||
|
about: A feature request or code improvement.
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
Thanks for filing a feature request! Please fill out the TODOs below.
|
||||||
|
|
||||||
|
#### Feature
|
||||||
|
|
||||||
|
TODO: Brief description of the feature/improvement you'd like to see in WAMR
|
||||||
|
|
||||||
|
#### Benefit
|
||||||
|
|
||||||
|
TODO: What is the value of adding this in WAMR? What problems does it solve?
|
||||||
|
|
||||||
|
#### Implementation
|
||||||
|
|
||||||
|
TODO: Do you have an implementation plan, and/or ideas for data structures or
|
||||||
|
algorithms to use?
|
||||||
|
|
||||||
|
#### Alternatives
|
||||||
|
|
||||||
|
TODO: What are the alternative implementation approaches or alternative ways to
|
||||||
|
solve the problem that this feature would solve? How do these alternatives
|
||||||
|
compare to this proposal?
|
||||||
36
.github/ISSUE_TEMPLATE/report_bug.md
vendored
Normal file
36
.github/ISSUE_TEMPLATE/report_bug.md
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
name: WAMR bug or defect report
|
||||||
|
about: Report a bug or defect in WAMR
|
||||||
|
title: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
Thanks for filing a bug or defect report! Please fill out the TODOs below.
|
||||||
|
|
||||||
|
### Subject of the issue
|
||||||
|
|
||||||
|
Describe the bug or defect here.
|
||||||
|
|
||||||
|
### Test case
|
||||||
|
|
||||||
|
Upload the related wasm file, wast file or the source files if you can.
|
||||||
|
|
||||||
|
### Your environment
|
||||||
|
|
||||||
|
* Host OS
|
||||||
|
* WAMR version, platform, cpu architecture, running mode, etc.
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
Tell us how to reproduce this bug or defect.
|
||||||
|
|
||||||
|
### Expected behavior
|
||||||
|
|
||||||
|
Tell us what should happen
|
||||||
|
|
||||||
|
### Actual behavior
|
||||||
|
|
||||||
|
Tell us what happens instead
|
||||||
|
|
||||||
|
### Extra Info
|
||||||
|
|
||||||
|
Anything else you'd like to add?
|
||||||
113
.github/workflows/codeql.yml
vendored
Normal file
113
.github/workflows/codeql.yml
vendored
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
#pull_request:
|
||||||
|
# types:
|
||||||
|
# - opened
|
||||||
|
# branches: '*'
|
||||||
|
#push:
|
||||||
|
# branches: [ "main" ]
|
||||||
|
# midnight UTC
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
# allow to be triggered manually
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||||
|
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||||
|
# - https://gh.io/supported-runners-and-hardware-resources
|
||||||
|
# - https://gh.io/using-larger-runners
|
||||||
|
# Consider using larger runners for possible analysis time improvements.
|
||||||
|
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-20.04' }}
|
||||||
|
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'cpp' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
|
||||||
|
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
queries: security-and-quality
|
||||||
|
|
||||||
|
# Command-line programs to run using the OS shell.
|
||||||
|
# See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
||||||
|
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||||
|
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
./.github/workflows/codeql_buildscript.sh
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
|
with:
|
||||||
|
category: "/language:${{matrix.language}}"
|
||||||
|
upload: false
|
||||||
|
id: step1
|
||||||
|
|
||||||
|
# Filter out rules with low severity or high false positve rate
|
||||||
|
# Also filter out warnings in third-party code
|
||||||
|
- name: Filter out unwanted errors and warnings
|
||||||
|
uses: advanced-security/filter-sarif@v1
|
||||||
|
with:
|
||||||
|
patterns: |
|
||||||
|
-**:cpp/path-injection
|
||||||
|
-**:cpp/world-writable-file-creation
|
||||||
|
-**:cpp/poorly-documented-function
|
||||||
|
-**:cpp/potentially-dangerous-function
|
||||||
|
-**:cpp/use-of-goto
|
||||||
|
-**:cpp/integer-multiplication-cast-to-long
|
||||||
|
-**:cpp/comparison-with-wider-type
|
||||||
|
-**:cpp/leap-year/*
|
||||||
|
-**:cpp/ambiguously-signed-bit-field
|
||||||
|
-**:cpp/suspicious-pointer-scaling
|
||||||
|
-**:cpp/suspicious-pointer-scaling-void
|
||||||
|
-**:cpp/unsigned-comparison-zero
|
||||||
|
-**/cmake*/Modules/**
|
||||||
|
input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||||
|
output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||||
|
|
||||||
|
- name: Upload CodeQL results to code scanning
|
||||||
|
uses: github/codeql-action/upload-sarif@v2
|
||||||
|
with:
|
||||||
|
sarif_file: ${{ steps.step1.outputs.sarif-output }}
|
||||||
|
category: "/language:${{matrix.language}}"
|
||||||
|
|
||||||
|
- name: Upload CodeQL results as an artifact
|
||||||
|
if: success() || failure()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: codeql-results
|
||||||
|
path: ${{ steps.step1.outputs.sarif-output }}
|
||||||
|
retention-days: 10
|
||||||
|
|
||||||
|
- name: Fail if an error is found
|
||||||
|
run: |
|
||||||
|
./.github/workflows/codeql_fail_on_error.py \
|
||||||
|
${{ steps.step1.outputs.sarif-output }}/cpp.sarif
|
||||||
257
.github/workflows/codeql_buildscript.sh
vendored
Executable file
257
.github/workflows/codeql_buildscript.sh
vendored
Executable file
|
|
@ -0,0 +1,257 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
|
||||||
|
sudo apt install -y build-essential cmake g++-multilib libgcc-11-dev lib32gcc-11-dev ccache ninja-build ccache
|
||||||
|
|
||||||
|
WAMR_DIR=${PWD}
|
||||||
|
|
||||||
|
# TODO: use pre-built llvm binary to build wamrc to
|
||||||
|
# avoid static code analysing for llvm
|
||||||
|
: '
|
||||||
|
# build wamrc
|
||||||
|
cd ${WAMR_DIR}/wamr-compiler
|
||||||
|
./build_llvm.sh
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake ..
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build wamrc!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
'
|
||||||
|
|
||||||
|
# build iwasm with default features enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake ..
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with default features enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with default features enabled on x86_32
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake .. -DWAMR_BUILD_TARGET=X86_32
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with default features enabled on x86_32!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with classic interpreter enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_FAST_INTERP=0
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with classic interpreter enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with extra features enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug \
|
||||||
|
-DWAMR_BUILD_LIB_PTHREAD=1 -DWAMR_BUILD_LIB_PTHREAD_SEMAPHORE=1 \
|
||||||
|
-DWAMR_BUILD_MULTI_MODULE=1 -DWAMR_BUILD_SIMD=1 \
|
||||||
|
-DWAMR_BUILD_TAIL_CALL=1 -DWAMR_BUILD_REF_TYPES=1 \
|
||||||
|
-DWAMR_BUILD_CUSTOM_NAME_SECTION=1 -DWAMR_BUILD_MEMORY_PROFILING=1 \
|
||||||
|
-DWAMR_BUILD_PERF_PROFILING=1 -DWAMR_BUILD_DUMP_CALL_STACK=1 \
|
||||||
|
-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build wamrc iwasm with extra features enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with global heap pool enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug \
|
||||||
|
-DWAMR_BUILD_ALLOC_WITH_USER_DATA=1 \
|
||||||
|
-DWAMR_DISABLE_STACK_HW_BOUND_CHECK=1 \
|
||||||
|
-DWAMR_BUILD_GLOBAL_HEAP_POOL=1 \
|
||||||
|
-DWAMR_BUILD_GLOBAL_HEAP_SIZE=131072
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with global heap pool enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with wasi-threads enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_LIB_WASI_THREADS=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with wasi-threads enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with GC enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_GC=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with GC enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with hardware boundary check disabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_DISABLE_HW_BOUND_CHECK=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with hardware boundary check disabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with quick AOT entry disabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_QUICK_AOT_ENTRY=0
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with quick AOT entry disabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with wakeup of blocking operations disabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_DISABLE_WAKEUP_BLOCKING_OP=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with wakeup of blocking operations disabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with module instance context disabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_MODULE_INST_CONTEXT=0 \
|
||||||
|
-DWAMR_BUILD_LIBC_BUILTIN=0 -DWAMR_BUILD_LIBC_WASI=0
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with module instance context disabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with libc-uvwasi enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -fr build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_LIBC_UVWASI=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with libc-uvwasi enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with fast jit lazy mode enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_FAST_JIT_DUMP=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with fast jit lazy mode enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with fast jit eager mode enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_FAST_JIT_DUMP=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with fast jit eager mode enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO: use pre-built llvm binary to build llvm-jit and multi-tier-jit
|
||||||
|
: '
|
||||||
|
# build iwasm with llvm jit lazy mode enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_JIT=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build llvm jit lazy mode enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with llvm jit eager mode enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build llvm jit eager mode enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with multi-tier jit enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=1 \
|
||||||
|
-DWAMR_BUILD_FAST_JIT_DUMP=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with multi-tier jit enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
'
|
||||||
|
|
||||||
|
# build iwasm with wasm mini-loader enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_MINI_LOADER=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build with wasm mini-loader enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with source debugging enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_DEBUG_INTERP=1 -DWAMR_BUILD_DEBUG_AOT=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with source debugging enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with AOT static PGO enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_STATIC_PGO=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with AOT static PGO enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with configurable bounds checks enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_CONFIGUABLE_BOUNDS_CHECKS=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with configurable bounds checks enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build iwasm with linux perf support enabled
|
||||||
|
cd ${WAMR_DIR}/product-mini/platforms/linux/
|
||||||
|
rm -rf build && mkdir build && cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BUILD_LINUX_PERF=1
|
||||||
|
make -j
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
echo "Failed to build iwasm with linux perf support enabled!"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
34
.github/workflows/codeql_fail_on_error.py
vendored
Executable file
34
.github/workflows/codeql_fail_on_error.py
vendored
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Return whether SARIF file contains error-level results
|
||||||
|
def codeql_sarif_contain_error(filename):
|
||||||
|
with open(filename, 'r') as f:
|
||||||
|
s = json.load(f)
|
||||||
|
|
||||||
|
for run in s.get('runs', []):
|
||||||
|
rules_metadata = run['tool']['driver']['rules']
|
||||||
|
if not rules_metadata:
|
||||||
|
rules_metadata = run['tool']['extensions'][0]['rules']
|
||||||
|
|
||||||
|
for res in run.get('results', []):
|
||||||
|
if 'ruleIndex' in res:
|
||||||
|
rule_index = res['ruleIndex']
|
||||||
|
elif 'rule' in res and 'index' in res['rule']:
|
||||||
|
rule_index = res['rule']['index']
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
rule_level = rules_metadata[rule_index]['defaultConfiguration']['level']
|
||||||
|
except IndexError as e:
|
||||||
|
print(e, rule_index, len(rules_metadata))
|
||||||
|
else:
|
||||||
|
if rule_level == 'error':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if codeql_sarif_contain_error(sys.argv[1]):
|
||||||
|
sys.exit(1)
|
||||||
|
|
@ -202,11 +202,17 @@ jobs:
|
||||||
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
||||||
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
||||||
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
||||||
# Fast-JIT and Multi-Tier-JIT mode don't support android(X86-32)
|
# Fast-JIT and Multi-Tier-JIT mode don't support android
|
||||||
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
||||||
platform: android
|
platform: android
|
||||||
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
||||||
platform: android
|
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
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
|
||||||
|
|
@ -232,13 +238,23 @@ jobs:
|
||||||
if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
|
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
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
||||||
|
|
||||||
- name: Build iwasm
|
- name: Build iwasm for linux
|
||||||
|
if: matrix.platform == 'linux'
|
||||||
run: |
|
run: |
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
|
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
|
||||||
cmake --build . --config Release --parallel 4
|
cmake --build . --config Release --parallel 4
|
||||||
working-directory: product-mini/platforms/${{ matrix.platform }}
|
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 }}
|
||||||
|
|
||||||
- name: Build and run unit tests
|
- name: Build and run unit tests
|
||||||
run: |
|
run: |
|
||||||
mkdir build-unittests && cd build-unittests
|
mkdir build-unittests && cd build-unittests
|
||||||
|
|
@ -456,7 +472,7 @@ jobs:
|
||||||
cmake --build . --config Debug --parallel 4
|
cmake --build . --config Debug --parallel 4
|
||||||
./iwasm wasm-apps/trap.wasm | grep "#" > call_stack.txt
|
./iwasm wasm-apps/trap.wasm | grep "#" > call_stack.txt
|
||||||
./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt
|
./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt
|
||||||
bash -x ../symbolicate.sh
|
bash -x ../symbolicate.sh
|
||||||
|
|
||||||
test:
|
test:
|
||||||
needs:
|
needs:
|
||||||
|
|
@ -556,7 +572,6 @@ jobs:
|
||||||
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
|
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
|
echo "SYSROOT_PATH=$PWD/sysroot" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
|
||||||
- name: set env variable(if llvm are used)
|
- name: set env variable(if llvm are used)
|
||||||
if: matrix.running_mode == 'aot' || matrix.running_mode == 'jit' || matrix.running_mode == 'multi-tier-jit'
|
if: matrix.running_mode == 'aot' || matrix.running_mode == 'jit' || matrix.running_mode == 'multi-tier-jit'
|
||||||
run: echo "USE_LLVM=true" >> $GITHUB_ENV
|
run: echo "USE_LLVM=true" >> $GITHUB_ENV
|
||||||
|
|
|
||||||
20
.github/workflows/nightly_run.yml
vendored
20
.github/workflows/nightly_run.yml
vendored
|
|
@ -188,11 +188,17 @@ jobs:
|
||||||
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
||||||
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
||||||
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
|
||||||
# Fast-JIT and Multi-Tier-JIT mode don't support android(X86-32)
|
# Fast-JIT and Multi-Tier-JIT mode don't support android
|
||||||
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
|
||||||
platform: android
|
platform: android
|
||||||
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
- make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
|
||||||
platform: android
|
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
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-20.04
|
- os: ubuntu-20.04
|
||||||
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2004.outputs.cache_key }}
|
llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2004.outputs.cache_key }}
|
||||||
|
|
@ -219,13 +225,23 @@ jobs:
|
||||||
if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
|
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
|
run: echo "::error::can not get prebuilt llvm libraries" && exit 1
|
||||||
|
|
||||||
- name: Build iwasm
|
- name: Build iwasm for linux
|
||||||
|
if: matrix.platform == 'linux'
|
||||||
run: |
|
run: |
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
|
cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
|
||||||
cmake --build . --config Release --parallel 4
|
cmake --build . --config Release --parallel 4
|
||||||
working-directory: product-mini/platforms/${{ matrix.platform }}
|
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_iwasm_linux_gcc4_8:
|
build_iwasm_linux_gcc4_8:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
|
|
|
||||||
|
|
@ -60,11 +60,11 @@ The WAMR fast interpreter is a clean room development. We would acknowledge the
|
||||||
|
|
||||||
### llvm
|
### llvm
|
||||||
|
|
||||||
[LICENSE](./core/deps/llvm/llvm/LICENCE.txt)
|
[LICENSE](./LICENCE.txt)
|
||||||
|
|
||||||
### wasm-c-api
|
### wasm-c-api
|
||||||
|
|
||||||
[LICENSE](https://github.com/bytecodealliance/wamr-app-framework/blob/main/samples/wasm-c-api/src/LICENSE)
|
[LICENSE](./samples/wasm-c-api/src/LICENSE)
|
||||||
|
|
||||||
### wasmtime
|
### wasmtime
|
||||||
|
|
||||||
|
|
@ -78,10 +78,6 @@ The WAMR fast interpreter is a clean room development. We would acknowledge the
|
||||||
|
|
||||||
[LICENSE](https://github.com/bytecodealliance/wamr-app-framework/blob/main/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE)
|
[LICENSE](https://github.com/bytecodealliance/wamr-app-framework/blob/main/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE)
|
||||||
|
|
||||||
### wac
|
|
||||||
|
|
||||||
[LICENSE](./tests/wamr-test-suites/spec-test-script/LICENSE)
|
|
||||||
|
|
||||||
### libuv
|
### libuv
|
||||||
|
|
||||||
[LICENSE](./core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV)
|
[LICENSE](./core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV)
|
||||||
|
|
|
||||||
|
|
@ -430,6 +430,10 @@ if (WAMR_BUILD_WASI_NN EQUAL 1)
|
||||||
if (DEFINED WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH)
|
if (DEFINED WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH)
|
||||||
add_definitions (-DWASM_WASI_NN_EXTERNAL_DELEGATE_PATH="${WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH}")
|
add_definitions (-DWASM_WASI_NN_EXTERNAL_DELEGATE_PATH="${WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH}")
|
||||||
endif ()
|
endif ()
|
||||||
|
if (WAMR_BUILD_WASI_EPHEMERAL_NN EQUAL 1)
|
||||||
|
message (" WASI-NN: WASI-Ephemeral-NN enabled")
|
||||||
|
add_definitions (-DWASM_ENABLE_WASI_EPHEMERAL_NN=1)
|
||||||
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
if (WAMR_BUILD_ALLOC_WITH_USER_DATA EQUAL 1)
|
if (WAMR_BUILD_ALLOC_WITH_USER_DATA EQUAL 1)
|
||||||
add_definitions(-DWASM_MEM_ALLOC_WITH_USER_DATA=1)
|
add_definitions(-DWASM_MEM_ALLOC_WITH_USER_DATA=1)
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,10 @@
|
||||||
#define WASM_ENABLE_WASI_NN_EXTERNAL_DELEGATE 0
|
#define WASM_ENABLE_WASI_NN_EXTERNAL_DELEGATE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WASM_ENABLE_WASI_EPHEMERAL_NN
|
||||||
|
#define WASM_ENABLE_WASI_EPHEMERAL_NN 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Default disable libc emcc */
|
/* Default disable libc emcc */
|
||||||
#ifndef WASM_ENABLE_LIBC_EMCC
|
#ifndef WASM_ENABLE_LIBC_EMCC
|
||||||
#define WASM_ENABLE_LIBC_EMCC 0
|
#define WASM_ENABLE_LIBC_EMCC 0
|
||||||
|
|
|
||||||
|
|
@ -567,7 +567,12 @@ wasm_native_init()
|
||||||
|
|
||||||
#if WASM_ENABLE_WASI_NN != 0
|
#if WASM_ENABLE_WASI_NN != 0
|
||||||
n_native_symbols = get_wasi_nn_export_apis(&native_symbols);
|
n_native_symbols = get_wasi_nn_export_apis(&native_symbols);
|
||||||
if (!wasm_native_register_natives("wasi_nn", native_symbols,
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
#define wasi_nn_module_name "wasi_ephemeral_nn"
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
|
#define wasi_nn_module_name "wasi_nn"
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
if (!wasm_native_register_natives(wasi_nn_module_name, native_symbols,
|
||||||
n_native_symbols))
|
n_native_symbols))
|
||||||
goto fail;
|
goto fail;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -23,24 +23,47 @@ graph_builder_app_native(wasm_module_inst_t instance,
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* builder_array_wasm is consisted of {builder_wasm, size}
|
||||||
|
*/
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
error
|
||||||
|
graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
|
graph_builder_wasm *builder_wasm, uint32_t size,
|
||||||
|
graph_builder_array *builder_array)
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
error
|
error
|
||||||
graph_builder_array_app_native(wasm_module_inst_t instance,
|
graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
graph_builder_array_wasm *builder_array_wasm,
|
graph_builder_array_wasm *builder_array_wasm,
|
||||||
graph_builder_array *builder_array)
|
graph_builder_array *builder_array)
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
{
|
{
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
#define array_size size
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
|
#define array_size builder_array_wasm->size
|
||||||
|
|
||||||
if (!wasm_runtime_validate_native_addr(
|
if (!wasm_runtime_validate_native_addr(
|
||||||
instance, builder_array_wasm,
|
instance, builder_array_wasm,
|
||||||
(uint64)sizeof(graph_builder_array_wasm))) {
|
(uint64)sizeof(graph_builder_array_wasm))) {
|
||||||
NN_ERR_PRINTF("builder_array_wasm is invalid");
|
NN_ERR_PRINTF("builder_array_wasm is invalid");
|
||||||
return invalid_argument;
|
return invalid_argument;
|
||||||
}
|
}
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
|
||||||
NN_DBG_PRINTF("Graph builder array contains %d elements",
|
NN_DBG_PRINTF("Graph builder array contains %d elements", array_size);
|
||||||
builder_array_wasm->size);
|
|
||||||
|
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
if (!wasm_runtime_validate_native_addr(instance, builder_wasm,
|
||||||
|
(uint64)array_size
|
||||||
|
* sizeof(graph_builder_wasm))) {
|
||||||
|
NN_ERR_PRINTF("builder_wasm is invalid");
|
||||||
|
return invalid_argument;
|
||||||
|
}
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
if (!wasm_runtime_validate_app_addr(
|
if (!wasm_runtime_validate_app_addr(
|
||||||
instance, (uint64)builder_array_wasm->buf_offset,
|
instance, (uint64)builder_array_wasm->buf_offset,
|
||||||
(uint64)builder_array_wasm->size * sizeof(graph_builder_wasm))) {
|
(uint64)array_size * sizeof(graph_builder_wasm))) {
|
||||||
NN_ERR_PRINTF("builder_array_wasm->buf_offset is invalid");
|
NN_ERR_PRINTF("builder_array_wasm->buf_offset is invalid");
|
||||||
return invalid_argument;
|
return invalid_argument;
|
||||||
}
|
}
|
||||||
|
|
@ -48,13 +71,14 @@ graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
graph_builder_wasm *builder_wasm =
|
graph_builder_wasm *builder_wasm =
|
||||||
(graph_builder_wasm *)wasm_runtime_addr_app_to_native(
|
(graph_builder_wasm *)wasm_runtime_addr_app_to_native(
|
||||||
instance, (uint64)builder_array_wasm->buf_offset);
|
instance, (uint64)builder_array_wasm->buf_offset);
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
|
||||||
graph_builder *builder = (graph_builder *)wasm_runtime_malloc(
|
graph_builder *builder = (graph_builder *)wasm_runtime_malloc(
|
||||||
builder_array_wasm->size * sizeof(graph_builder));
|
array_size * sizeof(graph_builder));
|
||||||
if (builder == NULL)
|
if (builder == NULL)
|
||||||
return missing_memory;
|
return missing_memory;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < builder_array_wasm->size; ++i) {
|
for (uint32_t i = 0; i < array_size; ++i) {
|
||||||
error res;
|
error res;
|
||||||
if (success
|
if (success
|
||||||
!= (res = graph_builder_app_native(instance, &builder_wasm[i],
|
!= (res = graph_builder_app_native(instance, &builder_wasm[i],
|
||||||
|
|
@ -68,23 +92,31 @@ graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
}
|
}
|
||||||
|
|
||||||
builder_array->buf = builder;
|
builder_array->buf = builder;
|
||||||
builder_array->size = builder_array_wasm->size;
|
builder_array->size = array_size;
|
||||||
return success;
|
return success;
|
||||||
|
#undef array_size
|
||||||
}
|
}
|
||||||
|
|
||||||
static error
|
static error
|
||||||
tensor_data_app_native(wasm_module_inst_t instance, uint32_t total_elements,
|
tensor_data_app_native(wasm_module_inst_t instance, uint32_t total_elements,
|
||||||
tensor_wasm *input_tensor_wasm, tensor_data *data)
|
tensor_wasm *input_tensor_wasm, tensor_data *data)
|
||||||
{
|
{
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
#define data_size input_tensor_wasm->data_size
|
||||||
|
#else
|
||||||
|
#define data_size total_elements
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!wasm_runtime_validate_app_addr(instance,
|
if (!wasm_runtime_validate_app_addr(instance,
|
||||||
(uint64)input_tensor_wasm->data_offset,
|
(uint64)input_tensor_wasm->data_offset,
|
||||||
(uint64)total_elements)) {
|
(uint64)data_size)) {
|
||||||
NN_ERR_PRINTF("input_tensor_wasm->data_offset is invalid");
|
NN_ERR_PRINTF("input_tensor_wasm->data_offset is invalid");
|
||||||
return invalid_argument;
|
return invalid_argument;
|
||||||
}
|
}
|
||||||
*data = (tensor_data)wasm_runtime_addr_app_to_native(
|
*data = (tensor_data)wasm_runtime_addr_app_to_native(
|
||||||
instance, (uint64)input_tensor_wasm->data_offset);
|
instance, (uint64)input_tensor_wasm->data_offset);
|
||||||
return success;
|
return success;
|
||||||
|
#undef data_size
|
||||||
}
|
}
|
||||||
|
|
||||||
static error
|
static error
|
||||||
|
|
@ -92,6 +124,9 @@ tensor_dimensions_app_native(wasm_module_inst_t instance,
|
||||||
tensor_wasm *input_tensor_wasm,
|
tensor_wasm *input_tensor_wasm,
|
||||||
tensor_dimensions **dimensions)
|
tensor_dimensions **dimensions)
|
||||||
{
|
{
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
tensor_dimensions_wasm *dimensions_wasm = &input_tensor_wasm->dimensions;
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
if (!wasm_runtime_validate_app_addr(
|
if (!wasm_runtime_validate_app_addr(
|
||||||
instance, (uint64)input_tensor_wasm->dimensions_offset,
|
instance, (uint64)input_tensor_wasm->dimensions_offset,
|
||||||
(uint64)sizeof(tensor_dimensions_wasm))) {
|
(uint64)sizeof(tensor_dimensions_wasm))) {
|
||||||
|
|
@ -102,6 +137,7 @@ tensor_dimensions_app_native(wasm_module_inst_t instance,
|
||||||
tensor_dimensions_wasm *dimensions_wasm =
|
tensor_dimensions_wasm *dimensions_wasm =
|
||||||
(tensor_dimensions_wasm *)wasm_runtime_addr_app_to_native(
|
(tensor_dimensions_wasm *)wasm_runtime_addr_app_to_native(
|
||||||
instance, (uint64)input_tensor_wasm->dimensions_offset);
|
instance, (uint64)input_tensor_wasm->dimensions_offset);
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
|
||||||
if (!wasm_runtime_validate_app_addr(instance,
|
if (!wasm_runtime_validate_app_addr(instance,
|
||||||
(uint64)dimensions_wasm->buf_offset,
|
(uint64)dimensions_wasm->buf_offset,
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,29 @@ typedef struct {
|
||||||
} tensor_dimensions_wasm;
|
} tensor_dimensions_wasm;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
tensor_dimensions_wasm dimensions;
|
||||||
|
tensor_type type;
|
||||||
|
uint32_t data_offset;
|
||||||
|
uint32_t data_size;
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
uint32_t dimensions_offset;
|
uint32_t dimensions_offset;
|
||||||
tensor_type type;
|
tensor_type type;
|
||||||
uint32_t data_offset;
|
uint32_t data_offset;
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
} tensor_wasm;
|
} tensor_wasm;
|
||||||
|
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
error
|
||||||
|
graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
|
graph_builder_wasm *builder_wasm, uint32_t size,
|
||||||
|
graph_builder_array *builder_array);
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
error
|
error
|
||||||
graph_builder_array_app_native(wasm_module_inst_t instance,
|
graph_builder_array_app_native(wasm_module_inst_t instance,
|
||||||
graph_builder_array_wasm *builder,
|
graph_builder_array_wasm *builder,
|
||||||
graph_builder_array *builder_native);
|
graph_builder_array *builder_native);
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
|
||||||
error
|
error
|
||||||
tensor_app_native(wasm_module_inst_t instance, tensor_wasm *input_tensor,
|
tensor_app_native(wasm_module_inst_t instance, tensor_wasm *input_tensor,
|
||||||
|
|
|
||||||
|
|
@ -189,9 +189,16 @@ is_model_initialized(WASINNContext *wasi_nn_ctx)
|
||||||
|
|
||||||
/* WASI-NN implementation */
|
/* WASI-NN implementation */
|
||||||
|
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
error
|
||||||
|
wasi_nn_load(wasm_exec_env_t exec_env, graph_builder_wasm *builder,
|
||||||
|
uint32_t builder_wasm_size, graph_encoding encoding,
|
||||||
|
execution_target target, graph *g)
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
error
|
error
|
||||||
wasi_nn_load(wasm_exec_env_t exec_env, graph_builder_array_wasm *builder,
|
wasi_nn_load(wasm_exec_env_t exec_env, graph_builder_array_wasm *builder,
|
||||||
graph_encoding encoding, execution_target target, graph *g)
|
graph_encoding encoding, execution_target target, graph *g)
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
{
|
{
|
||||||
NN_DBG_PRINTF("Running wasi_nn_load [encoding=%d, target=%d]...", encoding,
|
NN_DBG_PRINTF("Running wasi_nn_load [encoding=%d, target=%d]...", encoding,
|
||||||
target);
|
target);
|
||||||
|
|
@ -206,10 +213,17 @@ wasi_nn_load(wasm_exec_env_t exec_env, graph_builder_array_wasm *builder,
|
||||||
|
|
||||||
error res;
|
error res;
|
||||||
graph_builder_array builder_native = { 0 };
|
graph_builder_array builder_native = { 0 };
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
if (success
|
||||||
|
!= (res = graph_builder_array_app_native(
|
||||||
|
instance, builder, builder_wasm_size, &builder_native)))
|
||||||
|
return res;
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
if (success
|
if (success
|
||||||
!= (res = graph_builder_array_app_native(instance, builder,
|
!= (res = graph_builder_array_app_native(instance, builder,
|
||||||
&builder_native)))
|
&builder_native)))
|
||||||
return res;
|
return res;
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
|
|
||||||
if (!wasm_runtime_validate_native_addr(instance, g,
|
if (!wasm_runtime_validate_native_addr(instance, g,
|
||||||
(uint64)sizeof(graph))) {
|
(uint64)sizeof(graph))) {
|
||||||
|
|
@ -315,10 +329,17 @@ wasi_nn_compute(wasm_exec_env_t exec_env, graph_execution_context ctx)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
error
|
||||||
|
wasi_nn_get_output(wasm_exec_env_t exec_env, graph_execution_context ctx,
|
||||||
|
uint32_t index, tensor_data output_tensor,
|
||||||
|
uint32_t output_tensor_len, uint32_t *output_tensor_size)
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
error
|
error
|
||||||
wasi_nn_get_output(wasm_exec_env_t exec_env, graph_execution_context ctx,
|
wasi_nn_get_output(wasm_exec_env_t exec_env, graph_execution_context ctx,
|
||||||
uint32_t index, tensor_data output_tensor,
|
uint32_t index, tensor_data output_tensor,
|
||||||
uint32_t *output_tensor_size)
|
uint32_t *output_tensor_size)
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
{
|
{
|
||||||
NN_DBG_PRINTF("Running wasi_nn_get_output [ctx=%d, index=%d]...", ctx,
|
NN_DBG_PRINTF("Running wasi_nn_get_output [ctx=%d, index=%d]...", ctx,
|
||||||
index);
|
index);
|
||||||
|
|
@ -337,8 +358,14 @@ wasi_nn_get_output(wasm_exec_env_t exec_env, graph_execution_context ctx,
|
||||||
return invalid_argument;
|
return invalid_argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
res = lookup[wasi_nn_ctx->current_encoding].get_output(
|
||||||
|
wasi_nn_ctx->tflite_ctx, ctx, index, output_tensor, &output_tensor_len);
|
||||||
|
*output_tensor_size = output_tensor_len;
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
res = lookup[wasi_nn_ctx->current_encoding].get_output(
|
res = lookup[wasi_nn_ctx->current_encoding].get_output(
|
||||||
wasi_nn_ctx->tflite_ctx, ctx, index, output_tensor, output_tensor_size);
|
wasi_nn_ctx->tflite_ctx, ctx, index, output_tensor, output_tensor_size);
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
NN_DBG_PRINTF("wasi_nn_get_output finished with status %d [data_size=%d]",
|
NN_DBG_PRINTF("wasi_nn_get_output finished with status %d [data_size=%d]",
|
||||||
res, *output_tensor_size);
|
res, *output_tensor_size);
|
||||||
return res;
|
return res;
|
||||||
|
|
@ -352,11 +379,19 @@ wasi_nn_get_output(wasm_exec_env_t exec_env, graph_execution_context ctx,
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
static NativeSymbol native_symbols_wasi_nn[] = {
|
static NativeSymbol native_symbols_wasi_nn[] = {
|
||||||
|
#if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
|
||||||
|
REG_NATIVE_FUNC(load, "(*iii*)i"),
|
||||||
|
REG_NATIVE_FUNC(init_execution_context, "(i*)i"),
|
||||||
|
REG_NATIVE_FUNC(set_input, "(ii*)i"),
|
||||||
|
REG_NATIVE_FUNC(compute, "(i)i"),
|
||||||
|
REG_NATIVE_FUNC(get_output, "(ii*i*)i"),
|
||||||
|
#else /* WASM_ENABLE_WASI_EPHEMERAL_NN == 0 */
|
||||||
REG_NATIVE_FUNC(load, "(*ii*)i"),
|
REG_NATIVE_FUNC(load, "(*ii*)i"),
|
||||||
REG_NATIVE_FUNC(init_execution_context, "(i*)i"),
|
REG_NATIVE_FUNC(init_execution_context, "(i*)i"),
|
||||||
REG_NATIVE_FUNC(set_input, "(ii*)i"),
|
REG_NATIVE_FUNC(set_input, "(ii*)i"),
|
||||||
REG_NATIVE_FUNC(compute, "(i)i"),
|
REG_NATIVE_FUNC(compute, "(i)i"),
|
||||||
REG_NATIVE_FUNC(get_output, "(ii**)i"),
|
REG_NATIVE_FUNC(get_output, "(ii**)i"),
|
||||||
|
#endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ os_openat(os_file_handle handle, const char *path, __wasi_oflags_t oflags,
|
||||||
// Linux returns ENXIO instead of EOPNOTSUPP when opening a socket.
|
// Linux returns ENXIO instead of EOPNOTSUPP when opening a socket.
|
||||||
if (openat_errno == ENXIO) {
|
if (openat_errno == ENXIO) {
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int ret = fstatat(fd, path, &sb,
|
int ret = fstatat(handle, path, &sb,
|
||||||
(lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW)
|
(lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW)
|
||||||
? 0
|
? 0
|
||||||
: AT_SYMLINK_NOFOLLOW);
|
: AT_SYMLINK_NOFOLLOW);
|
||||||
|
|
@ -396,7 +396,7 @@ os_openat(os_file_handle handle, const char *path, __wasi_oflags_t oflags,
|
||||||
if (openat_errno == ENOTDIR
|
if (openat_errno == ENOTDIR
|
||||||
&& (open_flags & (O_NOFOLLOW | O_DIRECTORY)) != 0) {
|
&& (open_flags & (O_NOFOLLOW | O_DIRECTORY)) != 0) {
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int ret = fstatat(fd, path, &sb, AT_SYMLINK_NOFOLLOW);
|
int ret = fstatat(handle, path, &sb, AT_SYMLINK_NOFOLLOW);
|
||||||
if (S_ISLNK(sb.st_mode)) {
|
if (S_ISLNK(sb.st_mode)) {
|
||||||
return __WASI_ELOOP;
|
return __WASI_ELOOP;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,9 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM
|
||||||
|
|
||||||
- **WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH**=Path to the external delegate shared library (e.g. `libedgetpu.so.1.0` for Coral USB)
|
- **WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH**=Path to the external delegate shared library (e.g. `libedgetpu.so.1.0` for Coral USB)
|
||||||
|
|
||||||
|
#### **Enable lib wasi-nn with `wasi_ephemeral_nn` module support**
|
||||||
|
- **WAMR_BUILD_WASI_EPHEMERAL_NN**=1/0, default to disable if not set
|
||||||
|
|
||||||
#### **Disable boundary check with hardware trap**
|
#### **Disable boundary check with hardware trap**
|
||||||
- **WAMR_DISABLE_HW_BOUND_CHECK**=1/0, default to enable if not set and supported by platform
|
- **WAMR_DISABLE_HW_BOUND_CHECK**=1/0, default to enable if not set and supported by platform
|
||||||
> Note: by default only platform [linux/darwin/android/windows/vxworks 64-bit](https://github.com/bytecodealliance/wasm-micro-runtime/blob/5fb5119239220b0803e7045ca49b0a29fe65e70e/core/shared/platform/linux/platform_internal.h#L81) will enable the boundary check with hardware trap feature, for 32-bit platforms it's automatically disabled even when the flag is set to 0, and the wamrc tool will generate AOT code without boundary check instructions in all 64-bit targets except SGX to improve performance. The boundary check includes linear memory access boundary and native stack access boundary, if `WAMR_DISABLE_STACK_HW_BOUND_CHECK` below isn't set.
|
> Note: by default only platform [linux/darwin/android/windows/vxworks 64-bit](https://github.com/bytecodealliance/wasm-micro-runtime/blob/5fb5119239220b0803e7045ca49b0a29fe65e70e/core/shared/platform/linux/platform_internal.h#L81) will enable the boundary check with hardware trap feature, for 32-bit platforms it's automatically disabled even when the flag is set to 0, and the wamrc tool will generate AOT code without boundary check instructions in all 64-bit targets except SGX to improve performance. The boundary check includes linear memory access boundary and native stack access boundary, if `WAMR_DISABLE_STACK_HW_BOUND_CHECK` below isn't set.
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ func main() {
|
||||||
var instance *wamr.Instance
|
var instance *wamr.Instance
|
||||||
var argv []uint32
|
var argv []uint32
|
||||||
var results []interface{}
|
var results []interface{}
|
||||||
var offset uint32
|
var offset uint64
|
||||||
var native_addr *uint8
|
var native_addr *uint8
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,8 +117,8 @@ func (self *Module) SetWasiArgsEx(dirList [][]byte, mapDirList [][]byte,
|
||||||
C.wasm_runtime_set_wasi_args_ex(self.module, dirPtr, dirCount,
|
C.wasm_runtime_set_wasi_args_ex(self.module, dirPtr, dirCount,
|
||||||
mapDirPtr, mapDirCount,
|
mapDirPtr, mapDirCount,
|
||||||
envPtr, envCount, argvPtr, argc,
|
envPtr, envCount, argvPtr, argc,
|
||||||
C.long(stdinfd), C.long(stdoutfd),
|
C.int64_t(stdinfd), C.int64_t(stdoutfd),
|
||||||
C.long(stderrfd))
|
C.int64_t(stderrfd))
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set module's wasi network address pool */
|
/* Set module's wasi network address pool */
|
||||||
|
|
|
||||||
|
|
@ -312,7 +312,7 @@ WAMR provides some features which can be easily configured by passing options to
|
||||||
|
|
||||||
## Android
|
## Android
|
||||||
|
|
||||||
able to generate a shared library support Android platform.
|
Able to generate a shared library support Android platform.
|
||||||
- need an [android SDK](https://developer.android.com/studio). Go and get the "Command line tools only"
|
- need an [android SDK](https://developer.android.com/studio). Go and get the "Command line tools only"
|
||||||
- look for a command named *sdkmanager* and download below components. version numbers might need to check and pick others
|
- look for a command named *sdkmanager* and download below components. version numbers might need to check and pick others
|
||||||
- "build-tools;29.0.3"
|
- "build-tools;29.0.3"
|
||||||
|
|
@ -326,7 +326,7 @@ able to generate a shared library support Android platform.
|
||||||
- export ANDROID_NDK_LATEST_HOME=/the/path/of/downloaded/sdk/ndk/2x.xxx/
|
- export ANDROID_NDK_LATEST_HOME=/the/path/of/downloaded/sdk/ndk/2x.xxx/
|
||||||
- ready to go
|
- ready to go
|
||||||
|
|
||||||
Use such commands, you are able to compile with default configurations. Any compiling requirement should be satisfied by modifying product-mini/platforms/android/CMakeList.txt. For example, chaning ${WAMR_BUILD_TARGET} in CMakeList could get different libraries support different ABIs.
|
Use such commands, you are able to compile with default configurations.
|
||||||
|
|
||||||
``` shell
|
``` shell
|
||||||
$ cd product-mini/platforms/android/
|
$ cd product-mini/platforms/android/
|
||||||
|
|
@ -339,6 +339,15 @@ $ # include/ includes all necesary head files
|
||||||
$ # lib includes libiwasm.so
|
$ # lib includes libiwasm.so
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To change the target architecture and ABI, you can define `WAMR_BUILD_TARGET` or `ANDROID_ABI` respectively. To build for [supported Android ABIs](https://developer.android.com/ndk/guides/abis#sa):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cmake .. -DWAMR_BUILD_TARGET=X86_32 -DANDROID_ABI=x86 # 32-bit Intel CPU
|
||||||
|
$ cmake .. -DWAMR_BUILD_TARGET=X86_64 -DANDROID_ABI=x86_64 # 64-bit Intel CPU
|
||||||
|
$ cmake .. -DWAMR_BUILD_TARGET=ARMV7A -DANDROID_ABI=armeabi-v7a # 32-bit ARM CPU
|
||||||
|
$ cmake .. -DWAMR_BUILD_TARGET=AARCH64 -DANDROID_ABI=arm64-v8a # 64-bit ARM CPU
|
||||||
|
```
|
||||||
|
|
||||||
## NuttX
|
## NuttX
|
||||||
|
|
||||||
WAMR is intergrated with NuttX, just enable the WAMR in Kconfig option (Application Configuration/Interpreters).
|
WAMR is intergrated with NuttX, just enable the WAMR in Kconfig option (Application Configuration/Interpreters).
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,59 @@
|
||||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
|
||||||
cmake_minimum_required (VERSION 3.4.1)
|
cmake_minimum_required (VERSION 3.14)
|
||||||
|
|
||||||
set (CMAKE_VERBOSE_MAKEFILE on)
|
|
||||||
set (CMAKE_BUILD_TYPE Release)
|
|
||||||
|
|
||||||
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md#environment-variables-3
|
|
||||||
set (CMAKE_TOOLCHAIN_FILE "$ENV{ANDROID_NDK_LATEST_HOME}/build/cmake/android.toolchain.cmake")
|
|
||||||
set (ANDROID_SDK $ENV{ANDROID_HOME})
|
|
||||||
set (ANDROID_NDK $ENV{ANDROID_NDK_LATEST_HOME})
|
|
||||||
|
|
||||||
set (ANDROID_ABI "x86")
|
|
||||||
set (ANDROID_LD lld)
|
|
||||||
if (NOT DEFINED ANDROID_PLATFORM)
|
|
||||||
set (ANDROID_PLATFORM 24)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
project (iwasm)
|
|
||||||
|
|
||||||
set (WAMR_BUILD_PLATFORM "android")
|
|
||||||
set (WAMR_BUILD_TARGET "X86_32")
|
|
||||||
set (WAMR_BUILD_TYPE Release)
|
|
||||||
set (WAMR_BUILD_INTERP 1)
|
|
||||||
set (WAMR_BUILD_AOT 1)
|
|
||||||
set (WAMR_BUILD_JIT 0)
|
|
||||||
set (WAMR_BUILD_LIBC_BUILTIN 1)
|
|
||||||
set (WAMR_BUILD_LIBC_WASI 1)
|
|
||||||
|
|
||||||
# Reset default linker flags
|
# Reset default linker flags
|
||||||
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
||||||
set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
|
set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
|
||||||
|
|
||||||
# Set WAMR_BUILD_TARGET, currently values supported:
|
|
||||||
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", "MIPS", "XTENSA"
|
|
||||||
if (NOT DEFINED WAMR_BUILD_TARGET)
|
if (NOT DEFINED WAMR_BUILD_TARGET)
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
message (FATAL_ERROR "WAMR_BUILD_TARGET isn't set")
|
||||||
# Build as X86_64 by default in 64-bit platform
|
endif ()
|
||||||
set (WAMR_BUILD_TARGET "X86_64")
|
|
||||||
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
if (NOT (WAMR_BUILD_TARGET STREQUAL "X86_64"
|
||||||
# Build as X86_32 by default in 32-bit platform
|
OR WAMR_BUILD_TARGET STREQUAL "X86_32"
|
||||||
set (WAMR_BUILD_TARGET "X86_32")
|
OR WAMR_BUILD_TARGET MATCHES "AARCH64.*"
|
||||||
|
OR WAMR_BUILD_TARGET MATCHES "ARM.*"
|
||||||
|
OR WAMR_BUILD_TARGET MATCHES "RISCV64.*"))
|
||||||
|
message (FATAL_ERROR "Unsupported build target platform ${WAMR_BUILD_TARGET}!")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED ANDROID_ABI)
|
||||||
|
if (WAMR_BUILD_TARGET STREQUAL "X86_64")
|
||||||
|
set (ANDROID_ABI "x86_64")
|
||||||
|
elseif (WAMR_BUILD_TARGET STREQUAL "X86_32")
|
||||||
|
set (ANDROID_ABI "x86")
|
||||||
|
elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
|
||||||
|
set (ANDROID_ABI "arm64-v8a")
|
||||||
|
elseif (WAMR_BUILD_TARGET MATCHES "ARM.*")
|
||||||
|
set (ANDROID_ABI "armeabi-v7a")
|
||||||
else ()
|
else ()
|
||||||
message(SEND_ERROR "Unsupported build target platform!")
|
set (ANDROID_ABI "riscv64")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED ANDROID_LD)
|
||||||
|
set (ANDROID_LD lld)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED ANDROID_PLATFORM)
|
||||||
|
set (ANDROID_PLATFORM 24)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# https://android.googlesource.com/platform/ndk/+/master/build/cmake/android.toolchain.cmake
|
||||||
|
set (CMAKE_TOOLCHAIN_FILE "$ENV{ANDROID_NDK_LATEST_HOME}/build/cmake/android.toolchain.cmake")
|
||||||
|
set (ANDROID_SDK $ENV{ANDROID_HOME})
|
||||||
|
set (ANDROID_NDK $ENV{ANDROID_NDK_LATEST_HOME})
|
||||||
|
|
||||||
|
project (iwasm)
|
||||||
|
|
||||||
|
set (WAMR_BUILD_PLATFORM "android")
|
||||||
|
|
||||||
|
set (CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE)
|
if (NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
set (CMAKE_BUILD_TYPE Release)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT DEFINED WAMR_BUILD_INTERP)
|
if (NOT DEFINED WAMR_BUILD_INTERP)
|
||||||
|
|
@ -55,6 +61,11 @@ if (NOT DEFINED WAMR_BUILD_INTERP)
|
||||||
set (WAMR_BUILD_INTERP 1)
|
set (WAMR_BUILD_INTERP 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED WAMR_BUILD_FAST_INTERP)
|
||||||
|
# Enable fast interpreter
|
||||||
|
set (WAMR_BUILD_FAST_INTERP 1)
|
||||||
|
endif ()
|
||||||
|
|
||||||
if (NOT DEFINED WAMR_BUILD_AOT)
|
if (NOT DEFINED WAMR_BUILD_AOT)
|
||||||
# Enable AOT by default.
|
# Enable AOT by default.
|
||||||
set (WAMR_BUILD_AOT 1)
|
set (WAMR_BUILD_AOT 1)
|
||||||
|
|
@ -75,6 +86,21 @@ if (NOT DEFINED WAMR_BUILD_LIBC_WASI)
|
||||||
set (WAMR_BUILD_LIBC_WASI 1)
|
set (WAMR_BUILD_LIBC_WASI 1)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED WAMR_BUILD_MULTI_MODULE)
|
||||||
|
# Disable multiple modules by default
|
||||||
|
set (WAMR_BUILD_MULTI_MODULE 0)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED WAMR_BUILD_LIB_PTHREAD)
|
||||||
|
# Disable pthread library by default
|
||||||
|
set (WAMR_BUILD_LIB_PTHREAD 0)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT DEFINED WAMR_BUILD_LIB_WASI_THREADS)
|
||||||
|
# Disable wasi threads library by default
|
||||||
|
set (WAMR_BUILD_LIB_WASI_THREADS 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
|
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
|
||||||
|
|
||||||
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
|
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user