npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

secp256k1-wasm

v2.0.0

Published

WASM build of libsecp256k1

Downloads

4,757

Readme

secp256k1-wasm

EMCC+LLVM WebAssembly bindings for libsecp256k1

This project provides Emscripten WASM bindings for libsecp256k1 and provides basic scaffolding to build the native libsecp256k1 C code to WASM using EMCC.

Building secp256k1-wasm

Repositories you will need to clone:

$ git clone https://github.com/aspectron/secp256k1-wasm
$ git clone https://github.com/WebAssembly/binaryen
$ git clone https://github.com/llvm/llvm-project
$ git clone https://github.com/emscripten-core/emscripten

Building Binaryen:

$ cd binaryen
$ cmake .
$ cmake --build . --config Release -j NNN
NNN = number of CPU cores/threads

Override emscripten src files:

$ cp emscripten_override/src/* to emscripten/src/

The following process builds LLVM inside the ./emscripten/build folder:

$ cd emscripten
$ mkdir build
$ cd build/
$ cmake ../../llvm-project/llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS='lld;clang' -DLLVM_TARGETS_TO_BUILD="host;WebAssembly" -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF
$ cmake --build . --config Release -j NNN
NNN = number of CPU cores/threads
$ cd ..     

We are now back in the Emscripten folder. Generate the default .emscripten file:

$ ./emcc  -v

Edit the .emscripten file to contain correct paths to LLVM and Binaryen:

  • point LLVM_ROOT to <path to emscripten>/build/bin or <path to emscripten>/build/Release/bin if LLVM was built using Visual C++
  • point BINARYEN_ROOT to <path to binaryen>

Re-run ./emcc -v to check that everything is ok. You should now see the version of EMCC, clang and InstalledDir information.

Build secp256k1-wasm:

You can run ./build or build.bat to build the WASM binaries or execute the following:

$ emcc -I ./depend/secp256k1 -I ./depend/secp256k1/src secp256k1-bindings.cpp -o http/secp256k1.html -s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"] -std=c++11 --bind -s ALLOW_MEMORY_GROWTH=1 -s IMPORTED_MEMORY

To test the build, you will require an installed version of NodeJs. From within the secp256k1-wasm folder please run the following:

using python SimpleHTTPServer:

$ python -m SimpleHTTPServer 8000

using nodejs:

$ npm install
$ node test/node-server

You should now be able to access the emscripten environment with secp256k1 loaded at http://localhost:3000