File size: 3,995 Bytes
119e586 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #!/bin/bash
# SKC-LISP: Production Build + Cryptographic Linking
# Compiles NASM + C++ binding with libblake3 + libsodium
set -e
echo "=== SKC-LISP Production Build ==="
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# ============================================================================
# 1. Check for required libraries
# ============================================================================
echo "[1/5] Checking for libblake3 and libsodium..."
if ! pkg-config --exists libblake3; then
echo "ERROR: libblake3 not found. Install with:"
echo " macOS: brew install blake3"
echo " Ubuntu: sudo apt-get install libblake3-dev"
echo " Or build from: https://github.com/BLAKE3-team/BLAKE3"
exit 1
fi
if ! pkg-config --exists libsodium; then
echo "ERROR: libsodium not found. Install with:"
echo " macOS: brew install libsodium"
echo " Ubuntu: sudo apt-get install libsodium-dev"
echo " Or build from: https://github.com/jedisct1/libsodium"
exit 1
fi
echo "✓ libblake3 found: $(pkg-config --modversion libblake3)"
echo "✓ libsodium found: $(pkg-config --modversion libsodium)"
# ============================================================================
# 2. Compile NASM (production crypto)
# ============================================================================
echo "[2/5] Compiling NASM assembly (production crypto)..."
if command -v nasm &> /dev/null; then
nasm -f elf64 mutation-validator.asm -o mutation-validator.o
nasm -f elf64 digest-verifier-prod.asm -o digest-verifier-prod.o
echo "✓ NASM compiled"
else
echo "WARNING: nasm not found, skipping assembly compilation"
touch mutation-validator.o digest-verifier-prod.o
fi
# ============================================================================
# 3. Compile C++ Node.js binding
# ============================================================================
echo "[3/5] Compiling C++ Node.js binding..."
npx node-gyp configure --release
# Override include/lib paths for libblake3 + libsodium
export CFLAGS="$(pkg-config --cflags libblake3 libsodium)"
export LDFLAGS="$(pkg-config --libs libblake3 libsodium)"
npx node-gyp build --release
echo "✓ Node.js binding compiled"
# ============================================================================
# 4. Link with crypto libraries
# ============================================================================
echo "[4/5] Linking with libblake3 + libsodium..."
# Create production binding (if NASM succeeded)
if [ -f "mutation-validator.o" ] && [ -f "digest-verifier-prod.o" ]; then
g++ -shared \
-fPIC \
mutation-validator.o \
digest-verifier-prod.o \
$(pkg-config --cflags --libs libblake3 libsodium) \
-o binding-prod.so \
-lnode
echo "✓ Production binding created: binding-prod.so"
else
echo "⚠ Skipping production binding (NASM objects not found)"
fi
# ============================================================================
# 5. Verify linking
# ============================================================================
echo "[5/5] Verifying symbols..."
if [ -f "binding-prod.so" ]; then
echo "Exported symbols in binding-prod.so:"
nm binding-prod.so | grep -E "blake3_verify|ed25519_verify|loadAsmLibrary" || echo " (symbol check may vary by platform)"
fi
echo ""
echo "=== Build Complete ==="
echo "Artifacts:"
echo " - build/Release/binding.node (Node.js addon)"
echo " - binding-prod.so (Crypto-linked library)"
echo " - mutation-validator.o (NASM object)"
echo " - digest-verifier-prod.o (NASM crypto object)"
echo ""
echo "Production Crypto:"
echo " - Blake3: libblake3 linked"
echo " - Ed25519: libsodium linked"
echo ""
echo "Next: Deploy binding-prod.so alongside Node.js runtime"
|