lite-make.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/bin/bash
  2. set -e
  3. export CGO_ENABLED=1
  4. export GO111MODULE=on
  5. export GOOS=linux
  6. export MUSL=/musl
  7. ## 准备必要的环境
  8. [[ ! -d ~/go/src ]] && mkdir -p ~/go/src
  9. [[ ! -d ~/go/bin ]] && mkdir -p ~/go/bin
  10. ## 下载源码并下载go mod
  11. cd ~/go/src
  12. curl -sSL https://github.com/ChineseSubFinder/ChineseSubFinder/archive/refs/tags/${VERSION}.tar.gz | tar xvz --strip-components 1
  13. npm --prefix frontend ci
  14. npm --prefix frontend run build
  15. go mod tidy
  16. ## 编译共用函数
  17. cross_make() {
  18. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  19. if [[ -n ${CROSS_NAME} ]]; then
  20. export CPLUS_VERSION=$(${MUSL}/${CROSS_NAME}-cross/bin/${CROSS_NAME}-g++ --version | grep -oE '\d+\.\d+\.\d+' | head -1)
  21. export PATH=${MUSL}/${CROSS_NAME}-cross/bin:${MUSL}/${CROSS_NAME}-cross/${CROSS_NAME}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  22. export C_INCLUDE_PATH=${MUSL}/${CROSS_NAME}-cross/${CROSS_NAME}/include
  23. export CPLUS_INCLUDE_PATH=${MUSL}/${CROSS_NAME}-cross/${CROSS_NAME}/include/c++/${CPLUS_VERSION}
  24. export LIBRARY_PATH=${MUSL}/${CROSS_NAME}-cross/${CROSS_NAME}/lib
  25. export CC=${CROSS_NAME}-gcc
  26. export CXX=${CROSS_NAME}-g++
  27. export AR=${CROSS_NAME}-ar
  28. fi
  29. echo "[$(date +'%H:%M:%S')] 开始编译 ${GOARCH} 平台..."
  30. go build \
  31. -ldflags="-s -w --extldflags '-static -fpic' -X main.AppVersion=${VERSION} -X main.LiteMode=true -X main.BaseKey=${BASEKEY} -X main.AESKey16=${AESKEY16} -X main.AESIv16=${AESIV16}" \
  32. -o ~/go/out/${GOARCH}/chinesesubfinder \
  33. ./cmd/chinesesubfinder
  34. if [[ -n ${CROSS_NAME} ]]; then
  35. unset -v CPLUS_VERSION PATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH CC CXX AR
  36. fi
  37. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  38. }
  39. ## 开始交叉编译
  40. arches=( amd64 386 arm64 arm )
  41. crosses=( "" i686-linux-musl aarch64-linux-musl armv7l-linux-musleabihf )
  42. for ((i=0; i<${#arches[@]}; i++)); do
  43. export GOARCH=${arches[i]}
  44. export CROSS_NAME=${crosses[i]}
  45. [[ ${GOARCH} == amd64 ]] && export GOAMD64=v1
  46. [[ ${GOARCH} == arm ]] && export GOARM=7
  47. cross_make
  48. unset -v GOARCH CROSS_NAME GOAMD64 GOARM
  49. done
  50. ## 列出文件
  51. ls -lR ~/go/out
  52. exit 0