Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,20 @@ to WebAssembly. It allows you to use Miniscript in NodeJS and in the browser.
- [wasm-pack](https://rustwasm.github.io/wasm-pack/) (install with `cargo install wasm-pack`)
- [NodeJS](https://nodejs.org/en/)

# Building

You can use the Docker image / Makefile to build the wasm files:
# Packages

## packages/wasm-miniscript

This contains the core library that is compiled to WebAssembly.
It is a wrapper around the `rust-miniscript` crate.

### Building

If your system has problems with `wasm-pack` (Mac M1), you can use the `Container.mk` Makefile to build the wasm files:

```bash
make build-image
make build-wasm
cd packages/wasm-miniscript
make -f Container.mk build-image
make -f Conatiner.mk build-wasm
```
26 changes: 26 additions & 0 deletions packages/wasm-miniscript/Container.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.PHONY: all build-image build-wasm enter-image clean-container clean-image

CONTAINER_ENGINE ?= docker

all: build-image build-wasm

build-image:
$(CONTAINER_ENGINE) build --tag wasm-builder .

build-wasm:
rm -rf dist/ js/wasm/
$(CONTAINER_ENGINE) rm -f wasm-builder-container || true
$(CONTAINER_ENGINE) run -v $(shell pwd)/src:/usr/src/app/src \
--name wasm-builder-container wasm-builder \
npm run build
$(CONTAINER_ENGINE) cp wasm-builder-container:/usr/src/app/dist .
$(CONTAINER_ENGINE) cp wasm-builder-container:/usr/src/app/js/wasm ./js/wasm

enter-image:
$(CONTAINER_ENGINE) run -it wasm-builder /bin/bash

clean-container:
$(CONTAINER_ENGINE) rm wasm-builder-container

clean-image:
$(CONTAINER_ENGINE) rmi wasm-builder
43 changes: 24 additions & 19 deletions packages/wasm-miniscript/Makefile
Original file line number Diff line number Diff line change
@@ -1,26 +1,31 @@
.PHONY: all build-image build-wasm enter-image clean-container clean-image
WASM_PACK = wasm-pack
WASM_PACK_FLAGS = --no-pack --weak-refs

CONTAINER_ENGINE ?= docker
ifdef WASM_PACK_DEV
WASM_PACK_FLAGS += --dev
endif

all: build-image build-wasm
define WASM_PACK_COMMAND
$(WASM_PACK) build --out-dir $(1) $(WASM_PACK_FLAGS) --target $(2)
endef

build-image:
$(CONTAINER_ENGINE) build --tag wasm-builder .
define REMOVE_GITIGNORE
find $(1) -name .gitignore -delete
endef

build-wasm:
rm -rf dist/ js/wasm/
$(CONTAINER_ENGINE) rm -f wasm-builder-container || true
$(CONTAINER_ENGINE) run -v $(shell pwd)/src:/usr/src/app/src \
--name wasm-builder-container wasm-builder \
npm run build
$(CONTAINER_ENGINE) cp wasm-builder-container:/usr/src/app/dist .
$(CONTAINER_ENGINE) cp wasm-builder-container:/usr/src/app/js/wasm ./js/wasm
define BUILD
$(call WASM_PACK_COMMAND,$(1),$(2))
$(call REMOVE_GITIGNORE,$(1))
endef

enter-image:
$(CONTAINER_ENGINE) run -it wasm-builder /bin/bash
.PHONY: js/wasm/
js/wasm/:
$(call BUILD,$@,nodejs)

clean-container:
$(CONTAINER_ENGINE) rm wasm-builder-container
.PHONY: dist/wasm/
dist/wasm/:
$(call BUILD,$@,nodejs)

clean-image:
$(CONTAINER_ENGINE) rmi wasm-builder
.PHONY: dist/browser/wasm/
dist/browser/wasm/:
$(call BUILD,$@,browser)
5 changes: 1 addition & 4 deletions packages/wasm-miniscript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,7 @@
},
"scripts": {
"test": "mocha --recursive test",
"build:wasm-dev": "wasm-pack build --out-dir js/wasm --no-pack --target nodejs --weak-refs",
"build:wasm-nodejs": "wasm-pack build --out-dir dist/wasm --no-pack --target nodejs --weak-refs",
"build:wasm-browser": "wasm-pack build --out-dir dist/browser/wasm --no-pack --target browser --weak-refs",
"build:wasm": "npm run build:wasm-dev && npm run build:wasm-nodejs && npm run build:wasm-browser",
"build:wasm": "make js/wasm/ && make dist/wasm/ && make dist/browser/wasm/",
"build:ts-browser": "tsc --module es2020 --target es2020 --outDir dist/browser",
"build:ts": "tsc && npm run build:ts-browser",
"build": "npm run build:wasm && npm run build:ts",
Expand Down