[OCaml] Mobile-friendly clone of cgit.
Add static binary release build script
- scripts/build-release.sh creates an opam switch with musl static linking - Builds, strips, and outputs binary to dist/ogit - Documents prerequisites (musl-gcc, opam) - Add dist/ to .gitignore
Changed files
.gitignore
@@ -2,3 +2,4 @@
2
2
3
3
_build/
4
4
_opam/
5
Added:
dist/
scripts/build-release.sh
@@ -0,0 +1,68 @@
1
Added:
#!/bin/sh
2
Added:
# Build a statically-linked ogit binary using musl.
3
Added:
#
4
Added:
# Prerequisites:
5
Added:
# - opam (>= 2.1)
6
Added:
# - musl-gcc (install musl-tools on Debian/Ubuntu, sys-libs/musl on Gentoo)
7
Added:
# - A C compiler (gcc or clang)
8
Added:
#
9
Added:
# This script creates a dedicated opam switch with static musl compilation,
10
Added:
# installs dependencies, builds, strips, and copies the binary to dist/.
11
Added:
#
12
Added:
# Usage:
13
Added:
# ./scripts/build-release.sh
14
Added:
15
Added:
set -eu
16
Added:
17
Added:
SWITCH_NAME="ogit-static"
18
Added:
OCAML_VERSION="5.2.1"
19
Added:
PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
20
Added:
DIST_DIR="${PROJECT_ROOT}/dist"
21
Added:
22
Added:
# Verify musl-gcc is available
23
Added:
if ! command -v musl-gcc >/dev/null 2>&1; then
24
Added:
echo "ERROR: musl-gcc not found."
25
Added:
echo " Debian/Ubuntu: apt install musl-tools"
26
Added:
echo " Gentoo: emerge sys-libs/musl"
27
Added:
echo " Fedora: dnf install musl-gcc"
28
Added:
exit 1
29
Added:
fi
30
Added:
31
Added:
# Verify opam is available
32
Added:
if ! command -v opam >/dev/null 2>&1; then
33
Added:
echo "ERROR: opam not found. Install from https://opam.ocaml.org/doc/Install.html"
34
Added:
exit 1
35
Added:
fi
36
Added:
37
Added:
echo "==> Creating opam switch '${SWITCH_NAME}' (if not exists)..."
38
Added:
if ! opam switch list 2>/dev/null | grep -q "${SWITCH_NAME}"; then
39
Added:
opam switch create "${SWITCH_NAME}" \
40
Added:
--packages="ocaml-variants.${OCAML_VERSION}+options,ocaml-option-static,ocaml-option-musl" \
41
Added:
--no-install
42
Added:
fi
43
Added:
44
Added:
echo "==> Installing dependencies..."
45
Added:
opam install --switch="${SWITCH_NAME}" --deps-only --yes "${PROJECT_ROOT}"
46
Added:
47
Added:
echo "==> Building..."
48
Added:
opam exec --switch="${SWITCH_NAME}" -- dune build --root="${PROJECT_ROOT}" --force
49
Added:
50
Added:
BINARY="${PROJECT_ROOT}/_build/default/bin/main.exe"
51
Added:
52
Added:
if [ ! -f "${BINARY}" ]; then
53
Added:
echo "ERROR: Build produced no binary at ${BINARY}"
54
Added:
exit 1
55
Added:
fi
56
Added:
57
Added:
echo "==> Stripping binary..."
58
Added:
strip "${BINARY}"
59
Added:
60
Added:
echo "==> Copying to dist/..."
61
Added:
mkdir -p "${DIST_DIR}"
62
Added:
cp "${BINARY}" "${DIST_DIR}/ogit"
63
Added:
64
Added:
echo ""
65
Added:
echo "Done. Binary at: ${DIST_DIR}/ogit"
66
Added:
echo ""
67
Added:
file "${DIST_DIR}/ogit"
68
Added:
ls -lh "${DIST_DIR}/ogit"