Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/godunko/adawebpack
Ada WASM Runtime and Bindings for Web API
https://github.com/godunko/adawebpack
ada ada-runtime ada-wasm-runtime gnat-llvm wasm
Last synced: 14 days ago
JSON representation
Ada WASM Runtime and Bindings for Web API
- Host: GitHub
- URL: https://github.com/godunko/adawebpack
- Owner: godunko
- License: bsd-3-clause
- Created: 2020-01-09T20:10:48.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-27T07:00:39.000Z (4 months ago)
- Last Synced: 2024-07-31T20:30:43.783Z (3 months ago)
- Topics: ada, ada-runtime, ada-wasm-runtime, gnat-llvm, wasm
- Language: Ada
- Homepage:
- Size: 459 KB
- Stars: 48
- Watchers: 5
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.BSD3
Awesome Lists containing this project
- awesome-ada - adawebpack - GNAT RTL for WASM and bindings for Web API. (Runtimes / Continuous Integration)
README
[![Build binaries](https://github.com/godunko/adawebpack/actions/workflows/build.yml/badge.svg)](https://github.com/godunko/adawebpack/actions/workflows/build.yml)
# AdaWebPack
AdaWebPack includes GNAT-LLVM compiler for WebAssembly target, GNAT Run Time Library and AdaWebPack bindings for Web API.## How to install
Prebuild packages are available on [Release page](https://github.com/godunko/adawebpack/releases).
You will also need `wasm-ld`, the Web asssembly linker. You will find this:
* on Fedora Linux through the `lld` package;
* on Ubuntu through the `lld-16` package;
* on other Linux systems look for a similarly-named package.## How to build
* Setup GNAT using [Alire](https://alire.ada.dev/).
* Clone [GNAT-LLVM](https://github.com/AdaCore/gnat-llvm). Latest known good revision of GNAT-LLVM compatible with GNAT FSF is `66e36d929524972353600db5d604d0189cf0308f`.
```
git clone https://github.com/AdaCore/gnat-llvm
git -C gnat-llvm checkout 66e36d929524972353600db5d604d0189cf0308f
```* Clone [bb-runtimes](https://github.com/Fabien-Chouteau/bb-runtimes). Use `gnat-fsf-14` branch.
```
git clone -b gnat-fsf-14 https://github.com/Fabien-Chouteau/bb-runtimes gnat-llvm/llvm-interface/bb-runtimes
```* Clone [GCC](https://github.com/gcc-mirror/gcc) sources. Use, for instance, `releases/gcc-14.1.0` commit.
```
git clone --single-branch --branch=releases/gcc-14 --shallow-since=01-04-2024 https://github.com/gcc-mirror/gcc gnat-llvm/llvm-interface/gcc
git -C gnat-llvm/llvm-interface/gcc checkout releases/gcc-14.1.0
```* Setup GNAT-LLVM development environment, see details in
[GNAT-LLVM README](https://github.com/AdaCore/gnat-llvm). Note, you need to use
externally build LLVM with enabled 'lld' project and 'WebAssembly' target,
so, if you build it your-self, `cmake` command line should contain among other switches:```
cmake ... -DLLVM_ENABLE_PROJECTS='...;clang;lld' -DLLVM_TARGETS_TO_BUILD="...;WebAssembly"
```On Ubuntu it is possible to install prebuild LLVM/CLang packages (use LLVM/CLang 16). However,
alternatives need to be updated using the provided script:```
sudo utilities/update-alternatives-clang.sh 16 100
```Or install a [LLVM 16 binary release](https://github.com/llvm/llvm-project/releases) (`llvm-16`, `lld-16` and `clang-16` are required).
* Checkout AdaWebPack repository into `gnat-llvm/llvm-interface` as
`adawebpack_src` and create link for Makefile.target.```
cd gnat-llvm/llvm-interface
git clone https://github.com/godunko/adawebpack.git adawebpack_src
ln -s adawebpack_src/source/rtl/Makefile.target
cd -
```* Create a link to RTS source code
```
cd gnat-llvm/llvm-interface
ln -s bb-runtimes/gnat_rts_sources/include/rts-sources/
cd -
```* Create a link to GNAT source code (or copy it)
```
cd gnat-llvm/llvm-interface
ln -s gcc/gcc/ada gnat_src
cd -
```* Apply patch to GNAT-LLVM repository
```
cd gnat-llvm/llvm-interface
patch -p1 < adawebpack_src/patches/gnat-llvm.patch
patch -p1 < adawebpack_src/patches/llvm_wrapper2.patch
cd -
```* Use `make wasm` to build compiler and Run Time Library
```
cd gnat-llvm/llvm-interface
make wasm
cd -
```* When `make` finishes, you will find toolchain in `gnat-llvm/llvm-interface/bin`.
```
cd gnat-llvm/llvm-interface
export PATH=$PWD/bin:$PATH
cd -
```* Now you can build examples:
```
cd gnat-llvm/llvm-interface/adawebpack_src
make build_examples
cd -
```
You will most likely need to run the examples through an HTTP server;
otherwise, the browser will report a security error and/or refuse to load the page.
An easy way to obtain an HTTP server is by via Python 3 with `python3 -m http.server`.## Usage with Docker
It could be handy to use docker.
* Find latest build on our [Fedora COPR](https://copr.fedorainfracloud.org/coprs/reznik/adawebpack/) repository.
* Build a container image (make sure to replace `curl` argument with latest RPM URL)
```
docker build --tag wgprbuild - <