diff --git a/.gitignore b/.gitignore index 21ab53e284d..1dfea1e5edd 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ .idea **/.vscode install/ +capi/ api-docs/ api-docs-repo/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a0c33badc2..7aba05ee405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## **[Unreleased]** +- [#1233](https://github.com/wasmerio/wasmer/pull/1233) Improved Wasmer C API release artifacts. - [#1216](https://github.com/wasmerio/wasmer/pull/1216) `wasmer-interface-types` receives a binary encoder. - [#1228](https://github.com/wasmerio/wasmer/pull/1228) Singlepass cleanup: Resolve several FIXMEs and remove protect_unix. - [#1218](https://github.com/wasmerio/wasmer/pull/1218) Enable Cranelift verifier in debug mode. Fix bug with table indices being the wrong type. diff --git a/Makefile b/Makefile index 6e34078afb2..a8df5cd28bc 100644 --- a/Makefile +++ b/Makefile @@ -294,6 +294,33 @@ build-install: cp ./target/release/wasmer ./install/bin/ tar -C ./install -zcvf wasmer.tar.gz bin/wapm bin/wasmer +UNAME_S := $(shell uname -s) + +build-capi: + mkdir -p ./capi/ + mkdir -p ./capi/include + mkdir -p ./capi/lib + +ifeq ($(OS), Windows_NT) + cp target/release/wasmer_runtime_c_api.dll ./capi/lib/wasmer.dll + cp target/release/wasmer_runtime_c_api.lib ./capi/lib/wasmer.lib +else +ifeq ($(UNAME_S), Darwin) + cp target/release/libwasmer_runtime_c_api.dylib ./capi/lib/libwasmer.dylib + cp target/release/libwasmer_runtime_c_api.dylib ./capi/lib/libwasmer.a + # Fix the rpath for the dylib + install_name_tool -id "@rpath/libwasmer.dylib" ./capi/lib/libwasmer.dylib +else + cp target/release/libwasmer_runtime_c_api.so ./capi/lib/libwasmer.so + cp target/release/libwasmer_runtime_c_api.a ./capi/lib/libwasmer.a +endif +endif + + find target/release/build -name 'wasmer.h*' -exec cp {} ./capi/include ';' + cp LICENSE ./capi/LICENSE + cp lib/runtime-c-api/distribution/* ./capi/ + tar -C ./capi -zcvf wasmer-c-api.tar.gz lib include README.md LICENSE + # For installing the contents locally do-install: tar -C ~/.wasmer -zxvf wasmer.tar.gz diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9e42676cf96..112d2da8e14 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -213,21 +213,11 @@ jobs: condition: and(succeeded(), not(eq(variables['Agent.OS'], 'Windows_NT'))) - bash: | make capi - cp target/release/libwasmer_runtime_c_api.so ./artifacts - find target/release/build -name 'wasmer.h*' -exec cp {} ./artifacts ';' - displayName: Build c-api (Linux) - condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux')) - - bash: | - make capi - install_name_tool -id "@rpath/libwasmer_runtime_c_api.dylib" target/release/libwasmer_runtime_c_api.dylib - cp target/release/libwasmer_runtime_c_api.dylib ./artifacts - displayName: Build c-api (Darwin) - condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin')) + displayName: Build c-api - bash: | - make capi - cp target/release/wasmer_runtime_c_api.dll ./artifacts - displayName: Build c-api (Windows) - condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT')) + make build-capi + cp ./wasmer-c-api.tar.gz ./artifacts/$(./scripts/capi-name.sh) + displayName: Build c-api artifacts - publish: $(System.DefaultWorkingDirectory)/artifacts artifact: library-$(Agent.OS) diff --git a/lib/runtime-c-api/Cargo.toml b/lib/runtime-c-api/Cargo.toml index ee6b3c6cb04..0fc3710b3b9 100644 --- a/lib/runtime-c-api/Cargo.toml +++ b/lib/runtime-c-api/Cargo.toml @@ -2,6 +2,7 @@ name = "wasmer-runtime-c-api" version = "0.13.1" description = "Wasmer C API library" +documentation = "https://wasmerio.github.io/wasmer/c/runtime-c-api/" license = "MIT" authors = ["The Wasmer Engineering Team "] repository = "https://github.com/wasmerio/wasmer" diff --git a/lib/runtime-c-api/distribution/README.md b/lib/runtime-c-api/distribution/README.md new file mode 100644 index 00000000000..bb1689ee0ba --- /dev/null +++ b/lib/runtime-c-api/distribution/README.md @@ -0,0 +1,32 @@ +# Wasmer C API + +This is the [Wasmer WebAssembly Runtime](https://wasmer.io) shared library. +You can use it in any C/C++ projects. + +This directory is structured like the following: +* `lib` is where the Wasmer shared library lives. +* `include` is where the Wasmer headers live + +## Documentation + +The API documentation for the Wasmer Runtime C API can be found here: + +https://wasmerio.github.io/wasmer/c/runtime-c-api/ + + +## Usage + +If you want to compile a `c` file using Wasmer, you can do: + +```bash +clang YOUR_FILE -Iinclude -lwasmer -Llib +``` + +> Note: append ` -rpath lib` if you are in macOS. + +## Examples + +You can check examples of how to use the Wasmer C API here: + +https://docs.wasmer.io/integrations/c/examples + diff --git a/lib/runtime/Cargo.toml b/lib/runtime/Cargo.toml index a8dd63dbc71..432f2b5a941 100644 --- a/lib/runtime/Cargo.toml +++ b/lib/runtime/Cargo.toml @@ -2,7 +2,6 @@ name = "wasmer-runtime" version = "0.13.1" description = "Wasmer runtime library" -documentation = "https://wasmerio.github.io/wasmer/c/runtime-c-api/" license = "MIT" authors = ["The Wasmer Engineering Team "] repository = "https://github.com/wasmerio/wasmer" diff --git a/scripts/capi-name.sh b/scripts/capi-name.sh new file mode 100755 index 00000000000..08b508e4628 --- /dev/null +++ b/scripts/capi-name.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +initArch() { + ARCH=$(uname -m) + if [ -n "$WASMER_ARCH" ]; then + ARCH="$WASMER_ARCH" + fi + # If you modify this list, please also modify install.sh + case $ARCH in + amd64) ARCH="amd64";; + x86_64) ARCH="amd64";; + aarch64) ARCH="arm64";; + i386) ARCH="386";; + *) echo "Architecture ${ARCH} is not supported by this installation script"; exit 1;; + esac +} + +initOS() { + OS=$(uname | tr '[:upper:]' '[:lower:]') + if [ -n "$WASMER_OS" ]; then + echo "Using WASMER_OS" + OS="$WASMER_OS" + fi + case "$OS" in + darwin) OS='darwin';; + linux) OS='linux';; + freebsd) OS='freebsd';; + # mingw*) OS='windows';; + # msys*) OS='windows';; + *) echo "OS ${OS} is not supported by this installation script"; exit 1;; + esac +} + +# identify platform based on uname output +initArch +initOS + +# determine install directory if required +BINARY="wasmer-c-api-${OS}-${ARCH}.tar.gz" + +# add .exe if on windows +# if [ "$OS" = "windows" ]; then +# BINARY="$BINARY.exe" +# fi + +echo "${BINARY}"