Skip to content
Snippets Groups Projects
build.sh 2.95 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kali Kaneko's avatar
    Kali Kaneko committed
    #!/bin/bash
    set -e
    
    
    # DEBUG --------------
    # set -x
    # --------------------
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    XBUILD=${XBUILD-no}
    
    kali's avatar
    kali committed
    VENDOR_PATH=${VENDOR_PATH-providers/riseup}
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    OSX_TARGET=10.11
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    WIN64="win64"
    GO=`which go`
    
    PROJECT=bitmask.pro
    TARGET_GOLIB=lib/libgoshim.a
    SOURCE_GOLIB=gui/backend.go
    
    
    QTBUILD=build/qt
    RELEASE=$QTBUILD/release
    
    PLATFORM=$(uname -s)
    
    kali's avatar
    kali committed
    LDFLAGS=""
    
    BUILD_GOLIB="yes"
    
    
    if [ "$TARGET" == "" ]
    then
        TARGET=riseup-vpn
    fi
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    if [ "$XBUILD" == "$WIN64" ]
    then
        # TODO allow to override vars
    
        QMAKE="`pwd`/../../mxe/usr/x86_64-w64-mingw32.static/qt5/bin/qmake"
        PATH="`pwd`/../../mxe/usr/bin"/:$PATH
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        CC=x86_64-w64-mingw32.static-gcc
    else
    
        if [ "$QMAKE" == "" ]
        then
            QMAKE=`which qmake`
        fi
    
    PLATFORM=`uname -s`
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    function init {
        mkdir -p lib
    }
    
    function buildGoLib {
        echo "[+] Using go in" $GO "[`go version`]"
    
        $GO generate ./pkg/config/version/genver/gen.go
    
        if [ "$PLATFORM" == "Darwin" ]
        then
            GOOS=darwin
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            CC=clang
            CGO_CFLAGS="-g -O2 -mmacosx-version-min=$OSX_TARGET"
            CGO_LDFLAGS="-g -O2 -mmacosx-version-min=$OSX_TARGET"
    
    kali's avatar
    kali committed
        fi
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        if [ "$XBUILD" == "no" ]
        then
            echo "[+] Building Go library with standard Go compiler"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            CGO_ENABLED=1 GOOS=$GOOS CC=$CC CGO_CFLAGS=$CGO_CFLAGS CGO_LDFLAGS=$CGO_LDFLAGS go build -buildmode=c-archive -o $TARGET_GOLIB $SOURCE_GOLIB
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        fi
        if [ "$XBUILD" == "$WIN64" ]
        then
            echo "[+] Building Go library with mxe"
    
            echo "[+] Using cc:" $CC
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            CC=$CC CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -buildmode=c-archive -o $TARGET_GOLIB $SOURCE_GOLIB
        fi
    }
    
    function buildQmake {
        echo "[+] Now building Qml app with Qt qmake"
    
        echo "[+] Using qmake in:" $QMAKE
    
        mkdir -p $QTBUILD
    
    kali's avatar
    kali committed
        $QMAKE -o "$QTBUILD/Makefile" CONFIG-=debug CONFIG+=release VENDOR_PATH=${VENDOR_PATH} $PROJECT
    
    }
    
    function renameOutput {
        # i would expect that passing QMAKE_TARGET would produce the right output, but nope.
        if [ "$PLATFORM" == "Linux" ]
        then
        	mv $RELEASE/bitmask $RELEASE/$TARGET
        	strip $RELEASE/$TARGET
        	echo "[+] Binary is in" $RELEASE/$TARGET
    
        elif  [ "$PLATFORM" == "Darwin" ]
    
        then
        	rm -rf $RELEASE/$TARGET.app
        	mv $RELEASE/bitmask.app/ $RELEASE/$TARGET.app/
        	echo "[+] App is in" $RELEASE/$TARGET
    
        else # for MINGWIN or CYGWIN
    
    kali's avatar
    kali committed
        	mv $RELEASE/bitmask.exe $RELEASE/$TARGET.exe
        fi
    
    function buildDefault {
        echo "[+] Building BitmaskVPN"
        lrelease bitmask.pro
        if [ "$BUILD_GOLIB" == "yes" ]
        then
            buildGoLib
        fi
        buildQmake
    
        make -C $QTBUILD clean
        make -C $QTBUILD -j4 all
    
        renameOutput
        echo "[+] Done."
    }
    
    kali's avatar
    kali committed
    echo "[build.sh] VENDOR_PATH =" ${VENDOR_PATH}
    
    for i in "$@"
    do
    case $i in
        --skip-golib)
        BUILD_GOLIB="no"
        shift # past argument=value
        ;;
        --just-golib)
        BUILD_GOLIB="just"
        shift # past argument=value
        ;;
        *)
              # unknown option
        ;;
    esac
    done
    
    if [ "$BUILD_GOLIB" == "just" ]
    then
        buildGoLib
    else
        buildDefault
    fi