build-host-release.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/bin/bash
  2. BUILD_TARGET=""
  3. BUILD_FEATURES=()
  4. while getopts "t:f:" opt; do
  5. case $opt in
  6. t)
  7. BUILD_TARGET=$OPTARG
  8. ;;
  9. f)
  10. BUILD_FEATURES+=($OPTARG)
  11. ;;
  12. ?)
  13. echo "Usage: $(basename $0) [-t <target-triple>] [-f <feature>]"
  14. ;;
  15. esac
  16. done
  17. BUILD_FEATURES+=${BUILD_EXTRA_FEATURES}
  18. ROOT_DIR=$( cd $( dirname $0 ) && pwd )
  19. VERSION=$(grep -E '^version' "${ROOT_DIR}/../Cargo.toml" | awk '{print $3}' | sed 's/"//g')
  20. HOST_TRIPLE=$(rustc -Vv | grep 'host:' | awk '{print $2}')
  21. echo "Started build release ${VERSION} for ${HOST_TRIPLE} (target: ${BUILD_TARGET}) with features \"${BUILD_FEATURES}\"..."
  22. if [[ "${BUILD_TARGET}" != "" ]]; then
  23. if [[ "${BUILD_FEATURES}" != "" ]]; then
  24. cargo build --release --features "${BUILD_FEATURES}" --target "${BUILD_TARGET}"
  25. else
  26. cargo build --release --target "${BUILD_TARGET}"
  27. fi
  28. else
  29. if [[ "${BUILD_FEATURES}" != "" ]]; then
  30. cargo build --release --features "${BUILD_FEATURES}"
  31. else
  32. cargo build --release
  33. fi
  34. fi
  35. if [[ "$?" != "0" ]]; then
  36. exit 1;
  37. fi
  38. if [[ "${BUILD_TARGET}" == "" ]]; then
  39. BUILD_TARGET=$HOST_TRIPLE
  40. fi
  41. TARGET_SUFFIX=""
  42. if [[ "${BUILD_TARGET}" == *"-windows-"* ]]; then
  43. TARGET_SUFFIX=".exe"
  44. fi
  45. TARGET="good-mitm${TARGET_SUFFIX}"
  46. RELEASE_FOLDER="${ROOT_DIR}/release"
  47. RELEASE_PACKAGE_NAME="good-mitm-${VERSION}-${BUILD_TARGET}"
  48. mkdir -p "${RELEASE_FOLDER}"
  49. # Into release folder
  50. if [[ "${BUILD_TARGET}" != "" ]]; then
  51. cd "${ROOT_DIR}/../target/${BUILD_TARGET}/release"
  52. else
  53. cd "${ROOT_DIR}/../target/release"
  54. fi
  55. if [[ "${BUILD_TARGET}" == *"-windows-"* ]]; then
  56. # For Windows, use zip
  57. RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.zip"
  58. RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}"
  59. zip "${RELEASE_PACKAGE_FILE_PATH}" "${TARGET}"
  60. if [[ $? != "0" ]]; then
  61. exit 1
  62. fi
  63. # Checksum
  64. cd "${RELEASE_FOLDER}"
  65. shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
  66. else
  67. # For others, Linux, OS X, uses tar.xz
  68. # For Darwin, .DS_Store and other related files should be ignored
  69. if [[ "$(uname -s)" == "Darwin" ]]; then
  70. export COPYFILE_DISABLE=1
  71. fi
  72. RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.tar.xz"
  73. RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}"
  74. tar -cJf "${RELEASE_PACKAGE_FILE_PATH}" "${TARGET}"
  75. if [[ $? != "0" ]]; then
  76. exit 1
  77. fi
  78. # Checksum
  79. cd "${RELEASE_FOLDER}"
  80. shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
  81. fi
  82. echo "Finished build release ${RELEASE_PACKAGE_FILE_PATH}"