#!/bin/bash printv() { if [ -t 1 ]; then NCOLORS=$(tput colors) if test -n "$NCOLORS" && test "$NCOLORS" -ge 8; then NORMAL="$(tput sgr0)" RED="$(tput setaf 1)" GREEN="$(tput setaf 2)" YELLOW="$(tput setaf 3)" fi fi if [[ $2 = 'G' ]]; then # shellcheck disable=SC2086 echo $1 -e "${GREEN}$3${NORMAL}" elif [[ $2 = 'Y' ]]; then # shellcheck disable=SC2086 echo $1 -e "${YELLOW}$3${NORMAL}" elif [[ $2 = 'N' ]]; then # shellcheck disable=SC2086 echo $1 -e "$3" else # shellcheck disable=SC2086 echo $1 -e "${RED}$3${NORMAL}" fi } print() { printv '' "$1" "$2" } printn() { printv "-n" "$1" "$2" } error() { printv '' R "$1" } XCODEBUILD="/usr/bin/xcodebuild" WORKINGDIR=`pwd` PATCH="/usr/bin/patch" export PATH=$GOPATH:$PATH prepare_to_build_vpn() { cat $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/Project.xcconfig > $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig cat << EOF >> $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig PROJECT_TEMP_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/OpenVPNAdapter.build CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos EOF } compile_openvpn_adapter() { cd 3rd/OpenVPNAdapter $XCODEBUILD -scheme OpenVPNAdapter -configuration Release -xcconfig Configuration/amnezia.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project OpenVPNAdapter.xcodeproj cd ../../ } prepare_to_build_ss() { cat $WORKINGDIR/scripts/ss_ios.xcconfig > $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig cat << EOF >> $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig PROJECT_TEMP_DIR = $WORKINGDIR/3rd/ShadowSocks/build/ShadowSocks.build CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos EOF } patch_ss() { cd 3rd/ShadowSocks # $PATCH -p1 -N --dry-run --silent < ../../scripts/ss_patch.diff 2>/dev/null #If the patch has not been applied then the $? which is the exit status #for last command would have a success status code = 0 # if [ $? -eq 0 ]; # then # #apply the patch # $PATCH -p1 < ../../scripts/ss_patch.diff # fi } compile_ss_frameworks() { $XCODEBUILD -scheme ShadowSocks -configuration Release -xcconfig ss_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project ShadowSocks.xcodeproj cd ../../ } #prepare_to_build_pp() { # cat $WORKINGDIR/scripts/pp_ios.xcconfig > $WORKINGDIR/3rd/PacketProcessor/pp_ios.xcconfig # cat << EOF >> $WORKINGDIR/3rd/PacketProcessor/pp_ios.xcconfig #PROJECT_TEMP_DIR = $WORKINGDIR/3rd/PacketProcessor/build/OpenVPNAdapter.build #CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/PacketProcessor/build/Release-iphoneos #BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/PacketProcessor/build/Release-iphoneos #EOF #} # #compile_packet_processor() { # cd 3rd/PacketProcessor # $XCODEBUILD -scheme PacketProcessor -configuration Release -xcconfig pp_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project PacketProcessor.xcodeproj # cd ../../ #} prepare_to_build_cas() { cat $WORKINGDIR/scripts/cas_ios.xcconfig > $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig cat << EOF >> $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/CocoaAsyncSocket.build CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos EOF } compile_cocoa_async_socket() { cd 3rd/CocoaAsyncSocket $XCODEBUILD -scheme 'iOS Framework' -configuration Release -xcconfig cas_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project CocoaAsyncSocket.xcodeproj cd ../../ } compile_tun2socks() { cd 3rd/outline-go-tun2socks GOOS=ios GOARCH=arm64 GOFLAGS="-tags=ios" CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_CXXFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_LDFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_ENABLED=1 DARWIN_SDK=iphoneos gomobile bind -a -ldflags="-w -s" -bundleid org.amnezia.tun2socks -target=ios/arm64 -tags ios -o ./build/ios/Tun2Socks.xcframework github.com/Jigsaw-Code/outline-go-tun2socks/outline/apple github.com/Jigsaw-Code/outline-go-tun2socks/outline/shadowsocks cd ../../ } prepare_to_build_cl() { cat $WORKINGDIR/scripts/cl_ios.xcconfig > $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig cat << EOF >> $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/CocoaLumberjack.build CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos EOF } compile_cocoalamberjack() { cd 3rd/CocoaLumberjack $XCODEBUILD -scheme 'CocoaLumberjack' -configuration Release -xcconfig cl_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project Lumberjack.xcodeproj cd ../../ } die() { if [[ "$1" ]]; then error "$1" else error Failed fi exit 1 }