|
@@ -0,0 +1,108 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+#
|
|
|
|
|
+# Compiles tun2socks for Linux.
|
|
|
|
|
+# Intended as a convenience if you don't want to deal with CMake.
|
|
|
|
|
+
|
|
|
|
|
+# Input environment vars:
|
|
|
|
|
+# SRCDIR - BadVPN source code
|
|
|
|
|
+# CC - compiler
|
|
|
|
|
+# CFLAGS - compiler compile flags
|
|
|
|
|
+# LDFLAGS - compiler link flags
|
|
|
|
|
+# ENDIAN - "little" or "big"
|
|
|
|
|
+# KERNEL - "2.6" or "2.4", default "2.6"
|
|
|
|
|
+#
|
|
|
|
|
+# Puts object files and the executable in the working directory.
|
|
|
|
|
+#
|
|
|
|
|
+
|
|
|
|
|
+if [[ -z $SRCDIR ]] || [[ ! -e $SRCDIR/CMakeLists.txt ]]; then
|
|
|
|
|
+ echo "SRCDIR is wrong"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+if ! "${CC}" --version &>/dev/null; then
|
|
|
|
|
+ echo "CC is wrong"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+if [[ $ENDIAN != "little" ]] && [[ $ENDIAN != "big" ]]; then
|
|
|
|
|
+ echo "ENDIAN is wrong"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+if [[ -z $KERNEL ]]; then
|
|
|
|
|
+ KERNEL="2.6"
|
|
|
|
|
+elif [[ $KERNEL != "2.6" ]] && [[ $KERNEL != "2.4" ]]; then
|
|
|
|
|
+ echo "KERNEL is wrong"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+CFLAGS="${CFLAGS} -std=gnu99"
|
|
|
|
|
+INCLUDES=( "-I${SRCDIR}" "-I${SRCDIR}/lwip/src/include/ipv4" "-I${SRCDIR}/lwip/src/include" "-I${SRCDIR}/lwip/custom" )
|
|
|
|
|
+DEFS=( -DBADVPN_THREADWORK_USE_PTHREAD -DBADVPN_LINUX -D_GNU_SOURCE )
|
|
|
|
|
+
|
|
|
|
|
+[[ $KERNEL = "2.4" ]] && DEFS=( "${DEFS[@]}" -DBADVPN_USE_SELFPIPE -DBADVPN_USE_POLL ) || DEFS=( "${DEFS[@]}" -DBADVPN_USE_SIGNALFD -DBADVPN_USE_EPOLL )
|
|
|
|
|
+
|
|
|
|
|
+[[ $ENDIAN = "little" ]] && DEFS=( "${DEFS[@]}" -DBADVPN_LITTLE_ENDIAN ) || DEFS=( "${DEFS[@]}" -DBADVPN_BIG_ENDIAN )
|
|
|
|
|
+
|
|
|
|
|
+SOURCES="
|
|
|
|
|
+base/BLog_syslog.c
|
|
|
|
|
+system/BReactor.c
|
|
|
|
|
+system/BSignal.c
|
|
|
|
|
+system/BConnection_unix.c
|
|
|
|
|
+system/BTime.c
|
|
|
|
|
+system/BUnixSignal.c
|
|
|
|
|
+system/BNetwork.c
|
|
|
|
|
+flow/StreamRecvInterface.c
|
|
|
|
|
+flow/PacketRecvInterface.c
|
|
|
|
|
+flow/PacketPassInterface.c
|
|
|
|
|
+flow/StreamPassInterface.c
|
|
|
|
|
+flow/SinglePacketBuffer.c
|
|
|
|
|
+flow/BufferWriter.c
|
|
|
|
|
+flow/PacketBuffer.c
|
|
|
|
|
+flow/PacketStreamSender.c
|
|
|
|
|
+flow/PacketPassConnector.c
|
|
|
|
|
+flow/PacketProtoFlow.c
|
|
|
|
|
+flow/PacketPassFairQueue.c
|
|
|
|
|
+flow/PacketProtoEncoder.c
|
|
|
|
|
+flow/PacketProtoDecoder.c
|
|
|
|
|
+socksclient/BSocksClient.c
|
|
|
|
|
+tuntap/BTap.c
|
|
|
|
|
+lwip/src/core/timers.c
|
|
|
|
|
+lwip/src/core/udp.c
|
|
|
|
|
+lwip/src/core/memp.c
|
|
|
|
|
+lwip/src/core/init.c
|
|
|
|
|
+lwip/src/core/pbuf.c
|
|
|
|
|
+lwip/src/core/tcp.c
|
|
|
|
|
+lwip/src/core/tcp_out.c
|
|
|
|
|
+lwip/src/core/netif.c
|
|
|
|
|
+lwip/src/core/def.c
|
|
|
|
|
+lwip/src/core/mem.c
|
|
|
|
|
+lwip/src/core/tcp_in.c
|
|
|
|
|
+lwip/src/core/stats.c
|
|
|
|
|
+lwip/src/core/ipv4/icmp.c
|
|
|
|
|
+lwip/src/core/ipv4/ip_addr.c
|
|
|
|
|
+lwip/src/core/ipv4/ip_frag.c
|
|
|
|
|
+lwip/src/core/ipv4/inet_chksum.c
|
|
|
|
|
+lwip/src/core/ipv4/ip.c
|
|
|
|
|
+lwip/src/core/ipv4/inet.c
|
|
|
|
|
+lwip/custom/sys.c
|
|
|
|
|
+tun2socks/tun2socks.c
|
|
|
|
|
+base/DebugObject.c
|
|
|
|
|
+base/BLog.c
|
|
|
|
|
+base/BPending.c
|
|
|
|
|
+flowextra/PacketPassInactivityMonitor.c
|
|
|
|
|
+tun2socks/SocksUdpGwClient.c
|
|
|
|
|
+udpgw_client/UdpGwClient.c
|
|
|
|
|
+"
|
|
|
|
|
+
|
|
|
|
|
+set -e
|
|
|
|
|
+set -x
|
|
|
|
|
+
|
|
|
|
|
+OBJS=()
|
|
|
|
|
+for f in $SOURCES; do
|
|
|
|
|
+ obj=$(basename "${f}").o
|
|
|
|
|
+ "${CC}" -c ${CFLAGS} "${INCLUDES[@]}" "${DEFS[@]}" "${SRCDIR}/${f}" -o "${obj}"
|
|
|
|
|
+ OBJS=( "${OBJS[@]}" "${obj}" )
|
|
|
|
|
+done
|
|
|
|
|
+
|
|
|
|
|
+"${CC}" ${LDFLAGS} "${OBJS[@]}" -o tun2socks -lrt
|