Files
EdgeNode/build/build.sh

150 lines
3.8 KiB
Bash
Raw Normal View History

2020-09-09 18:53:53 +08:00
#!/usr/bin/env bash
function build() {
2020-10-14 14:46:34 +08:00
ROOT=$(dirname $0)
NAME="edge-node"
2022-06-29 15:42:50 +08:00
VERSION=$(lookup-version "$ROOT"/../internal/const/const.go)
2020-10-14 14:46:34 +08:00
DIST=$ROOT/"../dist/${NAME}"
2024-07-27 15:42:50 +08:00
MUSL_DIR="/opt/homebrew/bin"
SRCDIR=$(realpath "$ROOT/..")
2023-08-23 18:21:32 +08:00
# for macOS users: precompiled gcc can be downloaded from https://github.com/messense/homebrew-macos-cross-toolchains
GCC_X86_64_DIR="/usr/local/gcc/x86_64-unknown-linux-gnu/bin"
GCC_ARM64_DIR="/usr/local/gcc/aarch64-unknown-linux-gnu/bin"
2022-01-09 20:12:59 +08:00
2020-10-14 14:46:34 +08:00
OS=${1}
ARCH=${2}
2021-07-25 16:28:36 +08:00
TAG=${3}
2020-10-14 14:46:34 +08:00
2022-06-29 15:42:50 +08:00
if [ -z "$OS" ]; then
2020-10-14 14:46:34 +08:00
echo "usage: build.sh OS ARCH"
exit
fi
2022-06-29 15:42:50 +08:00
if [ -z "$ARCH" ]; then
2020-10-14 14:46:34 +08:00
echo "usage: build.sh OS ARCH"
2020-09-09 18:53:53 +08:00
exit
fi
2022-06-29 15:42:50 +08:00
if [ -z "$TAG" ]; then
2021-07-25 16:28:36 +08:00
TAG="community"
fi
2020-09-09 18:53:53 +08:00
echo "checking ..."
ZIP_PATH=$(which zip)
2022-06-29 15:42:50 +08:00
if [ -z "$ZIP_PATH" ]; then
2020-09-09 18:53:53 +08:00
echo "we need 'zip' command to compress files"
exit
fi
2021-07-25 16:28:36 +08:00
echo "building v${VERSION}/${OS}/${ARCH}/${TAG} ..."
ZIP="${NAME}-${OS}-${ARCH}-${TAG}-v${VERSION}.zip"
2020-09-09 18:53:53 +08:00
echo "copying ..."
2022-06-29 15:42:50 +08:00
if [ ! -d "$DIST" ]; then
mkdir "$DIST"
mkdir "$DIST"/bin
mkdir "$DIST"/configs
mkdir "$DIST"/logs
mkdir "$DIST"/data
2022-03-26 11:47:25 +08:00
if [ "$TAG" = "plus" ]; then
2022-06-29 15:42:50 +08:00
mkdir "$DIST"/scripts
mkdir "$DIST"/scripts/js
2022-03-26 11:47:25 +08:00
fi
2020-09-09 18:53:53 +08:00
fi
2023-08-12 15:08:22 +08:00
cp "$ROOT"/configs/api_node.template.yaml "$DIST"/configs
cp "$ROOT"/configs/cluster.template.yaml "$DIST"/configs
2022-06-29 15:42:50 +08:00
cp -R "$ROOT"/www "$DIST"/
cp -R "$ROOT"/pages "$DIST"/
2020-09-09 18:53:53 +08:00
2023-07-24 10:01:38 +08:00
# we support TOA on linux only
if [ "$OS" == "linux" ] && [ -f "${ROOT}/edge-toa/edge-toa-${ARCH}" ]
2020-12-03 10:17:28 +08:00
then
2023-08-23 18:21:32 +08:00
if [ ! -d "$DIST/edge-toa" ]
then
mkdir "$DIST/edge-toa"
fi
2023-07-24 10:01:38 +08:00
cp "${ROOT}/edge-toa/edge-toa-${ARCH}" "$DIST/edge-toa/edge-toa"
2020-12-03 10:17:28 +08:00
fi
2020-09-09 18:53:53 +08:00
echo "building ..."
2021-05-25 11:05:55 +08:00
CC_PATH=""
CXX_PATH=""
CGO_LDFLAGS=""
CGO_CFLAGS=""
2022-01-09 20:12:59 +08:00
BUILD_TAG=$TAG
2024-07-27 15:42:50 +08:00
if [[ "${OS}" == "linux" ]]; then
2021-05-25 11:05:55 +08:00
if [ "${ARCH}" == "amd64" ]; then
2024-07-27 15:42:50 +08:00
CC_PATH=$(command -v x86_64-linux-musl-gcc)
CXX_PATH=$(command -v x86_64-linux-musl-g++)
# if [ "$TAG" = "plus" ]; then
# BUILD_TAG="plus,script,packet"
# fi
2021-05-25 11:05:55 +08:00
fi
if [ "${ARCH}" == "arm64" ]; then
2024-07-27 15:42:50 +08:00
CC_PATH=$(command -v aarch64-linux-musl-gcc)
CXX_PATH=$(command -v aarch64-linux-musl-g++)
# if [ "$TAG" = "plus" ]; then
# BUILD_TAG="plus,script,packet"
# fi
2021-05-25 11:05:55 +08:00
fi
fi
# libpcap
if [ "$OS" == "linux" ] && [[ "$ARCH" == "amd64" || "$ARCH" == "arm64" ]] && [ "$TAG" == "plus" ]; then
2023-11-21 20:18:37 +08:00
CGO_LDFLAGS="-L${SRCDIR}/libs/libpcap/${ARCH} -lpcap -L${SRCDIR}/libs/libbrotli/${ARCH} -lbrotlienc -lbrotlidec -lbrotlicommon"
CGO_CFLAGS="-I${SRCDIR}/libs/libpcap/src/libpcap -I${SRCDIR}/libs/libpcap/src/libpcap/pcap -I${SRCDIR}/libs/libbrotli/src/brotli/c/include"
fi
2024-07-27 15:42:50 +08:00
if [ -f $CC_PATH ]; then
env CC=$CC_PATH \
CXX=$CXX_PATH GOOS="${OS}" \
GOARCH="${ARCH}" CGO_ENABLED=1 \
CGO_LDFLAGS="${CGO_LDFLAGS}" \
CGO_CFLAGS="${CGO_CFLAGS}" \
go build -trimpath -tags $BUILD_TAG -o "$DIST"/bin/${NAME} -ldflags "-linkmode external -extldflags -static -s -w" "$ROOT"/../cmd/edge-node/main.go
2021-05-25 11:05:55 +08:00
else
if [[ `uname` == *"Linux"* ]] && [ "$OS" == "linux" ] && [[ "$ARCH" == "amd64" || "$ARCH" == "arm64" ]] && [ "$TAG" == "plus" ]; then
BUILD_TAG="plus,script,packet"
fi
env GOOS="${OS}" GOARCH="${ARCH}" CGO_ENABLED=1 CGO_LDFLAGS="${CGO_LDFLAGS}" CGO_CFLAGS="${CGO_CFLAGS}" go build -trimpath -tags $BUILD_TAG -o "$DIST"/bin/${NAME} -ldflags="-s -w" "$ROOT"/../cmd/edge-node/main.go
2021-05-25 11:05:55 +08:00
fi
2020-09-09 18:53:53 +08:00
2023-08-23 17:50:33 +08:00
if [ ! -f "${DIST}/bin/${NAME}" ]; then
echo "build failed!"
exit
fi
2020-11-13 18:22:56 +08:00
# delete hidden files
2022-06-29 15:42:50 +08:00
find "$DIST" -name ".DS_Store" -delete
find "$DIST" -name ".gitignore" -delete
2020-11-13 18:22:56 +08:00
2020-09-09 18:53:53 +08:00
echo "zip files"
cd "${DIST}/../" || exit
if [ -f "${ZIP}" ]; then
rm -f "${ZIP}"
fi
zip -r -X -q "${ZIP}" ${NAME}/
rm -rf ${NAME}
cd - || exit
echo "OK"
}
2020-10-14 14:46:34 +08:00
function lookup-version() {
FILE=$1
2022-06-29 15:42:50 +08:00
VERSION_DATA=$(cat "$FILE")
2020-10-14 14:46:34 +08:00
re="Version[ ]+=[ ]+\"([0-9.]+)\""
if [[ $VERSION_DATA =~ $re ]]; then
VERSION=${BASH_REMATCH[1]}
2022-06-29 15:42:50 +08:00
echo "$VERSION"
2020-10-14 14:46:34 +08:00
else
echo "could not match version"
exit
fi
}
2022-06-29 15:42:50 +08:00
build "$1" "$2" "$3"