50 lines
1.1 KiB
Bash
Executable file
50 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -uo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
DIST_DIR="${ROOT_DIR}/dist"
|
|
|
|
mkdir -p "${DIST_DIR}"
|
|
: "${GOCACHE:=/tmp/go-build}"
|
|
mkdir -p "${GOCACHE}"
|
|
|
|
TARGETS=(
|
|
"darwin amd64"
|
|
"darwin arm64"
|
|
"linux amd64"
|
|
"linux arm64"
|
|
"windows amd64"
|
|
)
|
|
|
|
host_os="$(go env GOOS)"
|
|
host_arch="$(go env GOARCH)"
|
|
build_failed=0
|
|
|
|
for target in "${TARGETS[@]}"; do
|
|
read -r goos goarch <<<"${target}"
|
|
|
|
ext=""
|
|
if [[ "${goos}" == "windows" ]]; then
|
|
ext=".exe"
|
|
fi
|
|
|
|
output="${DIST_DIR}/ztorrent-${goos}-${goarch}${ext}"
|
|
rm -f "${output}"
|
|
echo "Building ${output}"
|
|
|
|
if [[ "${goos}" == "${host_os}" ]]; then
|
|
if ! GOCACHE="${GOCACHE}" CGO_ENABLED=1 GOOS="${goos}" GOARCH="${goarch}" go build -o "${output}" ./cmd/torrent-client; then
|
|
echo "Failed to build local target ${goos}/${goarch}"
|
|
build_failed=1
|
|
fi
|
|
continue
|
|
fi
|
|
|
|
echo "Skipping ${goos}/${goarch}: native GUI build requires building on that target OS/arch (or a configured cross C toolchain)."
|
|
done
|
|
|
|
if [[ "${build_failed}" -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
echo "Build complete. Artifacts are in ${DIST_DIR}"
|