From 84161fe084b0dbdb672838611d315d314447bbc3 Mon Sep 17 00:00:00 2001 From: Wenyong Huang Date: Fri, 28 Oct 2022 13:55:41 +0800 Subject: [PATCH] Add CIs to release new version and publish binary files (#1648) Add CIs to enable the release process of a new version of WAMR, and build and publish the binary files when a version is released, including iwasm, wamrc, lldb, vscode-extension and wamr-ide for Ubuntu-20.04, Ubuntu-22.04 and MacOS. And refine the CIs to test spec cases. --- .github/scripts/extract_from_release_notes.py | 60 +++ .github/scripts/fetch_and_compare_version.py | 123 ++++++ .../scripts/reuse_latest_release_binaries.py | 102 +++++ .github/workflows/build_docker_images.yml | 48 +++ .github/workflows/build_iwasm_release.yml | 90 +++++ .github/workflows/build_llvm_libraries.yml | 39 ++ .github/workflows/build_wamr_lldb.yml | 181 +++++++++ .github/workflows/build_wamr_sdk.yml | 78 ++++ .github/workflows/build_wamr_vscode_ext.yml | 66 ++++ .github/workflows/build_wamrc.yml | 90 +++++ .github/workflows/codeing_guildelines.yml | 11 - .../compilation_on_android_ubuntu.yml | 364 ++++++------------ .github/workflows/compilation_on_macos.yml | 205 +++------- .github/workflows/compilation_on_nuttx.yml | 58 +-- .github/workflows/compilation_on_sgx.yml | 210 +++------- .github/workflows/compilation_on_windows.yml | 51 +-- .github/workflows/create_tag.yml | 68 ++++ .github/workflows/release_process.yml | 193 ++++++++++ .../reuse_latest_release_binaries.yml | 68 ++++ .gitignore | 1 + RELEASE_NOTES.md | 118 ++++++ build-scripts/lldb-wasm.patch | 36 ++ .../macos-interp/wamr_config_simple.cmake | 11 + samples/simple/sample_test_run.py | 161 ++++++++ test-tools/wamr-ide/README.md | 21 +- .../wamr-ide/VSCode-Extension/README.md | 11 +- wamr-sdk/wamr_config_macos_release.cmake | 40 ++ wamr-sdk/wamr_config_ubuntu_release.cmake | 40 ++ 28 files changed, 1936 insertions(+), 608 deletions(-) create mode 100644 .github/scripts/extract_from_release_notes.py create mode 100644 .github/scripts/fetch_and_compare_version.py create mode 100644 .github/scripts/reuse_latest_release_binaries.py create mode 100644 .github/workflows/build_docker_images.yml create mode 100644 .github/workflows/build_iwasm_release.yml create mode 100644 .github/workflows/build_llvm_libraries.yml create mode 100644 .github/workflows/build_wamr_lldb.yml create mode 100644 .github/workflows/build_wamr_sdk.yml create mode 100644 .github/workflows/build_wamr_vscode_ext.yml create mode 100644 .github/workflows/build_wamrc.yml create mode 100644 .github/workflows/create_tag.yml create mode 100644 .github/workflows/release_process.yml create mode 100644 .github/workflows/reuse_latest_release_binaries.yml create mode 100644 RELEASE_NOTES.md create mode 100644 samples/simple/profiles/macos-interp/wamr_config_simple.cmake create mode 100755 samples/simple/sample_test_run.py create mode 100644 wamr-sdk/wamr_config_macos_release.cmake create mode 100644 wamr-sdk/wamr_config_ubuntu_release.cmake diff --git a/.github/scripts/extract_from_release_notes.py b/.github/scripts/extract_from_release_notes.py new file mode 100644 index 000000000..3802d9211 --- /dev/null +++ b/.github/scripts/extract_from_release_notes.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +""" +Extract the latest release notes content from RELEASE_NOTES.md +""" + +import argparse +import os +import sys +import traceback + + +def latest_content(release_notes_path): + """ + can't change the format of the original content + """ + content = "" + start_extract = False + with open(release_notes_path, encoding="utf-8") as f: + for line in f: + if line.startswith("## "): + if start_extract: + break + + start_extract = True + continue + + # hit a separated line + if line.startswith("---"): + break + + content += line + + content += os.linesep + return content + + +def main(): + """ + GO!GO!!GO!!! + """ + parser = argparse.ArgumentParser(description="run the sample and examine outputs") + parser.add_argument("release_notes_path", type=str) + args = parser.parse_args() + + ret = 1 + try: + print(latest_content(args.release_notes_path)) + ret = 0 + except AssertionError: + traceback.print_exc() + return ret + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/scripts/fetch_and_compare_version.py b/.github/scripts/fetch_and_compare_version.py new file mode 100644 index 000000000..913cb1aad --- /dev/null +++ b/.github/scripts/fetch_and_compare_version.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +import re +import shlex +import subprocess +import sys + + +def fetch_version_from_code(): + """ + search the semantic version definition in build-scripts/config_common.cmake + """ + major, minor, patch = "", "", "" + with open("core/version.h", encoding="utf-8") as f: + for line in f: + if "WAMR_VERSION" not in line: + continue + + major_match = re.search(r"WAMR_VERSION_MAJOR (\d+)", line) + if major_match is not None: + major = major_match.groups()[0] + continue + + minor_match = re.search(r"WAMR_VERSION_MINOR (\d+)", line) + if minor_match is not None: + minor = minor_match.groups()[0] + continue + + patch_match = re.search(r"WAMR_VERSION_PATCH (\d+)", line) + if patch_match is not None: + patch = patch_match.groups()[0] + + if len(major) == 0 or len(minor) == 0 or len(patch) == 0: + raise Exception( + "can't find the semantic version definition likes WAMR_VERSION_*" + ) + return f"WAMR-{major}.{minor}.{patch}" + + +def fetch_latest_git_tag(): + list_tag_cmd = ( + 'git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)"' + ) + p = subprocess.run(shlex.split(list_tag_cmd), capture_output=True, check=True) + + all_tags = p.stdout.decode().strip() + latest_tag = all_tags.split("\n")[-1] + return latest_tag + + +def match_version_pattern(v): + pattern = r"WAMR-\d+\.\d+\.\d+" + m = re.match(pattern, v) + return m is not None + + +def split_version_string(v): + """ + return the semantic version as an integer list + """ + pattern = r"WAMR-(\d+)\.(\d+)\.(\d+)" + m = re.match(pattern, v) + return [int(x) for x in m.groups()] + + +def compare_version_string(v1, v2): + """ + return value: + - 1. if v1 > v2 + - -1. if v1 < v2 + - 0. if v1 == v2 + """ + if not match_version_pattern(v1): + raise Exception(f"{v1} doesn't match the version pattern") + + if not match_version_pattern(v2): + raise Exception(f"{v2} doesn't match the version pattern") + + v1_sem_ver = split_version_string(v1) + v2_sem_ver = split_version_string(v2) + + return 0 if v1_sem_ver == v2_sem_ver else (1 if v1_sem_ver > v2_sem_ver else -1) + + +def is_major_or_minor_changed(v1, v2): + """ + return true if change either major of v2 or minor of v2 + return false or else + """ + if not match_version_pattern(v1): + raise Exception(f"{v1} doesn't match the version pattern") + + if not match_version_pattern(v2): + raise Exception(f"{v2} doesn't match the version pattern") + + v1_major, v1_minor, _ = split_version_string(v1) + v2_major, v2_minor, _ = split_version_string(v2) + + return v2_major != v1_major or v2_minor != v1_minor + + +def next_version(): + definition = fetch_version_from_code() + tag = fetch_latest_git_tag() + + new_version = "" + minor_changed = False + if compare_version_string(definition, tag) == 1: + new_version = definition.split("-")[-1] + + if is_major_or_minor_changed(tag, definition): + minor_changed = True + + return new_version, "major_minor_change" if minor_changed else "patch_change" + + +if __name__ == "__main__": + print(f"{next_version()[0]},{next_version()[1]}") + sys.exit(0) diff --git a/.github/scripts/reuse_latest_release_binaries.py b/.github/scripts/reuse_latest_release_binaries.py new file mode 100644 index 000000000..0fe2d9766 --- /dev/null +++ b/.github/scripts/reuse_latest_release_binaries.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +import argparse +import json +import os +import shlex +import subprocess +import sys +from urllib.error import HTTPError, URLError +import urllib.request + + +def get_last_commit(target_path, cwd): + last_commit_cmd = f"git log -n 1 --pretty=format:%H -- {target_path}" + p = subprocess.run( + shlex.split(last_commit_cmd), capture_output=True, check=True, cwd=cwd + ) + return p.stdout.decode().strip() + + +def fetch_git_tags(): + list_tag_cmd = ( + 'git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)"' + ) + p = subprocess.run(shlex.split(list_tag_cmd), capture_output=True, check=True) + + all_tags = p.stdout.decode().strip() + return all_tags.split("\n") + + +def download_binaries(binary_name_stem, cwd): + """ + 1. find the latest release name + 2. form assets download url: + """ + try: + all_tags = fetch_git_tags() + # *release_process.yml* will create a tag and release at first + second_last_tag = all_tags[-2] + latest_tag = all_tags[-1] + + latest_url = "https://api.github.com/repos/bytecodealliance/wasm-micro-runtime/releases/latest" + print(f"::notice::query the latest release with {latest_url}...") + with urllib.request.urlopen(latest_url) as response: + body = response.read() + + release_name = json.loads(body)["name"] + + # WAMR-X.Y.Z -> X.Y.Z + second_last_sem_ver = second_last_tag[5:] + latest_sem_ver = latest_tag[5:] + assert latest_sem_ver in binary_name_stem + name_stem_in_release = binary_name_stem.replace( + latest_sem_ver, second_last_sem_ver + ) + + # download and rename + for file_ext in (".zip", ".tar.gz"): + assets_url = f"https://github.com/bytecodealliance/wasm-micro-runtime/releases/download/{release_name}/{name_stem_in_release}{file_ext}" + local_path = f"{binary_name_stem}{file_ext}" + print(f"::notice::download from {assets_url} and save as {local_path}...") + urllib.request.urlretrieve(assets_url, local_path) + return True + except HTTPError as error: + print(error.status, error.reason) + except URLError as error: + print(error.reason) + except TimeoutError: + print("Request timeout") + + return False + + +def main(): + parser = argparse.ArgumentParser( + description="Reuse binaries of the latest release if no more modification on the_path since last_commit" + ) + parser.add_argument("working_directory", type=str) + parser.add_argument("--binary_name_stem", type=str) + parser.add_argument("--last_commit", type=str) + parser.add_argument("--the_path", type=str) + args = parser.parse_args() + + last_commit = get_last_commit(args.the_path, args.working_directory) + if last_commit == args.last_commit: + return download_binaries(args.binary_name_stem, args.working_directory) + else: + return False + + +if __name__ == "__main__": + # use output to indicate results + # echo "result=${result}" >> "$GITHUB_OUTPUT" + with open(os.environ.get("GITHUB_OUTPUT"), 'a') as output_file: + output_file.write("result=hit\n" if main() else "result=not-hit\n") + + # always return 0 + sys.exit(0) diff --git a/.github/workflows/build_docker_images.yml b/.github/workflows/build_docker_images.yml new file mode 100644 index 000000000..7b101d2d2 --- /dev/null +++ b/.github/workflows/build_docker_images.yml @@ -0,0 +1,48 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +name: Create and publish Docker images + +on: + workflow_call: + inputs: + ver_num: + description: a semantic version number. + type: string + required: true + +jobs: + build-and-push-images: + runs-on: ubuntu-22.04 + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Downcase github actor + id: downcase_github_actor + uses: ASzc/change-string-case-action@v2 + with: + string: ${{ github.actor }} + + - name: Login to the Container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ steps.downcase_github_actor.outputs.lowercase }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image(wasm-toolchain:${{ inputs.ver_num }}) to Container registry + run: | + docker build -t ghcr.io/${{ steps.downcase_github_actor.outputs.lowercase }}/wasm-toolchain:${{ inputs.ver_num }} . + docker push ghcr.io/${{ steps.downcase_github_actor.outputs.lowercase }}/wasm-toolchain:${{ inputs.ver_num }} + working-directory: test-tools/wamr-ide/WASM-Toolchain/Docker + + - name: Build and push Docker image(wasm-debug-server:${{ inputs.ver_num }}) to Container registry + run: | + docker build -t ghcr.io/${{ steps.downcase_github_actor.outputs.lowercase }}/wasm-debug-server:${{ inputs.ver_num }} . + docker push ghcr.io/${{ steps.downcase_github_actor.outputs.lowercase }}/wasm-debug-server:${{ inputs.ver_num }} + working-directory: test-tools/wamr-ide/WASM-Debug-Server/Docker diff --git a/.github/workflows/build_iwasm_release.yml b/.github/workflows/build_iwasm_release.yml new file mode 100644 index 000000000..9a47c6c4d --- /dev/null +++ b/.github/workflows/build_iwasm_release.yml @@ -0,0 +1,90 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: build iwasm release + +on: + workflow_call: + inputs: + arch: + description: arch of the release + type: string + required: false + default: x86_64 + cwd: + description: workfing directory + type: string + required: true + runner: + description: OS of compilation + type: string + required: true + upload_url: + description: a semantic version number. it is required when `release` is true. + type: string + required: false + ver_num: + description: a semantic version number. it is required when `release` is true. + type: string + required: false + +jobs: + build: + runs-on: ${{ inputs.runner }} + steps: + - uses: actions/checkout@v3 + + - name: generate iwasm binary release + run: | + cmake -S . -B build \ + -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_JIT=0 \ + -DWAMR_BUILD_CUSTOM_NAME_SECTION=0 \ + -DWAMR_BUILD_DEBUG_INTERP=0 \ + -DWAMR_BUILD_DEBUG_AOT=0 \ + -DWAMR_BUILD_DUMP_CALL_STACK=0 \ + -DWAMR_BUILD_LIBC_UVWASI=0 \ + -DWAMR_BUILD_LIBC_EMCC=0 \ + -DWAMR_BUILD_LIB_RATS=0 \ + -DWAMR_BUILD_LOAD_CUSTOM_SECTION=0 \ + -DWAMR_BUILD_MEMORY_PROFILING=0 \ + -DWAMR_BUILD_MINI_LOADER=0 \ + -DWAMR_BUILD_MULTI_MODULE=0 \ + -DWAMR_BUILD_PERF_PROFILING=0 \ + -DWAMR_BUILD_SPEC_TEST=0 \ + -DWAMR_BUILD_BULK_MEMORY=1 \ + -DWAMR_BUILD_LIB_PTHREAD=1 \ + -DWAMR_BUILD_LIB_PTHREAD_SEMAPHORE=1 \ + -DWAMR_BUILD_LIBC_BUILTIN=1 \ + -DWAMR_BUILD_LIBC_WASI=1 \ + -DWAMR_BUILD_REF_TYPES=1 \ + -DWAMR_BUILD_SIMD=1 \ + -DWAMR_BUILD_SHARED_MEMORY=1 \ + -DWAMR_BUILD_TAIL_CALL=1 \ + -DWAMR_BUILD_THREAD_MGR=1 + cmake --build build --config Release --parallel 4 + working-directory: ${{ inputs.cwd }} + + - name: compress the binary + run: | + tar czf iwasm-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz iwasm + zip iwasm-${{ inputs.ver_num }}-${{ inputs.runner }}.zip iwasm + working-directory: ${{ inputs.cwd }}/build + + - name: upload release tar.gz + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: ${{ inputs.cwd }}/build/iwasm-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz + asset_name: iwasm-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: ${{ inputs.cwd }}/build/iwasm-${{ inputs.ver_num }}-${{ inputs.runner }}.zip + asset_name: iwasm-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/build_llvm_libraries.yml b/.github/workflows/build_llvm_libraries.yml new file mode 100644 index 000000000..6eaa2be7c --- /dev/null +++ b/.github/workflows/build_llvm_libraries.yml @@ -0,0 +1,39 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: Reusable workflow-build_llvm_libraries + +on: + workflow_call: + inputs: + runs-on: + required: true + type: string + +jobs: + build_llvm_libraries: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: ${{ fromJson(inputs.runs-on) }} + + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: Cache LLVM libraries + id: cache_llvm + uses: actions/cache@v3 + 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.os }}-build-llvm_libraries_ex + + - name: Build llvm + id: build_llvm + if: ${{ steps.cache_llvm.outputs.cache-hit != 'true' }} + run: /usr/bin/env python3 ./build_llvm.py --arch X86 WebAssembly + working-directory: build-scripts diff --git a/.github/workflows/build_wamr_lldb.yml b/.github/workflows/build_wamr_lldb.yml new file mode 100644 index 000000000..6106fb42d --- /dev/null +++ b/.github/workflows/build_wamr_lldb.yml @@ -0,0 +1,181 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: build wamr lldb + +on: + workflow_call: + inputs: + arch: + description: arch of the release + type: string + required: false + default: x86_64 + runner: + description: OS of compilation + type: string + required: true + upload_url: + description: upload binary assets to the URL of release + type: string + required: true + ver_num: + description: a semantic version number + type: string + required: true + +jobs: + try_reuse: + uses: ./.github/workflows/reuse_latest_release_binaries.yml + with: + binary_name_stem: "wamr-lldb-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}" + last_commit: "ea63ba4bd010c2285623ad4acc0262a4d63bcfea" + the_path: "./build-scripts/lldb-wasm.patch" + upload_url: ${{ inputs.upload_url }} + + build: + needs: try_reuse + if: needs.try_reuse.outputs.result != 'hit' + runs-on: ${{ inputs.runner }} + steps: + - uses: actions/checkout@v3 + + - name: Cache build + id: lldb_build_cache + uses: actions/cache@v3 + with: + path: | + ./core/deps/llvm-project/build/bin + ./core/deps/llvm-project/build/include + ./core/deps/llvm-project/build/lib + ./core/deps/llvm-project/build/libexec + ./core/deps/llvm-project/build/share + ./core/deps/llvm-project/lldb/tools/ + ./core/deps/llvm-project/inst/ + key: ${{inputs.arch}}-${{ inputs.runner }}-lldb_build + + - name: setup xcode macos + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'macos') + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + + # Remove xCode command line tools, to prevent duplicate symbol compilation failures + - name: install utils macos + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'macos') + run: | + brew install swig cmake ninja libedit + sudo rm -rf /Library/Developer/CommandLineTools + + - name: intsall utils ubuntu + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'ubuntu') + run: sudo apt update && sudo apt-get install -y lld ninja-build + + # `git clone` takes ~7m + - name: download llvm + if: steps.lldb_build_cache.outputs.cache-hit != 'true' + 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/ + + - name: apply wamr patch + if: steps.lldb_build_cache.outputs.cache-hit != 'true' + 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 + + - name: build lldb ubuntu + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'ubuntu') + run: | + echo "start to build lldb..." + mkdir -p inst + cmake -S ./llvm -B build \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=../inst \ + -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lldb" \ + -DLLVM_TARGETS_TO_BUILD=X86 \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -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_ENABLE_BINDINGS:BOOL=OFF -DLLVM_INCLUDE_BENCHMARKS:BOOL=OFF \ + -DLLVM_INCLUDE_DOCS:BOOL=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF \ + -DLLVM_INCLUDE_TESTS:BOOL=OFF -DLLVM_ENABLE_LLD:BOOL=ON + cmake --build build --target lldb install --parallel $(nproc) + working-directory: core/deps/llvm-project + + - name: build lldb macos + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'macos') + run: | + echo "start to build lldb..." + mkdir -p inst + cmake -S ./llvm -B build \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=../inst \ + -DCMAKE_BUILD_TYPE:STRING="Release" \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DLLVM_ENABLE_PROJECTS="clang;lldb" \ + -DLLVM_INCLUDE_TESTS:BOOL=OFF \ + -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF \ + -DLLVM_BUILD_BENCHMARKS:BOOL=OFF \ + -DLLVM_BUILD_DOCS:BOOL=OFF \ + -DLLVM_BUILD_LLVM_DYLIB:BOOL=OFF \ + -DLLVM_ENABLE_BINDINGS:BOOL=OFF \ + -DLLVM_TARGETS_TO_BUILD:STRING="X86;WebAssembly" \ + -DLLVM_ENABLE_LIBXML2:BOOL=ON \ + -DLLDB_ENABLE_PYTHON:BOOL=OFF \ + -DLLDB_BUILD_FRAMEWORK:BOOL=OFF + cmake --build build --target lldb install --parallel $(nproc) + working-directory: core/deps/llvm-project + + - name: pack a distribution + if: steps.lldb_build_cache.outputs.cache-hit != 'true' + run: | + mkdir -p inst/bin + mkdir -p inst/lib + cp build/bin/lldb* inst/bin + cp lldb/tools/lldb-vscode/package.json inst + cp -r lldb/tools/lldb-vscode/syntaxes/ inst + working-directory: core/deps/llvm-project + + - name: pack ubuntu specific libraries + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'ubuntu') + run: | + cp build/lib/liblldb*.so inst/lib + cp build/lib/liblldb*.so.* inst/lib + working-directory: core/deps/llvm-project + + - name: pack macos specific libraries + if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'macos') + run: | + cp build/lib/liblldb*.dylib inst/lib + working-directory: core/deps/llvm-project + + - name: compress the binary + run: | + tar czf wamr-lldb-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz inst + zip -r wamr-lldb-${{ inputs.ver_num }}-${{ inputs.runner }}.zip inst + working-directory: core/deps/llvm-project + + - name: upload release tar.gz + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: core/deps/llvm-project/wamr-lldb-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz + asset_name: wamr-lldb-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: core/deps/llvm-project/wamr-lldb-${{ inputs.ver_num }}-${{ inputs.runner }}.zip + asset_name: wamr-lldb-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/build_wamr_sdk.yml b/.github/workflows/build_wamr_sdk.yml new file mode 100644 index 000000000..fff6d85df --- /dev/null +++ b/.github/workflows/build_wamr_sdk.yml @@ -0,0 +1,78 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: build wamr-sdk + +on: + workflow_call: + inputs: + arch: + description: arch of the release + type: string + required: false + default: x86_64 + config_file: + description: warm-sdk config file path + type: string + required: true + runner: + description: OS of compilation + type: string + required: true + upload_url: + description: upload binary assets to the URL of release + type: string + required: true + ver_num: + description: a semantic version number + type: string + required: true + wasi_sdk_url: + description: download WASI_SDK from this URL + type: string + required: true + +jobs: + build: + runs-on: ${{ inputs.runner }} + steps: + - uses: actions/checkout@v3 + + - name: download and install wasi-sdk + run: | + cd /opt + basename=$(basename ${{ inputs.wasi_sdk_url }}) + sudo wget --progress=dot:giga ${{ inputs.wasi_sdk_url }} + sudo tar -xzf ${basename} + sudo rm ${basename} + sudo mv wasi-sdk-* wasi-sdk + + - name: generate wamr-sdk release + run: | + ./build_sdk.sh -n wamr-sdk -x $(pwd)/${{ inputs.config_file }} + working-directory: wamr-sdk + + - name: compress the binary + run: | + tar czf wamr-sdk-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz wamr-sdk + zip -r wamr-sdk-${{ inputs.ver_num }}-${{ inputs.runner }}.zip wamr-sdk + working-directory: wamr-sdk/out + + - name: upload release tar.gz + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: wamr-sdk/out/wamr-sdk-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz + asset_name: wamr-sdk-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: wamr-sdk/out/wamr-sdk-${{ inputs.ver_num }}-${{ inputs.runner }}.zip + asset_name: wamr-sdk-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/build_wamr_vscode_ext.yml b/.github/workflows/build_wamr_vscode_ext.yml new file mode 100644 index 000000000..cfbf3d405 --- /dev/null +++ b/.github/workflows/build_wamr_vscode_ext.yml @@ -0,0 +1,66 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: build wamr-ide vscode extension + +on: + workflow_call: + inputs: + upload_url: + description: upload binary assets to the URL of release + type: string + required: true + ver_num: + description: a semantic version number. + type: string + required: true + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js 14.x + uses: actions/setup-node@v3 + with: + node-version: 14.x + + - name: set vscode extension to correct version + run: | + npm install -g json + json -I -f package.json -e "this.version=\"${{ inputs.ver_num }}\"" + working-directory: test-tools/wamr-ide/VSCode-Extension + + - name: generate wamr ide vscode extension + run: | + npm install -g vsce + rm -rf node_modules + npm install + vsce package + working-directory: test-tools/wamr-ide/VSCode-Extension + + - name: compress the vscode extension + run: | + tar czf wamr_ide-${{ inputs.ver_num }}.tar.gz wamride-*.vsix + zip wamr_ide-${{ inputs.ver_num }}.zip wamride-*.vsix + working-directory: test-tools/wamr-ide/VSCode-Extension + + - name: upload release tar.gz + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: test-tools/wamr-ide/VSCode-Extension/wamr_ide-${{ inputs.ver_num }}.tar.gz + asset_name: wamr_ide-${{ inputs.ver_num }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: test-tools/wamr-ide/VSCode-Extension/wamr_ide-${{ inputs.ver_num }}.zip + asset_name: wamr_ide-${{ inputs.ver_num }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/build_wamrc.yml b/.github/workflows/build_wamrc.yml new file mode 100644 index 000000000..829b036ea --- /dev/null +++ b/.github/workflows/build_wamrc.yml @@ -0,0 +1,90 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: build wamrc + +on: + workflow_call: + inputs: + arch: + description: arch of the release + type: string + required: false + default: x86_64 + llvm_cache_key: + description: the cache key of llvm libraries + type: string + required: true + release: + description: it is a part of the release process + type: boolean + required: true + runner: + description: OS of compilation + type: string + required: true + upload_url: + description: a semantic version number. it is required when `release` is true. + type: string + required: false + ver_num: + description: a semantic version number. it is required when `release` is true. + type: string + required: false + +jobs: + build: + runs-on: ${{ inputs.runner }} + steps: + - uses: actions/checkout@v3 + + - name: get cached LLVM libraries + id: cache_llvm + uses: actions/cache@v3 + 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: ${{ inputs.llvm_cache_key }} + + - name: Build llvm and clang from source + if: steps.cache_llvm.outputs.cache-hit != 'true' + run: /usr/bin/env python3 ./build_llvm.py --arch X86 + working-directory: build-scripts + + - name: generate wamrc binary release + run: | + cmake -S . -B build + cmake --build build --config Release --parallel 4 + working-directory: wamr-compiler + + - name: compress the binary + if: inputs.release + run: | + tar czf wamrc-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz wamrc + zip wamrc-${{ inputs.ver_num }}-${{ inputs.runner }}.zip wamrc + working-directory: wamr-compiler/build + + - name: upload release tar.gz + if: inputs.release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: wamr-compiler/build/wamrc-${{ inputs.ver_num }}-${{ inputs.runner }}.tar.gz + asset_name: wamrc-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + if: inputs.release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: wamr-compiler/build/wamrc-${{ inputs.ver_num }}-${{ inputs.runner }}.zip + asset_name: wamrc-${{ inputs.ver_num }}-${{ inputs.arch }}-${{ inputs.runner }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/codeing_guildelines.yml b/.github/workflows/codeing_guildelines.yml index f06892631..bc66436c8 100644 --- a/.github/workflows/codeing_guildelines.yml +++ b/.github/workflows/codeing_guildelines.yml @@ -15,18 +15,7 @@ concurrency: cancel-in-progress: true jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: ubuntu-latest - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - complinace_job: - needs: cancel_previous runs-on: ubuntu-latest steps: - name: checkout diff --git a/.github/workflows/compilation_on_android_ubuntu.yml b/.github/workflows/compilation_on_android_ubuntu.yml index 303675bc9..2fea0c994 100644 --- a/.github/workflows/compilation_on_android_ubuntu.yml +++ b/.github/workflows/compilation_on_android_ubuntu.yml @@ -6,20 +6,36 @@ name: compilation on android, ubuntu-20.04, ubuntu-22.04 on: # will be triggered on PR events pull_request: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_android_ubuntu.yml" + types: + - opened + - synchronize + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # will be triggered on push events push: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_android_ubuntu.yml" + branches: + - main + - "dev/**" + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # allow to be triggered manually workflow_dispatch: @@ -34,8 +50,8 @@ env: AOT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=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_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_JIT=0 -DWAMR_BUILD_LAZY_JIT=0" - LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_JIT=1 -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_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_JIT=1 -DWAMR_BUILD_LAZY_JIT=0" # LLVM LLVM_CACHE_SUFFIX: "build-llvm_libraries_ex" # For Spec Test @@ -46,112 +62,23 @@ env: X86_32_TARGET_TEST_OPTIONS: "-m x86_32 -P" jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04, ubuntu-22.04] - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - - # set different traffic lights based on the current repo and the running OS. - # according to light colors, the workflow will run different jobs - # it is used to separate between the public repo and the private repo - check_repo: - needs: cancel_previous - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04, ubuntu-22.04] - outputs: - traffic_light_on_ubuntu_2004: ${{ steps.do_check_on_ubuntu_2004.outputs.light }} - traffic_light_on_ubuntu_2204: ${{ steps.do_check_on_ubuntu_2204.outputs.light }} - steps: - - name: do_check_on_ubuntu_2004 - id: do_check_on_ubuntu_2004 - if: ${{ matrix.os == 'ubuntu-20.04' }} - run: | - if [[ ${{ github.repository }} == */wasm-micro-runtime ]]; then - echo "::set-output name=light::green" - else - echo "::set-output name=light::red" - fi - - - name: do_check_on_ubuntu_2204 - id: do_check_on_ubuntu_2204 - if: ${{ matrix.os == 'ubuntu-22.04' }} - run: | - if [[ ${{ github.repository }} == */wasm-micro-runtime ]]; then - echo "::set-output name=light::green" - else - echo "::set-output name=light::green" - fi - build_llvm_libraries: - needs: check_repo - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04, ubuntu-22.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - - os: ubuntu-22.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2204 }} - steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - - name: checkout - if: ${{ matrix.light == 'green' }} - uses: actions/checkout@v3 - - - name: Cache LLVM libraries - id: cache_llvm - if: ${{ matrix.light == 'green' }} - uses: actions/cache@v3 - 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.os }}-${{ env.LLVM_CACHE_SUFFIX }} - - - name: Build llvm and clang from source - id: build_llvm - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} - run: /usr/bin/env python3 ./build_llvm.py --arch X86 WebAssembly --project clang lldb - working-directory: build-scripts + uses: ./.github/workflows/build_llvm_libraries.yml + with: + runs-on: "['ubuntu-20.04', 'ubuntu-22.04']" build_wamrc: - needs: [build_llvm_libraries, check_repo] + needs: [build_llvm_libraries] runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04, ubuntu-22.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - - os: ubuntu-22.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2204 }} steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Get LLVM libraries id: cache_llvm - if: ${{ matrix.light == 'green' }} uses: actions/cache@v3 with: path: | @@ -163,11 +90,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} + if: steps.cache_llvm.outputs.cache-hit != 'true' run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: Build wamrc - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. @@ -175,7 +101,7 @@ jobs: working-directory: wamr-compiler build_iwasm: - needs: [build_llvm_libraries, check_repo] + needs: [build_llvm_libraries] runs-on: ${{ matrix.os }} strategy: matrix: @@ -184,8 +110,8 @@ jobs: $AOT_BUILD_OPTIONS, $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - $LLVM_EAGER_JIT_BUILD_OPTIONS, $LLVM_LAZY_JIT_BUILD_OPTIONS, + $LLVM_EAGER_JIT_BUILD_OPTIONS, ] make_options_feature: [ # Features @@ -210,10 +136,10 @@ jobs: # uncompatiable feature and platform # uncompatiable mode and feature # MULTI_MODULE only on INTERP mode - - make_options_run_mode: $LLVM_EAGER_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: $AOT_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1" # SIMD only on JIT/AOT mode @@ -224,10 +150,10 @@ jobs: # 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: $LLVM_EAGER_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: $FAST_INTERP_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1" # DEBUG_AOT only on JIT/AOT mode @@ -236,34 +162,25 @@ jobs: - 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: $LLVM_EAGER_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" # 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: $LLVM_EAGER_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" - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - - os: ubuntu-22.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2204 }} + - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS + make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1" steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 # only download llvm cache when needed - name: Get LLVM libraries id: cache_llvm - if: (matrix.light == 'green') && (endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')) + if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') uses: actions/cache@v3 with: path: | @@ -275,11 +192,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: (matrix.light == 'green') && (endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')) && (steps.cache_llvm.outputs.cache-hit != 'true') + if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.cache_llvm.outputs.cache-hit != 'true') run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: Build iwasm - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }} @@ -287,39 +203,34 @@ jobs: working-directory: product-mini/platforms/${{ matrix.platform }} build_samples_wasm_c_api: - needs: [build_iwasm, build_llvm_libraries, build_wamrc, check_repo] + needs: [build_iwasm, build_llvm_libraries, build_wamrc] runs-on: ${{ matrix.os }} strategy: matrix: make_options: [ # Running mode - $AOT_BUILD_OPTIONS, $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - $LLVM_EAGER_JIT_BUILD_OPTIONS, $LLVM_LAZY_JIT_BUILD_OPTIONS, + $LLVM_EAGER_JIT_BUILD_OPTIONS, + $AOT_BUILD_OPTIONS, ] os: [ubuntu-20.04, ubuntu-22.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz - - os: ubuntu-22.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2204 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz + wasi_sdk_release: + [ + "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz", + ] + wabt_release: + [ + "https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz", + ] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Get LLVM libraries id: cache_llvm - if: (matrix.light == 'green') && (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) + if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) uses: actions/cache@v3 with: path: | @@ -331,11 +242,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: (matrix.light == 'green') && (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) && (steps.cache_llvm.outputs.cache-hit != 'true') + if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) && (steps.cache_llvm.outputs.cache-hit != 'true') run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -343,7 +253,7 @@ jobs: sudo mv wabt-1.0.24 wabt - name: Build wamrc - if: (matrix.light == 'green') && (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) + if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) run: | mkdir build && cd build cmake .. @@ -351,7 +261,6 @@ jobs: working-directory: wamr-compiler - name: Build Sample [wasm-c-api] - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options }} @@ -369,29 +278,24 @@ jobs: working-directory: samples/wasm-c-api build_samples_others: - needs: [build_iwasm, check_repo] + needs: [build_iwasm] runs-on: ${{ matrix.os }} strategy: matrix: - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz - - os: ubuntu-22.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2204 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz + os: [ubuntu-20.04, ubuntu-22.04] + wasi_sdk_release: + [ + "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz", + ] + wabt_release: + [ + "https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz", + ] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: download and install wasi-sdk - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wasi_sdk_release }} @@ -399,7 +303,6 @@ jobs: sudo mv wasi-sdk-12.0 wasi-sdk - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -407,14 +310,12 @@ jobs: sudo mv wabt-1.0.24 wabt - name: Build Sample [basic] - if: ${{ matrix.light == 'green' }} run: | cd samples/basic ./build.sh ./run.sh - name: Build Sample [file] - if: ${{ matrix.light == 'green' }} run: | cd samples/file mkdir build && cd build @@ -423,7 +324,6 @@ jobs: ./src/iwasm -f wasm-app/file.wasm -d . - name: Build Sample [multi-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-thread mkdir build && cd build @@ -432,7 +332,6 @@ jobs: ./iwasm wasm-apps/test.wasm - name: Build Sample [multi-module] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-module mkdir build && cd build @@ -441,7 +340,6 @@ jobs: ./multi_module - name: Build Sample [spawn-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/spawn-thread mkdir build && cd build @@ -450,7 +348,6 @@ jobs: ./spawn_thread - name: Build Sample [ref-types] - if: ${{ matrix.light == 'green' }} run: | cd samples/ref-types mkdir build && cd build @@ -458,57 +355,63 @@ jobs: cmake --build . --config Release --parallel 4 ./hello - spec_test_default: - needs: [build_iwasm, build_llvm_libraries, build_wamrc, check_repo] + - name: Build Sample [simple] + run: | + ./build.sh -p host-interp + python3 ./sample_test_run.py $(pwd)/out + exit $? + working-directory: ./samples/simple + + spec_test: + needs: [build_iwasm, build_llvm_libraries, build_wamrc] runs-on: ubuntu-20.04 strategy: matrix: - test_option: [$DEFAULT_TEST_OPTIONS] - steps: - - name: checkout - uses: actions/checkout@v3 - - - name: Get LLVM libraries - id: cache_llvm - uses: actions/cache@v3 - 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: ubuntu-20.04-${{ env.LLVM_CACHE_SUFFIX }} - - - name: Quit if cache miss - if: steps.cache_llvm.outputs.cache-hit != 'true' - run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - - - name: install Ninja - run: sudo apt install -y ninja-build - - - name: run spec tests - run: ./test_wamr.sh ${{ matrix.test_option }} - working-directory: ./tests/wamr-test-suites - - spec_test_extra: - if: ${{ endsWith(github.repository, 'wasm-micro-runtime') }} - needs: [build_iwasm, build_llvm_libraries, build_wamrc, check_repo] - runs-on: ubuntu-20.04 - strategy: - matrix: - running_mode: ["classic-interp", "fast-interp", "jit", "aot"] + running_mode: + ["classic-interp", "fast-interp", "jit", "aot", "fast-jit"] test_option: [ + $DEFAULT_TEST_OPTIONS, $MULTI_MODULES_TEST_OPTIONS, $SIMD_TEST_OPTIONS, $THREADS_TEST_OPTIONS, ] + exclude: + # uncompatiable modes and features + # classic-interp and fast-interp don't support simd + - running_mode: "classic-interp" + test_option: $SIMD_TEST_OPTIONS + - running_mode: "fast-interp" + test_option: $SIMD_TEST_OPTIONS + # aot and jit don't support multi module + - running_mode: "aot" + test_option: $MULTI_MODULES_TEST_OPTIONS + - running_mode: "jit" + test_option: $MULTI_MODULES_TEST_OPTIONS + # fast-jit is only tested on default mode, exclude other three + - running_mode: "fast-jit" + test_option: $MULTI_MODULES_TEST_OPTIONS + - running_mode: "fast-jit" + test_option: $SIMD_TEST_OPTIONS + - running_mode: "fast-jit" + test_option: $THREADS_TEST_OPTIONS steps: - name: checkout uses: actions/checkout@v3 + - name: set env variable(if llvm are used) + if: matrix.running_mode == 'aot' || matrix.running_mode == '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.running_mode != 'fast-jit' && matrix.running_mode != '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: cache_llvm uses: actions/cache@v3 with: @@ -521,53 +424,28 @@ jobs: key: ubuntu-20.04-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: steps.cache_llvm.outputs.cache-hit != 'true' + if: env.USE_LLVM == 'true' && steps.cache_llvm.outputs.cache-hit != 'true' run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: install Ninja run: sudo apt install -y ninja-build - - name: run spec tests + - name: run spec tests default and extra run: ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }} working-directory: ./tests/wamr-test-suites - spec_test_x86_32: - if: ${{ endsWith(github.repository, 'wasm-micro-runtime') }} - needs: [build_iwasm, build_llvm_libraries, build_wamrc, check_repo] - runs-on: ubuntu-20.04 - strategy: - matrix: - running_mode: ["classic-interp", "fast-interp", "jit", "aot"] - test_option: [$DEFAULT_TEST_OPTIONS, $THREADS_TEST_OPTIONS] - steps: - - name: checkout - uses: actions/checkout@v3 - - - name: Get LLVM libraries - id: cache_llvm - uses: actions/cache@v3 - 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: ubuntu-20.04-${{ env.LLVM_CACHE_SUFFIX }} - - - name: Quit if cache miss - if: steps.cache_llvm.outputs.cache-hit != 'true' - run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - - - name: install Ninja and x32 support libraries + #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/20.04/prod && sudo apt-get update && - sudo apt install -y g++-multilib lib32gcc-9-dev ninja-build + sudo apt install -y g++-multilib lib32gcc-9-dev - - name: run spec tests + - name: run spec tests x86_32 + if: env.TEST_ON_X86_32 == 'true' run: ./test_wamr.sh ${{ env.X86_32_TARGET_TEST_OPTIONS }} ${{ matrix.test_option }} -t ${{ matrix.running_mode }} working-directory: ./tests/wamr-test-suites diff --git a/.github/workflows/compilation_on_macos.yml b/.github/workflows/compilation_on_macos.yml index 3a394cc02..73ebec892 100644 --- a/.github/workflows/compilation_on_macos.yml +++ b/.github/workflows/compilation_on_macos.yml @@ -6,20 +6,36 @@ name: compilation on macos-latest on: # will be triggered on PR events pull_request: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_macos.yml" + types: + - opened + - synchronize + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # will be triggered on push events push: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_macos.yml" + branches: + - main + - "dev/**" + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # allow to be triggered manually workflow_dispatch: @@ -30,106 +46,31 @@ concurrency: 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_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_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_JIT=0 -DWAMR_BUILD_LAZY_JIT=0" - LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_JIT=1 -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_JIT=1 -DWAMR_BUILD_LAZY_JIT=1" - # LLVM + LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0" LLVM_CACHE_SUFFIX: "build-llvm_libraries_ex" jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-latest] - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - - # set different traffic lights based on the current repo and the running OS. - # according to light colors, the workflow will run different jobs - check_repo: - needs: cancel_previous - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-latest] - outputs: - traffic_light: ${{ steps.do_check.outputs.light }} - steps: - - name: do_check - id: do_check - if: ${{ matrix.os == 'macos-latest' }} - run: | - if [[ ${{ github.repository }} == */wasm-micro-runtime ]]; then - echo "::set-output name=light::green" - else - echo "::set-output name=light::red" - fi - build_llvm_libraries: - needs: check_repo - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-latest] - include: - - os: macos-latest - light: ${{ needs.check_repo.outputs.traffic_light }} - steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - - name: checkout - if: ${{ matrix.light == 'green' }} - uses: actions/checkout@v3 - - - name: Cache LLVM libraries - id: cache_llvm - if: ${{ matrix.light == 'green' }} - uses: actions/cache@v3 - 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.os }}-${{ env.LLVM_CACHE_SUFFIX }} - - - name: Build llvm and clang from source - id: build_llvm - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} - run: /usr/bin/env python3 ./build_llvm.py --arch X86 WebAssembly - working-directory: build-scripts + uses: ./.github/workflows/build_llvm_libraries.yml + with: + runs-on: "['macos-latest']" build_wamrc: - needs: [build_llvm_libraries, check_repo] + needs: [build_llvm_libraries] runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest] - include: - - os: macos-latest - light: ${{ needs.check_repo.outputs.traffic_light }} steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Get LLVM libraries id: cache_llvm - if: ${{ matrix.light == 'green' }} uses: actions/cache@v3 with: path: | @@ -141,11 +82,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} + if: steps.cache_llvm.outputs.cache-hit != 'true' run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: Build wamrc - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. @@ -153,7 +93,7 @@ jobs: working-directory: wamr-compiler build_iwasm: - needs: [build_llvm_libraries, check_repo] + needs: [build_llvm_libraries] runs-on: ${{ matrix.os }} strategy: matrix: @@ -162,8 +102,8 @@ jobs: $AOT_BUILD_OPTIONS, $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - $LLVM_EAGER_JIT_BUILD_OPTIONS, $LLVM_LAZY_JIT_BUILD_OPTIONS, + $LLVM_EAGER_JIT_BUILD_OPTIONS, ] make_options_feature: [ # Features @@ -189,10 +129,10 @@ jobs: # uncompatiable feature and platform # uncompatiable mode and feature # MULTI_MODULE only on INTERP mode - - make_options_run_mode: $LLVM_EAGER_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: $AOT_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1" # SIMD only on JIT/AOT mode @@ -203,10 +143,10 @@ jobs: # 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: $LLVM_EAGER_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: $FAST_INTERP_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1" # DEBUG_AOT only on JIT/AOT mode @@ -215,32 +155,25 @@ jobs: - 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: $LLVM_EAGER_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" # 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: $LLVM_EAGER_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" - include: - - os: macos-latest - light: ${{ needs.check_repo.outputs.traffic_light }} + - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS + make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1" steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 # only download llvm cache when needed - name: Get LLVM libraries id: cache_llvm - if: (matrix.light == 'green') && (endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')) + if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') uses: actions/cache@v3 with: path: | @@ -252,11 +185,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: (matrix.light == 'green') && (endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')) && (steps.cache_llvm.outputs.cache-hit != 'true') + if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.cache_llvm.outputs.cache-hit != 'true') run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: Build iwasm - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }} @@ -264,35 +196,27 @@ jobs: working-directory: product-mini/platforms/${{ matrix.platform }} build_samples_wasm_c_api: - needs: [build_iwasm, check_repo] + needs: [build_iwasm] runs-on: ${{ matrix.os }} strategy: matrix: make_options: [ - # Running mode + # Running modes supported $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - # doesn't support - #$AOT_BUILD_OPTIONS, - #$LLVM_EAGER_JIT_BUILD_OPTIONS, + # Running modes unsupported #$LLVM_LAZY_JIT_BUILD_OPTIONS, + #$LLVM_EAGER_JIT_BUILD_OPTIONS, + #$AOT_BUILD_OPTIONS, ] os: [macos-latest] - include: - - os: macos-latest - light: ${{ needs.check_repo.outputs.traffic_light }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz + wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz"] + wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -300,7 +224,6 @@ jobs: sudo mv wabt-1.0.24 wabt - name: Build Sample [wasm-c-api] - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options }} @@ -318,25 +241,18 @@ jobs: working-directory: samples/wasm-c-api build_samples_others: - needs: [build_iwasm, check_repo] + needs: [build_iwasm] runs-on: ${{ matrix.os }} strategy: matrix: - include: - - os: macos-latest - light: ${{ needs.check_repo.outputs.traffic_light }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz + os: [macos-latest] + wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz"] + wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: download and install wasi-sdk - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wasi_sdk_release }} @@ -344,7 +260,6 @@ jobs: sudo mv wasi-sdk-12.0 wasi-sdk - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -352,14 +267,12 @@ jobs: sudo mv wabt-1.0.24 wabt - name: Build Sample [basic] - if: ${{ matrix.light == 'green' }} run: | cd samples/basic ./build.sh ./run.sh - name: Build Sample [file] - if: ${{ matrix.light == 'green' }} run: | cd samples/file mkdir build && cd build @@ -368,7 +281,6 @@ jobs: ./src/iwasm -f wasm-app/file.wasm -d . - name: Build Sample [multi-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-thread mkdir build && cd build @@ -377,7 +289,6 @@ jobs: ./iwasm wasm-apps/test.wasm - name: Build Sample [multi-module] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-module mkdir build && cd build @@ -386,7 +297,6 @@ jobs: ./multi_module - name: Build Sample [spawn-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/spawn-thread mkdir build && cd build @@ -395,7 +305,6 @@ jobs: ./spawn_thread - name: Build Sample [ref-types] - if: ${{ matrix.light == 'green' }} run: | cd samples/ref-types mkdir build && cd build diff --git a/.github/workflows/compilation_on_nuttx.yml b/.github/workflows/compilation_on_nuttx.yml index 41b075fa4..bb49551d1 100644 --- a/.github/workflows/compilation_on_nuttx.yml +++ b/.github/workflows/compilation_on_nuttx.yml @@ -6,18 +6,36 @@ name: compilation on nuttx on: # will be triggered on PR events pull_request: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" + types: + - opened + - synchronize + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # will be triggered on push events push: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" + branches: + - main + - "dev/**" + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # allow to be triggered manually workflow_dispatch: @@ -28,21 +46,11 @@ concurrency: cancel-in-progress: true jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: ubuntu-22.04 - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - build_iwasm_on_nuttx: runs-on: ubuntu-22.04 strategy: matrix: - nuttx_board_config : [ + nuttx_board_config: [ # x64 "boards/sim/sim/sim/configs/nsh", # cortex-m0 @@ -72,17 +80,17 @@ jobs: steps: - name: Install Utilities - run: | + run: | sudo apt install -y kconfig-frontends-nox genromfs pip3 install pyelftools pip3 install cxxfilt - name: Install ARM Compilers - if: ${{ contains(matrix.nuttx_board_config, 'arm') }} + if: contains(matrix.nuttx_board_config, 'arm') run: sudo apt install -y gcc-arm-none-eabi - name: Install RISC-V Compilers - if: ${{ contains(matrix.nuttx_board_config, 'risc-v') }} + if: contains(matrix.nuttx_board_config, 'risc-v') run: sudo apt install -y gcc-riscv64-unknown-elf - name: Checkout NuttX @@ -104,7 +112,7 @@ jobs: path: apps/interpreters/wamr/wamr - name: Enable WAMR for NuttX - run: | + run: | find nuttx/boards -name defconfig | xargs sed -i '$a\CONFIG_EOL_IS_CR=y\n${{ matrix.wamr_config_option }}' find nuttx/boards/sim -name defconfig | xargs sed -i '$a\CONFIG_LIBM=y\n' find nuttx/boards/risc-v -name defconfig | xargs sed -i '$a\CONFIG_LIBM=y\n' diff --git a/.github/workflows/compilation_on_sgx.yml b/.github/workflows/compilation_on_sgx.yml index 1525ba7fb..13e4d4bbd 100644 --- a/.github/workflows/compilation_on_sgx.yml +++ b/.github/workflows/compilation_on_sgx.yml @@ -6,20 +6,36 @@ name: compilation on SGX on: # will be triggered on PR events pull_request: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_sgx.yml" + types: + - opened + - synchronize + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # will be triggered on push events push: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_sgx.yml" + branches: + - main + - "dev/**" + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # allow to be triggered manually workflow_dispatch: @@ -30,99 +46,31 @@ concurrency: 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_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_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_JIT=0 -DWAMR_BUILD_LAZY_JIT=0" - LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_JIT=1 -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_JIT=1 -DWAMR_BUILD_LAZY_JIT=1" - # LLVM + LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0" LLVM_CACHE_SUFFIX: "build-llvm_libraries_ex" jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - - # set different traffic lights based on the current repo and the running OS. - # according to light colors, the workflow will run different jobs - check_repo: - needs: cancel_previous - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - outputs: - traffic_light_on_ubuntu_2004: ${{ steps.do_check_on_ubuntu_2004.outputs.light }} - steps: - - name: do_check_on_ubuntu_2004 - id: do_check_on_ubuntu_2004 - if: ${{ matrix.os == 'ubuntu-20.04' }} - run: | - if [[ ${{ github.repository }} == */wasm-micro-runtime ]]; then - echo "::set-output name=light::green" - else - echo "::set-output name=light::green" - fi - build_llvm_libraries: - needs: check_repo - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - - name: checkout - if: ${{ matrix.light == 'green' }} - uses: actions/checkout@v3 - - - name: Cache LLVM libraries - id: cache_llvm - if: ${{ matrix.light == 'green' }} - uses: actions/cache@v3 - 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.os }}-${{ env.LLVM_CACHE_SUFFIX }} - - - name: Build llvm and clang from source - id: build_llvm - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} - run: /usr/bin/env python3 ./build_llvm.py --arch X86 WebAssembly --project clang lldb - working-directory: build-scripts + uses: ./.github/workflows/build_llvm_libraries.yml + with: + runs-on: "['ubuntu-20.04']" build_iwasm: - needs: [check_repo] runs-on: ${{ matrix.os }} strategy: matrix: make_options_run_mode: [ - # Running mode + # Running modes supported $AOT_BUILD_OPTIONS, $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - # doesn't support - #$LLVM_EAGER_JIT_BUILD_OPTIONS, + # Running modes unsupported #$LLVM_LAZY_JIT_BUILD_OPTIONS, + #$LLVM_EAGER_JIT_BUILD_OPTIONS, ] make_options_feature: [ # Features @@ -154,15 +102,8 @@ jobs: # MINI_LOADER only on INTERP mode - make_options_run_mode: $AOT_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1" - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: install SGX SDK and necessary libraries - if: ${{ matrix.light == 'green' }} run: | mkdir -p /opt/intel cd /opt/intel @@ -176,11 +117,9 @@ jobs: source /opt/intel/sgxsdk/environment - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Build iwasm - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }} @@ -188,20 +127,13 @@ jobs: working-directory: product-mini/platforms/${{ matrix.platform }} build_wamrc: - needs: [build_llvm_libraries, check_repo] + needs: [build_llvm_libraries] runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: install SGX SDK and necessary libraries - if: ${{ matrix.light == 'green' }} run: | mkdir -p /opt/intel cd /opt/intel @@ -215,12 +147,10 @@ jobs: source /opt/intel/sgxsdk/environment - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Get LLVM libraries id: cache_llvm - if: ${{ matrix.light == 'green' }} uses: actions/cache@v3 with: path: | @@ -232,11 +162,10 @@ jobs: key: ${{ matrix.os }}-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} + if: steps.cache_llvm.outputs.cache-hit != 'true' run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: Build wamrc - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. @@ -244,35 +173,27 @@ jobs: working-directory: wamr-compiler build_samples_wasm_c_api: - needs: [build_iwasm, check_repo] + needs: [build_iwasm] runs-on: ${{ matrix.os }} strategy: matrix: make_options: [ - # Running mode + # Running modes supported $CLASSIC_INTERP_BUILD_OPTIONS, $FAST_INTERP_BUILD_OPTIONS, - # doesn't support - #$AOT_BUILD_OPTIONS, + # Running modes unsupported #$LLVM_EAGER_JIT_BUILD_OPTIONS, #$LLVM_LAZY_JIT_BUILD_OPTIONS, + #$AOT_BUILD_OPTIONS, ] os: [ubuntu-20.04] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz + wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz"] + wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz"] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -280,7 +201,6 @@ jobs: sudo mv wabt-1.0.24 wabt - name: install SGX SDK and necessary libraries - if: ${{ matrix.light == 'green' }} run: | mkdir -p /opt/intel cd /opt/intel @@ -294,7 +214,6 @@ jobs: source /opt/intel/sgxsdk/environment - name: Build Sample [wasm-c-api] - if: ${{ matrix.light == 'green' }} run: | mkdir build && cd build cmake .. ${{ matrix.make_options }} @@ -312,25 +231,18 @@ jobs: working-directory: samples/wasm-c-api build_samples_others: - needs: [build_iwasm, check_repo] + needs: [build_iwasm] runs-on: ${{ matrix.os }} strategy: matrix: - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} - wasi_sdk_release: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz - wabt_release: https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz + os: [ubuntu-20.04] + wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz"] + wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-ubuntu.tar.gz"] steps: - - name: light status - run: echo "matrix.os=${{ matrix.os }}, light=${{ matrix.light }}" - - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: download and install wasi-sdk - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wasi_sdk_release }} @@ -338,7 +250,6 @@ jobs: sudo mv wasi-sdk-12.0 wasi-sdk - name: download and install wabt - if: ${{ matrix.light == 'green' }} run: | cd /opt sudo wget ${{ matrix.wabt_release }} @@ -346,7 +257,6 @@ jobs: sudo mv wabt-1.0.24 wabt - name: install SGX SDK and necessary libraries - if: ${{ matrix.light == 'green' }} run: | mkdir -p /opt/intel cd /opt/intel @@ -360,14 +270,12 @@ jobs: source /opt/intel/sgxsdk/environment - name: Build Sample [basic] - if: ${{ matrix.light == 'green' }} run: | cd samples/basic ./build.sh ./run.sh - name: Build Sample [file] - if: ${{ matrix.light == 'green' }} run: | cd samples/file mkdir build && cd build @@ -376,7 +284,6 @@ jobs: ./src/iwasm -f wasm-app/file.wasm -d . - name: Build Sample [multi-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-thread mkdir build && cd build @@ -385,7 +292,6 @@ jobs: ./iwasm wasm-apps/test.wasm - name: Build Sample [multi-module] - if: ${{ matrix.light == 'green' }} run: | cd samples/multi-module mkdir build && cd build @@ -394,7 +300,6 @@ jobs: ./multi_module - name: Build Sample [spawn-thread] - if: ${{ matrix.light == 'green' }} run: | cd samples/spawn-thread mkdir build && cd build @@ -403,7 +308,6 @@ jobs: ./spawn_thread - name: Build Sample [ref-types] - if: ${{ matrix.light == 'green' }} run: | cd samples/ref-types mkdir build && cd build @@ -412,22 +316,25 @@ jobs: ./hello spec_test_default: - needs: [build_iwasm, build_llvm_libraries, build_wamrc, check_repo] + needs: [build_iwasm, build_llvm_libraries, build_wamrc] runs-on: ubuntu-20.04 strategy: matrix: running_mode: ["classic-interp", "fast-interp", "aot"] test_option: ["-x -p -s spec -P", "-x -p -s spec -S -P"] - include: - - os: ubuntu-20.04 - light: ${{ needs.check_repo.outputs.traffic_light_on_ubuntu_2004 }} + # classic-interp and fast-interp don't support simd + exclude: + - running_mode: "classic-interp" + test_option: "-x -p -s spec -S -P" + - running_mode: "fast-interp" + test_option: "-x -p -s spec -S -P" + steps: - name: checkout - if: ${{ matrix.light == 'green' }} uses: actions/checkout@v3 - name: Get LLVM libraries - if: ${{ matrix.light == 'green' }} + if: matrix.running_mode == 'aot' id: cache_llvm uses: actions/cache@v3 with: @@ -440,15 +347,13 @@ jobs: key: ubuntu-20.04-${{ env.LLVM_CACHE_SUFFIX }} - name: Quit if cache miss - if: ${{ matrix.light == 'green' && steps.cache_llvm.outputs.cache-hit != 'true' }} + if: matrix.running_mode == 'aot' && steps.cache_llvm.outputs.cache-hit != 'true' run: echo "::error::can not get prebuilt llvm libraries" && exit 1 - name: install Ninja - if: ${{ matrix.light == 'green' }} run: sudo apt install -y ninja-build - name: install SGX SDK and necessary libraries - if: ${{ matrix.light == 'green' }} run: | mkdir -p /opt/intel cd /opt/intel @@ -461,7 +366,6 @@ jobs: sudo apt install -y libsgx-launch libsgx-urts - name: run spec tests - if: ${{ matrix.light == 'green' }} run: | source /opt/intel/sgxsdk/environment ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }} diff --git a/.github/workflows/compilation_on_windows.yml b/.github/workflows/compilation_on_windows.yml index 408bdc25e..56e913e3a 100644 --- a/.github/workflows/compilation_on_windows.yml +++ b/.github/workflows/compilation_on_windows.yml @@ -6,20 +6,36 @@ name: compilation on windows-latest on: # will be triggered on PR events pull_request: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_windows.yml" + types: + - opened + - synchronize + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # will be triggered on push events push: - paths-ignore: - - "assembly-script/**" - - "ci/**" - - "doc/**" - - "test-tools/**" - - ".github/workflows/compilation_on_windows.yml" + branches: + - main + - "dev/**" + paths: + - ".github/**" + - "build-scripts/**" + - "core/**" + - "!core/deps/**" + - "product-mini/**" + - "samples/**" + - "!samples/workload/**" + - "tests/wamr-test-suites/**" + - "wamr-compiler/**" + - "wamr-sdk/**" # allow to be triggered manually workflow_dispatch: @@ -30,18 +46,7 @@ concurrency: cancel-in-progress: true jobs: - # Cancel any in-flight jobs for the same PR/branch so there's only one active - # at a time - cancel_previous: - runs-on: windows-latest - steps: - - name: Cancel Workflow Action - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - build: - needs: cancel_previous runs-on: windows-latest steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/create_tag.yml b/.github/workflows/create_tag.yml new file mode 100644 index 000000000..01dd8f168 --- /dev/null +++ b/.github/workflows/create_tag.yml @@ -0,0 +1,68 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: create a tag + +on: + workflow_call: + outputs: + minor_version: + description: "the new version is a minor version or a major version" + value: ${{ jobs.create_tag.outputs.minor_version}} + new_ver: + description: "the new version" + value: ${{ jobs.create_tag.outputs.new_ver}} + new_tag: + description: "the new tag just created" + value: ${{ jobs.create_tag.outputs.new_tag}} + +jobs: + create_tag: + runs-on: ubuntu-latest + outputs: + minor_version: ${{ steps.preparation.outputs.minor_version }} + new_ver: ${{ steps.preparation.outputs.new_ver }} + new_tag: ${{ steps.preparation.outputs.new_tag }} + + steps: + - uses: actions/checkout@v3 + # Full git history is needed to get a proper list of commits and tags + with: + fetch-depth: 0 + + - name: prepare + id: preparation + run: | + # show latest 3 versions + git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)" | tail -n 3 + # compare latest git tag and semantic version definition + result=$(python3 ./.github/scripts/fetch_and_compare_version.py) + echo "script result is ${result}" + # + # return in a form like "WAMR-X.Y.Z,major_minor_change" or ",patch_change" + new_ver=$(echo "${result}" | awk -F',' '{print $1}') + diff_versioning=$(echo "${result}" | awk -F',' '{print $2}') + echo "next version is ${new_ver}, it ${diff_versioning}" + # + # set output + if [[ ${diff_versioning} == 'major_minor_change' ]];then + echo "minor_version=true" >> "$GITHUB_OUTPUT" + else + echo "minor_version=false" >> "$GITHUB_OUTPUT" + fi + # + # + if [[ -z ${new_ver} ]]; then + echo "::error::please indicate the right semantic version in build-scripts/config_common.cmake" + echo "new_ver=''" >> "$GITHUB_OUTPUT" + echo "new_tag=''" >> "$GITHUB_OUTPUT" + exit 1 + else + echo "new_ver=${new_ver}" >> "$GITHUB_OUTPUT" + echo "new_tag=WAMR-${new_ver}" >> "$GITHUB_OUTPUT" + fi + + - name: push tag + if: steps.preparation.outputs.new_tag != '' + run: | + git tag ${{ steps.preparation.outputs.new_tag }} + git push origin --force --tags diff --git a/.github/workflows/release_process.yml b/.github/workflows/release_process.yml new file mode 100644 index 000000000..e48c8ffeb --- /dev/null +++ b/.github/workflows/release_process.yml @@ -0,0 +1,193 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +name: the binary release processes + +on: + workflow_dispatch: + inputs: + require_confirmation: + description: "If the process requires a confirmation" + type: boolean + required: false + default: false + +# 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 + +jobs: + create_tag: + uses: ./.github/workflows/create_tag.yml + + create_release: + needs: [create_tag] + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + steps: + - uses: actions/checkout@v3 + + - name: prepare the release note + run: | + extract_result="$(python3 ./.github/scripts/extract_from_release_notes.py RELEASE_NOTES.md)" + echo "RELEASE_NOTE<> $GITHUB_ENV + echo "${extract_result}" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + - name: check output + run: echo 'the release note is "${{ env.RELEASE_NOTE }}"' + + - name: create a release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ needs.create_tag.outputs.new_tag }} + release_name: ${{ needs.create_tag.outputs.new_tag }} + prerelease: ${{ inputs.require_confirmation || needs.create_tag.outputs.minor_version }} + draft: false + body: ${{ env.RELEASE_NOTE }} + + # + # WAMRC + release_wamrc_on_ubuntu_2004: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamrc.yml + with: + # can't take an env variable here + llvm_cache_key: ubuntu-20.04-build-llvm_libraries_ex + release: true + runner: ubuntu-20.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + release_wamrc_on_ubuntu_2204: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamrc.yml + with: + # can't take an env variable here + llvm_cache_key: ubuntu-22.04-build-llvm_libraries_ex + release: true + runner: ubuntu-22.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver }} + + release_wamrc_on_ubuntu_macos: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamrc.yml + with: + # can't take an env variable here + llvm_cache_key: macos-latest-build-llvm_libraries_ex + release: true + runner: macos-latest + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver }} + + # + # IWASM + release_iwasm_on_ubuntu_2004: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_iwasm_release.yml + with: + cwd: product-mini/platforms/linux + runner: ubuntu-20.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + release_iwasm_on_ubuntu_2204: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_iwasm_release.yml + with: + cwd: product-mini/platforms/linux + runner: ubuntu-22.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + release_iwasm_on_macos: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_iwasm_release.yml + with: + cwd: product-mini/platforms/darwin + runner: macos-latest + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + # + # WAMR_SDK + release_wamr_sdk_on_ubuntu_2004: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_sdk.yml + with: + config_file: wamr_config_ubuntu_release.cmake + runner: ubuntu-20.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + wasi_sdk_url: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz + + release_wamr_sdk_on_ubuntu_2204: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_sdk.yml + with: + config_file: wamr_config_ubuntu_release.cmake + runner: ubuntu-22.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + wasi_sdk_url: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz + + release_wamr_sdk_on_macos: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_sdk.yml + with: + config_file: wamr_config_macos_release.cmake + runner: macos-latest + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + wasi_sdk_url: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz + + # + # vscode extension cross-platform + release_wamr_ide_vscode_ext: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_vscode_ext.yml + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver }} + + # + # vscode extension docker images package + release_wamr_ide_docker_images_package: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_docker_images.yml + with: + ver_num: ${{ needs.create_tag.outputs.new_ver }} + + # + # WAMR_LLDB + release_wamr_lldb_on_ubuntu_2004: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_lldb.yml + with: + runner: ubuntu-20.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + release_wamr_lldb_on_ubuntu_2204: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_lldb.yml + with: + runner: ubuntu-22.04 + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} + + release_wamr_lldb_on_macos_universal: + needs: [create_tag, create_release] + uses: ./.github/workflows/build_wamr_lldb.yml + with: + runner: macos-latest + arch: universal + upload_url: ${{ needs.create_release.outputs.upload_url }} + ver_num: ${{ needs.create_tag.outputs.new_ver}} diff --git a/.github/workflows/reuse_latest_release_binaries.yml b/.github/workflows/reuse_latest_release_binaries.yml new file mode 100644 index 000000000..7f82672a6 --- /dev/null +++ b/.github/workflows/reuse_latest_release_binaries.yml @@ -0,0 +1,68 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +name: reuse binaries of the latest release if no more modification on the_path since last_commit + +on: + workflow_call: + inputs: + binary_name_stem: + type: string + required: true + last_commit: + type: string + required: true + the_path: + type: string + required: true + upload_url: + description: upload binary assets to the URL of release + type: string + required: true + outputs: + result: + value: ${{ jobs.build.outputs.result }} + +jobs: + reuse: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.try_reuse.outputs.result }} + steps: + - uses: actions/checkout@v3 + # Full git history is needed to get a proper list of commits and tags + with: + fetch-depth: 0 + + - name: try to reuse binaries + id: try_reuse + run: | + echo '::echo::on' + python3 ./.github/scripts/reuse_latest_release_binaries.py \ + --binary_name_stem ${{ inputs.binary_name_stem }} \ + --last_commit ${{ inputs.last_commit }} \ + --the_path ${{ inputs.the_path }} . + ls -lh . + + - run: echo ${{ steps.try_reuse.outputs.result }} + + - name: upload release tar.gz + if: steps.try_reuse.outputs.result == 'hit' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: ${{ inputs.binary_name_stem }}.tar.gz + asset_name: ${{ inputs.binary_name_stem }}.tar.gz + asset_content_type: application/x-gzip + + - name: upload release zip + if: steps.try_reuse.outputs.result == 'hit' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: ${{ inputs.binary_name_stem }}.zip + asset_name: ${{ inputs.binary_name_stem }}.zip + asset_content_type: application/zip diff --git a/.gitignore b/.gitignore index 712c1fc8f..a7abd7c14 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ *.obj *.a *.so +.DS_Store core/deps/** core/shared/mem-alloc/tlsf diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md new file mode 100644 index 000000000..86cdbf6a3 --- /dev/null +++ b/RELEASE_NOTES.md @@ -0,0 +1,118 @@ +## WAMR-X.Y.Z + +### Breaking Changes + +### New Features + +### Bug Fixes + +### Enhancements + +### Others + +--- + +## WAMR-1.1.0 + +- Extend support for Socket API: + - Implement IPv6 (along with IPv4) for all the socket-related operations + - Enable resolving host name IP address by adding a host call to WASI + - Implement a security feature for controlling what domains are allowed to be resolved + - Allow configuring socket options by adding host calls to WASI for setting and reading the options + - Enable connection-less communication between hosts by adding host calls to WASI for sending + - data directly to a given address and receiving messages from a specific address + - Fix verification of the address in the address pool + - Add more samples and update the documents + - Implement SGX IPFS as POSIX backend for file interaction for linux-sgx +- Integrates the Intel SGX feature called Intel Protection File System Library (IPFS) into the runtime + to create, operate and delete files inside the enclave, while guaranteeing the confidentiality and + integrity of the data persisted +- Make libc-builtin buffered printf be a common feature +- Enable passing through arguments for build_llvm.sh +- Update \_\_wasi_sock_accept signature to match wasi_snapshot_preview1 +- Enable build wasi_socket_ext.c with both clang and clang++ +- Add check for code section size, fix interpreter float operations +- Prevent an already detached thread from being detached again for thread manager +- Fix several issues related to AOT debug and update source_debugging.md +- Fix Windows/MSVC build issues and compile warnings +- Fix wasm loader: function sub local count can be 0 +- Fix crash in dumping call stack when the AOT file doesn't contain custom name section +- Fix Dockerfile lint errors and suppress hadolint warnings for pinning versions part +- Fix Fast JIT issues reported by instrument test +- Fix link error for ESP-IDF 4.4.2 +- Fix syntax errors and undefined names in Python code +- Fix issues reported by Coverity +- Fix Go binding build error +- Fix a wrongly named parameter and enhance the docs in bh_hashmap.h + +--- + +## WAMR-1.0.0 + +- Implement Python language binding +- Implement Go language binding +- Implement Fast JIT engine +- Implement hw bound check for interpreter and Fast JIT +- Enable the semantic version mechanism for WAMR +- Implement POSIX semaphore support for linux platform +- Implement SGX getrandom/getentropy without ocall +- Enable remote attestation by librats in SGX mode +- Upgrade WAMR-IDE and source debugging +- Support print exception info in source debugger +- Support emit specified custom sections into AoT file +- Refactor spec test script and CI workflows +- Support integrate 3rd-party toolchains into wamrc +- Enable dump call stack to a buffer +- Enable aot compiler with llvm-14/15 +- Don't suppress prev signal handler in hw bound check +- Remove unnecessary memset after mmap +- Refine wasm\*runtime_call_wasm_a/v +- Enable app management and thread support for esp32 arch +- Enable libc-wasi support for esp-idf arch +- Implement xtensa XIP +- Enable memory leak check +- Introduce basic CI for nuttx +- Update documents +- Fix module_realloc with NULL ptr issue +- Fix a typo of macro in wasm_application.c +- nuttx: add CONFIG_INTERPRETERS_WAMR_PERF_PROFILING +- aot_reloc_xtensa.c: define \_\_packed if not available +- Fix bh_vector extend_vector not locked issue +- Enable build libc-wasi for nuttx +- Fix typo in embed_wamr.md +- Fix drop opcode issue in fast interpreter +- Fix typos in wasm_mini_loader.c +- Fix issues reported by Coverity and Klocwork +- Add missing aot relocation symbols for xtensa target +- Add arc compiler-rt functions and reloc type for mwdt +- Fix get invokeNative float ret value issue with clang compiler +- Make robust on choosing target assumption for X86_32 support +- Fix an issue of wasm_cluster_spread_custom_data when called before exec +- Fix socket api verification of addresses in the address pool +- Add API wasm_runtime_set_module_inst +- Set noexecstack CXX link flags for wamrc +- Add import subtyping validation +- Fix libc-wasi/uvwasi poll/environ_get issues +- Add missing symbol for aot_reloc_arc.c +- Add a dev docker container for WAMR repo +- Fix dump call stack issue in interpreter +- Fix windows thread data issue and enhance windows os_mmap +- Support custom stack guard size +- Implement i64.div and i64.rem intrinsics +- Let iwasm return non-zero value when running failed +- Reserve one pointer size for fast-interp code_compiled_size +- Enable libc-wasi support for esp-idf +- Expose wasm_runtime_get_exec_env_singleton to the API users +- Normalize wasm types to refine interpreter call_indirect +- Remove unused wasm_runtime_create_exec_env_and_call_wasm +- Fix linear memory page count issues +- debug: Retire wasm_debug\*(get|set)\_engine_active mechanism +- wasm_application.c: Do not start debug instance automatically +- Fix typo in simd_conversions.c +- nuttx: Add CONFIG_INTERPRETERS_WAMR_DEBUG_INTERP +- Add a new API to get free memory in memory pool +- Fix multi-module and some other issues +- Fix build issue of the meshoptimizer workload +- Fix build error on alios platform + +--- diff --git a/build-scripts/lldb-wasm.patch b/build-scripts/lldb-wasm.patch index 74dd4dfe1..d6044e3a3 100644 --- a/build-scripts/lldb-wasm.patch +++ b/build-scripts/lldb-wasm.patch @@ -1,3 +1,15 @@ +diff --git a/lldb/include/lldb/Breakpoint/Breakpoint.h b/lldb/include/lldb/Breakpoint/Breakpoint.h +index f2e2a0d22..426d1129b 100644 +--- a/lldb/include/lldb/Breakpoint/Breakpoint.h ++++ b/lldb/include/lldb/Breakpoint/Breakpoint.h +@@ -9,6 +9,7 @@ + #ifndef LLDB_BREAKPOINT_BREAKPOINT_H + #define LLDB_BREAKPOINT_BREAKPOINT_H + ++#include + #include + #include + #include diff --git a/lldb/include/lldb/Core/Module.h b/lldb/include/lldb/Core/Module.h index dd7100c46..97d70daad 100644 --- a/lldb/include/lldb/Core/Module.h @@ -5829,3 +5841,27 @@ index 4ec2e25c7..24c88fe9a 100644 default: return std::make_shared(); } +diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCExecutorProcessControl.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCExecutorProcessControl.h +index 4310ba9ce..297b33879 100644 +--- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCExecutorProcessControl.h ++++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCExecutorProcessControl.h +@@ -13,6 +13,7 @@ + #ifndef LLVM_EXECUTIONENGINE_ORC_ORCRPCEXECUTORPROCESSCONTROL_H + #define LLVM_EXECUTIONENGINE_ORC_ORCRPCEXECUTORPROCESSCONTROL_H + ++#include "llvm/ExecutionEngine/Orc/Core.h" + #include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h" + #include "llvm/ExecutionEngine/Orc/Shared/RPCUtils.h" + #include "llvm/ExecutionEngine/Orc/Shared/RawByteChannel.h" +diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h +index 753b1998c..27370c62d 100644 +--- a/llvm/include/llvm/Support/MathExtras.h ++++ b/llvm/include/llvm/Support/MathExtras.h +@@ -16,6 +16,7 @@ + #include "llvm/Support/Compiler.h" + #include + #include ++#include + #include + #include + #include diff --git a/samples/simple/profiles/macos-interp/wamr_config_simple.cmake b/samples/simple/profiles/macos-interp/wamr_config_simple.cmake new file mode 100644 index 000000000..d13c06d97 --- /dev/null +++ b/samples/simple/profiles/macos-interp/wamr_config_simple.cmake @@ -0,0 +1,11 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +set (WAMR_BUILD_PLATFORM "darwin") +set (WAMR_BUILD_TARGET X86_64) +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 0) +set (WAMR_BUILD_APP_FRAMEWORK 1) +set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE WAMR_APP_BUILD_CONNECTION WAMR_APP_BUILD_SENSOR) diff --git a/samples/simple/sample_test_run.py b/samples/simple/sample_test_run.py new file mode 100755 index 000000000..d9e007c01 --- /dev/null +++ b/samples/simple/sample_test_run.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +import argparse +import shlex +import subprocess +import sys +import time +import traceback + + +def start_server(cwd): + """ + Startup the 'simple' process works in TCP server mode + """ + app_server = subprocess.Popen(shlex.split("./simple -s "), cwd=cwd) + return app_server + + +def query_installed_application(cwd): + """ + Query all installed applications + """ + qry_prc = subprocess.run( + shlex.split("./host_tool -q"), cwd=cwd, check=False, capture_output=True + ) + assert qry_prc.returncode == 69 + return qry_prc.returncode, qry_prc.stdout + + +def install_wasm_application(wasm_name, wasm_file, cwd): + """ + Install a wasm application + """ + inst_prc = subprocess.run( + shlex.split(f"./host_tool -i {wasm_name} -f {wasm_file}"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert inst_prc.returncode == 65 + return inst_prc.returncode, inst_prc.stdout + + +def uninstall_wasm_application(wasm_name, cwd): + """ + Uninstall a wasm application + """ + + unst_prc = subprocess.run( + shlex.split(f"./host_tool -u {wasm_name}"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert unst_prc.returncode == 66 + return unst_prc.returncode, unst_prc.stdout + + +def send_get_to_wasm_application(wasm_name, url, cwd): + """ + send a request (GET) from host to an applicaton + """ + qry_prc = subprocess.run( + shlex.split(f"./host_tool -r /app/{wasm_name}{url} -A GET"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert qry_prc.returncode == 69 + return qry_prc.returncode, qry_prc.stdout + + +def main(): + """ + GO!GO!!GO!!! + """ + parser = argparse.ArgumentParser(description="run the sample and examine outputs") + parser.add_argument("working_directory", type=str) + args = parser.parse_args() + + ret = 1 + app_server = None + try: + app_server = start_server(args.working_directory) + + # wait for a second + time.sleep(1) + + print("--> Install timer.wasm...") + install_wasm_application( + "timer", "./wasm-apps/timer.wasm", args.working_directory + ) + + print("--> Install event_publisher.wasm...") + install_wasm_application( + "event_publisher", + "./wasm-apps/event_publisher.wasm", + args.working_directory, + ) + + print("--> Install event_subscriber.wasm...") + install_wasm_application( + "event_subscriber", + "./wasm-apps/event_subscriber.wasm", + args.working_directory, + ) + + print("--> Uninstall timer.wasm...") + uninstall_wasm_application("timer", args.working_directory) + + print("--> Uninstall event_publisher.wasm...") + uninstall_wasm_application( + "event_publisher", + args.working_directory, + ) + + print("--> Uninstall event_subscriber.wasm...") + uninstall_wasm_application( + "event_subscriber", + args.working_directory, + ) + + print("--> Query all installed applications...") + query_installed_application(args.working_directory) + + print("--> Install request_handler.wasm...") + install_wasm_application( + "request_handler", + "./wasm-apps/request_handler.wasm", + args.working_directory, + ) + + print("--> Query again...") + query_installed_application(args.working_directory) + + print("--> Install request_sender.wasm...") + install_wasm_application( + "request_sender", + "./wasm-apps/request_sender.wasm", + args.working_directory, + ) + + print("--> Send GET to the Wasm application named request_handler...") + send_get_to_wasm_application("request_handler", "/url1", args.working_directory) + + print("--> All pass") + ret = 0 + except AssertionError: + traceback.print_exc() + finally: + app_server.kill() + + return ret + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/test-tools/wamr-ide/README.md b/test-tools/wamr-ide/README.md index d5adbad96..9b78ea7ed 100644 --- a/test-tools/wamr-ide/README.md +++ b/test-tools/wamr-ide/README.md @@ -37,7 +37,26 @@ under `resource/debug/bin`. - Ubuntu Bionic 18.04(LTS) ``` -#### 3. Build docker images +#### 3. Pull docker images from the registry(recommended) or build docker images on the host + +##### 3.1 Pull docker images from registry + +From now on, for each release, we have the same version tagged docker image pushed to GitHub package. + +You could simply pull a certain version of docker images using the following commands: + +```sh +# pull and retag wasm-toolchain +docker pull ghcr.io/bytecodealliance/wasm-toolchain:{version number} +docker tag ghcr.io/bytecodealliance/wasm-toolchain:{version number} wasm-toolchain:{version number} +docker rmi ghcr.io/bytecodealliance/wasm-toolchain:{version number} +# pull and retag wasm-debug-server +docker pull ghcr.io/bytecodealliance/wasm-debug-server:{version number} +docker tag ghcr.io/bytecodealliance/wasm-debug-server:{version number} wasm-debug-server:{version number} +docker rmi ghcr.io/bytecodealliance/wasm-debug-server:{version number} +``` + +##### 3.2 Build docker images on host We have 2 docker images which should be built or loaded on your host, `wasm-toolchain` and `wasm-debug-server`. To build these 2 images, please enter the `WASM-Debug-Server/Docker` & `WASM-Toolchain/Docker`, then execute the `build_docker_image` script respectively. diff --git a/test-tools/wamr-ide/VSCode-Extension/README.md b/test-tools/wamr-ide/VSCode-Extension/README.md index 21786f8c7..381b7ec57 100644 --- a/test-tools/wamr-ide/VSCode-Extension/README.md +++ b/test-tools/wamr-ide/VSCode-Extension/README.md @@ -3,10 +3,13 @@ ### An integrated development environment for WASM. # How to debug this extension - -> Note that please build `lldb` firstly follow this -> [instruction](./resource/debug/README.md) if you want to enable -> `source debugging` feature of this extension +> Note that when you download and +> decompress to get .vsix file from [our release](https://github.com/bytecodealliance/wasm-micro-runtime/releases). +> It's by default that the `source debugging` feature is not enabled. +> If you want to enable `source debugging` feature of this extension, +> you could either download `lldb` from [our release](https://github.com/bytecodealliance/wasm-micro-runtime/releases) and put them in correct path +mentioned in this [instruction](./resource/debug/README.md) (This is recommended way), +> or you could build `lldb` yourself follow this [instruction](./resource/debug/README.md) ### 1. open `VSCode_Extension` directory with the `vscode` diff --git a/wamr-sdk/wamr_config_macos_release.cmake b/wamr-sdk/wamr_config_macos_release.cmake new file mode 100644 index 000000000..cbcec2d6f --- /dev/null +++ b/wamr-sdk/wamr_config_macos_release.cmake @@ -0,0 +1,40 @@ +set (WAMR_BUILD_PLATFORM "darwin") +set (WAMR_BUILD_TARGET X86_64) + +# Running mode +set (WAMR_BUILD_AOT 1) +set (WAMR_BUILD_INTERP 1) +set (WAMR_BUILD_JIT 0) + +# Runtime SDK Features +set (WAMR_BUILD_CUSTOM_NAME_SECTION 0) +set (WAMR_BUILD_DEBUG_INTERP 0) +set (WAMR_BUILD_DEBUG_AOT 0) +set (WAMR_BUILD_DUMP_CALL_STACK 0) +set (WAMR_BUILD_LIBC_UVWASI 0) +set (WAMR_BUILD_LIBC_EMCC 0) +set (WAMR_BUILD_LIB_RATS 0) +set (WAMR_BUILD_LOAD_CUSTOM_SECTION 0) +set (WAMR_BUILD_MEMORY_PROFILING 0) +set (WAMR_BUILD_MINI_LOADER 0) +set (WAMR_BUILD_MULTI_MODULE 0) +set (WAMR_BUILD_PERF_PROFILING 0) +set (WAMR_BUILD_SPEC_TEST 0) +set (WAMR_BUILD_BULK_MEMORY 1) +set (WAMR_BUILD_LIB_PTHREAD 1) +set (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE 1) +set (WAMR_BUILD_LIBC_BUILTIN 1) +set (WAMR_BUILD_LIBC_WASI 1) +set (WAMR_BUILD_REF_TYPES 1) +set (WAMR_BUILD_SIMD 1) +set (WAMR_BUILD_SHARED_MEMORY 1) +set (WAMR_BUILD_TAIL_CALL 1) +set (WAMR_BUILD_THREAD_MGR 1) + +# APP SDK Features +set (WAMR_BUILD_APP_FRAMEWORK 1) +set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE) + +# +# set (EXTRA_SDK_INCLUDE_PATH "") + diff --git a/wamr-sdk/wamr_config_ubuntu_release.cmake b/wamr-sdk/wamr_config_ubuntu_release.cmake new file mode 100644 index 000000000..8919c4e41 --- /dev/null +++ b/wamr-sdk/wamr_config_ubuntu_release.cmake @@ -0,0 +1,40 @@ +set (WAMR_BUILD_PLATFORM "linux") +set (WAMR_BUILD_TARGET X86_64) + +# Running mode +set (WAMR_BUILD_AOT 1) +set (WAMR_BUILD_INTERP 1) +set (WAMR_BUILD_JIT 0) + +# Runtime SDK Features +set (WAMR_BUILD_CUSTOM_NAME_SECTION 0) +set (WAMR_BUILD_DEBUG_INTERP 0) +set (WAMR_BUILD_DEBUG_AOT 0) +set (WAMR_BUILD_DUMP_CALL_STACK 0) +set (WAMR_BUILD_LIBC_UVWASI 0) +set (WAMR_BUILD_LIBC_EMCC 0) +set (WAMR_BUILD_LIB_RATS 0) +set (WAMR_BUILD_LOAD_CUSTOM_SECTION 0) +set (WAMR_BUILD_MEMORY_PROFILING 0) +set (WAMR_BUILD_MINI_LOADER 0) +set (WAMR_BUILD_MULTI_MODULE 0) +set (WAMR_BUILD_PERF_PROFILING 0) +set (WAMR_BUILD_SPEC_TEST 0) +set (WAMR_BUILD_BULK_MEMORY 1) +set (WAMR_BUILD_LIB_PTHREAD 1) +set (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE 1) +set (WAMR_BUILD_LIBC_BUILTIN 1) +set (WAMR_BUILD_LIBC_WASI 1) +set (WAMR_BUILD_REF_TYPES 1) +set (WAMR_BUILD_SIMD 1) +set (WAMR_BUILD_SHARED_MEMORY 1) +set (WAMR_BUILD_TAIL_CALL 1) +set (WAMR_BUILD_THREAD_MGR 1) + +# APP SDK Features +set (WAMR_BUILD_APP_FRAMEWORK 1) +set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE) + +# +# set (EXTRA_SDK_INCLUDE_PATH "") +