github.com/Psiphon-Labs/psiphon-tunnel-core@v2.0.28+incompatible/ConsoleClient/make.bash (about)

     1  #!/usr/bin/env bash
     2  
     3  set -e -u -x
     4  
     5  if [ ! -f make.bash ]; then
     6    echo "make.bash must be run from $GOPATH/src/github.com/Psiphon-Labs/psiphon-tunnel-core/ConsoleClient"
     7    exit 1
     8  fi
     9  
    10  # $2, if specified, is go build tags
    11  if [ -z ${2+x} ]; then BUILD_TAGS=""; else BUILD_TAGS="$2"; fi
    12  
    13  # At this time, we don't support modules
    14  export GO111MODULE=off
    15  
    16  EXE_BASENAME="psiphon-tunnel-core"
    17  
    18  prepare_build () {
    19    BUILDINFOFILE="${EXE_BASENAME}_buildinfo.txt"
    20    BUILDDATE=$(date --iso-8601=seconds)
    21    BUILDREPO=$(git config --get remote.origin.url)
    22    BUILDREV=$(git rev-parse --short HEAD)
    23    GOVERSION=$(go version | perl -ne '/go version (.*?) / && print $1')
    24  
    25    # see DEPENDENCIES comment in MobileLibrary/Android/make.bash
    26    DEPENDENCIES=$(echo -n "{" && GOOS=$1 go list -tags "${BUILD_TAGS}" -f '{{range $dep := .Deps}}{{printf "%s\n" $dep}}{{end}}' | GOOS=$1 xargs go list -tags "${BUILD_TAGS}" -f '{{if not .Standard}}{{.ImportPath}}{{end}}' | xargs -I pkg bash -c 'cd $GOPATH/src/$0 && if echo -n "$0" | grep -vEq "^github.com/Psiphon-Labs/psiphon-tunnel-core/" ; then echo -n "\"$0\":\"$(git rev-parse --short HEAD)\"," ; fi' pkg | sed 's/,$//' | tr -d '\n' && echo -n "}")
    27  
    28    LDFLAGS="\
    29    -s \
    30    -w \
    31    -X github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common/buildinfo.buildDate=$BUILDDATE \
    32    -X github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common/buildinfo.buildRepo=$BUILDREPO \
    33    -X github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common/buildinfo.buildRev=$BUILDREV \
    34    -X github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common/buildinfo.goVersion=$GOVERSION \
    35    -X github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common/buildinfo.dependencies=$DEPENDENCIES \
    36    "
    37    echo -e "${BUILDDATE}\n${BUILDREPO}\n${BUILDREV}\n" > $BUILDINFOFILE
    38  
    39    echo "Variables for ldflags:"
    40    echo " Build date: ${BUILDDATE}"
    41    echo " Build repo: ${BUILDREPO}"
    42    echo " Build revision: ${BUILDREV}"
    43    echo " Go version: ${GOVERSION}"
    44    echo " Dependencies: ${DEPENDENCIES}"
    45    echo ""
    46  }
    47  
    48  if [ ! -d bin ]; then
    49    mkdir bin
    50  fi
    51  
    52  build_for_windows () {
    53    prepare_build windows
    54  
    55    echo "...Building windows-i686"
    56  
    57    CGO_LDFLAGS="-L /usr/i686-w64-mingw32/lib/ -lwsock32 -lcrypt32 -lgdi32" \
    58    CC=/usr/bin/i686-w64-mingw32-gcc \
    59    GOOS=windows GOARCH=386 go build -v -x -ldflags "$LDFLAGS" -tags "${BUILD_TAGS}" -o bin/windows/${EXE_BASENAME}-i686.exe
    60    RETVAL=$?
    61    echo ".....gox completed, exit code: $?"
    62    if [ $RETVAL != 0 ]; then
    63      echo ".....gox failed, exiting"
    64      exit $RETVAL
    65    fi
    66    unset RETVAL
    67  
    68    ## We are finding that UPXing the full Windows Psiphon client produces better results if psiphon-tunnel-core.exe is not already UPX'd.
    69    echo "....No UPX for this build"
    70  
    71    echo "...Building windows-x86_64"
    72  
    73    CGO_LDFLAGS="-L /usr/x86_64-w64-mingw32/lib/ -lwsock32 -lcrypt32 -lgdi32" \
    74    CC=/usr/bin/x86_64-w64-mingw32-gcc \
    75    GOOS=windows GOARCH=amd64 go build -v -x -ldflags "$LDFLAGS" -tags "${BUILD_TAGS}" -o bin/windows/${EXE_BASENAME}-x86_64.exe
    76    RETVAL=$?
    77    if [ $RETVAL != 0 ]; then
    78      echo ".....gox failed, exiting"
    79      exit $RETVAL
    80    fi
    81    unset RETVAL
    82  
    83    # We are finding that UPXing the full Windows Psiphon client produces better results if psiphon-tunnel-core.exe is not already UPX'd.
    84    echo "....No UPX for this build"
    85  }
    86  
    87  build_for_linux () {
    88    prepare_build linux
    89  
    90    echo "...Building linux-i686"
    91    # TODO: is "CFLAGS=-m32" required?
    92    CFLAGS=-m32 GOOS=linux GOARCH=386 go build -v -x -ldflags "$LDFLAGS" -tags "${BUILD_TAGS}" -o bin/linux/${EXE_BASENAME}-i686
    93    RETVAL=$?
    94    if [ $RETVAL != 0 ]; then
    95      echo ".....gox failed, exiting"
    96      exit $RETVAL
    97    fi
    98    unset RETVAL
    99  
   100    echo "....UPX packaging output"
   101    goupx --best bin/linux/${EXE_BASENAME}-i686
   102    RETVAL=$?
   103    if [ $RETVAL != 0 ]; then
   104      echo ".....goupx failed, exiting"
   105      exit $RETVAL
   106    fi
   107    unset RETVAL
   108  
   109    echo "...Building linux-x86_64"
   110    GOOS=linux GOARCH=amd64 go build -v -x -ldflags "$LDFLAGS" -tags "${BUILD_TAGS}" -o bin/linux/${EXE_BASENAME}-x86_64
   111    RETVAL=$?
   112    if [ $RETVAL != 0 ]; then
   113      echo "....gox failed, exiting"
   114      exit $RETVAL
   115    fi
   116    unset RETVAL
   117  
   118    echo "....UPX packaging output"
   119    goupx --best bin/linux/${EXE_BASENAME}-x86_64
   120    RETVAL=$?
   121    if [ $RETVAL != 0 ]; then
   122      echo ".....goupx failed, exiting"
   123      exit $RETVAL
   124    fi
   125    unset RETVAL
   126  }
   127  
   128  build_for_osx () {
   129    prepare_build darwin
   130  
   131    echo "Building darwin-x86_64..."
   132    echo "..Disabling CGO for this build"
   133    # TODO: is "CGO_ENABLED=0" required?
   134    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -v -x -ldflags "$LDFLAGS" -tags "${BUILD_TAGS}" -o bin/darwin/${EXE_BASENAME}-x86_64
   135    # Darwin binaries don't seem to be UPXable when built this way
   136    echo "..No UPX for this build"
   137  }
   138  
   139  TARGET=$1
   140  case $TARGET in
   141    windows)
   142      echo "..Building for Windows"
   143      build_for_windows
   144      exit $?
   145  
   146      ;;
   147    linux)
   148      echo "..Building for Linux"
   149      build_for_linux
   150      exit $?
   151  
   152      ;;
   153    osx)
   154      echo "..Building for OSX"
   155      build_for_osx
   156      exit $?
   157  
   158      ;;
   159    all)
   160      echo "..Building all"
   161      build_for_windows
   162      if [ $? != 0 ]; then
   163        exit $?
   164      fi
   165  
   166      build_for_linux
   167      if [ $? != 0 ]; then
   168        exit $?
   169      fi
   170  
   171      build_for_osx
   172      if [ $? != 0 ]; then
   173        exit $?
   174      fi
   175  
   176      ;;
   177    *)
   178      echo "..invalid target"
   179      exit 1
   180  
   181      ;;
   182  
   183  esac
   184  
   185  echo "Done"