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"