- Introduced a comprehensive build system that supports multiple platforms (Linux, macOS, Windows, Android) using pure Go builds (`CGO_ENABLED=0`). - Updated all build and test scripts to ensure compatibility with the new purego approach, allowing for dynamic loading of `libsecp256k1` at runtime. - Added detailed documentation on the build process, platform detection, and deployment options. - Enhanced CI/CD workflows to automate builds for all supported platforms and include necessary libraries in releases. - Updated `.gitignore` to exclude build output files. - Created new documentation files for deployment and multi-platform build summaries.
2.4 KiB
2.4 KiB
libsecp256k1 Deployment Guide
All build scripts have been updated to ensure libsecp256k1.so is placed next to the executable.
Updated Scripts
1. GitHub Actions (.github/workflows/go.yml)
- Build job: Installs libsecp256k1 from source, enables CGO
- Release job: Builds with CGO, copies
libsecp256k1.soto release-binaries/ - Both the binary and library are included in releases
2. Deployment Script (scripts/deploy.sh)
- Builds with
CGO_ENABLED=1 - Copies
pkg/crypto/p8k/libsecp256k1.sonext to the binary - Installs both binary and library to
$GOBIN/
3. Benchmark Script (scripts/benchmark.sh)
- Builds benchmark binary with
CGO_ENABLED=1 - Copies library to
cmd/benchmark/directory
4. Profile Script (cmd/benchmark/profile.sh)
- Builds relay with
CGO_ENABLED=1 - Copies library next to relay binary
- Copies library to benchmark run directory
5. Test Deploy Script (scripts/test-deploy-local.sh)
- Tests build with
CGO_ENABLED=1 - Verifies library is copied correctly
Runtime Requirements
The library will be found automatically if:
- It's in the same directory as the executable
- It's in a standard library path (/usr/local/lib, /usr/lib)
LD_LIBRARY_PATHincludes the directory containing it
Distribution
When distributing binaries, include both:
orly(or other binary name)libsecp256k1.so
Users can run with:
./orly
Or explicitly set the library path:
LD_LIBRARY_PATH=. ./orly
Building from Source
All scripts automatically handle the library placement:
# Deploy to production
./scripts/deploy.sh
# Build for local testing
CGO_ENABLED=1 go build -o orly .
cp pkg/crypto/p8k/libsecp256k1.so .
Test Scripts Updated
All test scripts now ensure libsecp256k1.so is available:
Test Scripts
scripts/runtests.sh- Sets CGO_ENABLED=1 and LD_LIBRARY_PATHscripts/test.sh- Sets CGO_ENABLED=1 and LD_LIBRARY_PATHscripts/test_policy.sh- Sets CGO_ENABLED=1 and LD_LIBRARY_PATHscripts/test-managed-acl.sh- Sets CGO_ENABLED=1 and LD_LIBRARY_PATHscripts/test-workflow-local.sh- Matches GitHub Actions with CGO enabled
Docker Files
cmd/benchmark/Dockerfile.next-orly- Copies libsecp256k1.so to /app/cmd/benchmark/Dockerfile.benchmark- Builds and includes libsecp256k1
All test environments now have access to libsecp256k1.so for CGO-based cryptographic operations.