Skip to content
Snippets Groups Projects
Makefile 4.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kali Kaneko's avatar
    Kali Kaneko committed
    #########################################
    # (c) LEAP Encryption Access Project 2018
    include vendor.mk
    #########################################
    
    #
    # TODO review some of these targets, can go in the parent makefile
    # 
    
    SYSTRAY := 0xacab.org/leap/bitmask-vpn
    STAGING := staging
    SYSTRAY_BIN := bitmask-vpn
    HELPER_BIN := bitmask_helper
    BUILD_RELEASE?=no
    WIN_CERT_PATH?=z:\leap\LEAP.pfx
    WIN_CERT_PASS?=
    OSX_CERT = "Developer ID Installer: LEAP Encryption Access Project"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    DEB_VERSION = $(shell echo ${VERSION} | cut -d '-' -f 1,2)
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    
    # -----------------------------------------------------------------------------
    # Windows 
    # -----------------------------------------------------------------------------
    CROSS_FLAGS = CGO_ENABLED=1 GOARCH=386 GOOS=windows CC="/usr/bin/i686-w64-mingw32-gcc" CGO_LDFLAGS="-lssp" CXX="i686-w64-mingw32-c++"
    
    openvpn_win:
    	if not exist staging\openvpn mkdir staging\openvpn
    	wget https://build.openvpn.net/downloads/releases/latest/tap-windows-latest-stable.exe -O staging/openvpn/tap-windows.exe
    # eventually, this should be built statically and cross compiled in the same pipeline that we build the installer. 
    	wget https://downloads.leap.se/thirdparty/windows/openvpn-x86_64-w64-mingw32.tar.bz2 -O staging/openvpn/openvpn.tar.bz2
    	7z e -y -ostaging/openvpn/ staging/openvpn/openvpn.tar.bz2
    	7z e -y -r -ostaging/openvpn/ staging/openvpn/openvpn.tar *.dll
    	7z e -y -r -ostaging/openvpn/ staging/openvpn/openvpn.tar *.exe
    	copy .\staging\openvpn\openvpn.exe .\staging
    	copy .\staging\openvpn\*.dll .\staging
    openvpn_cross_win:
    	mkdir -p staging/openvpn
    	wget https://build.openvpn.net/downloads/releases/latest/tap-windows-latest-stable.exe -O $(STAGING)/openvpn/tap-windows.exe
    	wget https://downloads.leap.se/thirdparty/windows/openvpn-x86_64-w64-mingw32.tar.bz2 -O $(STAGING)/openvpn/openvpn.tar.bz2
    	tar xvjf $(STAGING)/openvpn/openvpn.tar.bz2 -C $(STAGING)/openvpn/
    	cp $(STAGING)/openvpn/bin/openvpn.exe $(STAGING)/openvpn
    	cp $(STAGING)/openvpn/bin/*.dll $(STAGING)
    	cp $(STAGING)/openvpn/lib/engines-1_1/*.dll $(STAGING)
    
    
    # TODO no need to build systray in windows, but move this powershell hack to main build makefile
    #powershell '$$gopath=go env GOPATH;$$version=git -C $$gopath/src/$(SYSTRAY) describe --tags; go build -ldflags "-H windowsgui -s -w -X main.version=$$version" -o $(STAGING)/$(SYSTRAY_BIN).exe $(SYSTRAY)/cmd/bitmask-vpn'
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    pkg_win: staging\nssm.exe helper_win systray_win
    
    # I assume you did bootstrap openvpn_win manually already.
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	echo "[+] building windows"
    
    	"C:\Program Files (x86)\NSIS\makensis.exe" windows/$(APPNAME)-installer.nsi
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    sign_win:
    	echo "[+] signing windows build"
    
    	python windowns/sign.py $(WIN_CERT_PATH) $(WIN_CERT_PASS)
    
    # TODO move to main build makefile
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    build_cross_win: staging/nssm.exe
    	echo "!define VERSION $(VERSION)" > $(STAGING)/version.nsh
    	$(CROSS_FLAGS) $(MAKE) helper_win
    	mkdir -p dist
    	make -C win VERSION=$(VERSION)
    
    	makensis win/$(APPNAME)-installer.nsi
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    # -----------------------------------------------------------------------------
    # OSX
    # -----------------------------------------------------------------------------
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    pkg_osx:
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	echo "[+] Building osx package..."
    	osx/quickpkg --output dist/$(APPNAME)-$(VERSION)_unsigned.pkg --scripts osx/scripts/ dist/$(APPNAME).app/
    	@if [ $(BUILD_RELEASE) = no ]; then\
    		echo "[!] BUILD_RELEASE=no, skipping signature";\
    	else\
    		echo "[+] Signing the bundle";\
    		productsign --sign $(OSX_CERT) dist/$(APPNAME)-$(VERSION)_unsigned.pkg dist/$(APPNAME)-$(VERSION).pkg;\
    	fi
    
    # -----------------------------------------------------------------------------
    # Linux 
    # -----------------------------------------------------------------------------
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    pkg_snap:
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	@echo "[+] building snap..."
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	snapcraft build
    	snapcraft snap
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	-@mkdir -p dist
    	@mv $(BINNAME)* dist/
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    pkg_deb:
    	echo "[+] building debian package version" ${DEB_VERSION}
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	@if [ $(BUILD_RELEASE) = no ]; then\
    		dch -v $(VERSION) -M "debian package generated from the git repository" && echo "[!] BUILD_RELEASE=no, incrementing changelog";\
    	else\
    		echo "[!] BUILD_RELEASE";\
    	fi
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	mkdir -p build ../dist
    	# bitmask-vpn tar.gz should be placed in parent forlder after doing 'make prepare' with the
    	# bitmask-vpn topmost Makefile.
    	cp ../bitmask-vpn_$(VERSION).tgz build/$(BINNAME)_${DEB_VERSION}.orig.tar.gz
    	cd build && tar xzf $(BINNAME)_${DEB_VERSION}.orig.tar.gz && mv bitmask-vpn_${VERSION}-src ${BINNAME}_${DEB_VERSION}
    	cp -r debian/ build/$(BINNAME)_$(DEB_VERSION)/
    	cd build/$(BINNAME)_$(DEB_VERSION) && debuild -us -uc
    	cp build/*.deb ../dist/
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    # -----------------------------------------------------------------------------
    # Utils
    # -----------------------------------------------------------------------------
    
    clean:
    	rm -rf dist/ build/
    
    staging\nssm.exe:
    	xcopy /y "C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe" $(STAGING)
    staging/nssm.exe:
    	wget https://nssm.cc/release/nssm-2.24.zip -O $(STAGING)/nssm.zip
    	unzip $(STAGING)/nssm.zip -d $(STAGING)
    	mv $(STAGING)/nssm-*/win32/nssm.exe $(STAGING)
    	rm -rf $(STAGING)/nssm-* $(STAGING)/nssm.zip