| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env 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/ipv6" "-I${SRCDIR}/lwip/src/include" "-I${SRCDIR}/lwip/custom" )
- DEFS=( -DBADVPN_THREAD_SAFE=0 -DBADVPN_LINUX -DBADVPN_BREACTOR_BADVPN -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_badvpn.c
- system/BSignal.c
- system/BConnection_unix.c
- system/BConnection_common.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/inet_chksum.c
- lwip/src/core/ipv4/icmp.c
- lwip/src/core/ipv4/ip4.c
- lwip/src/core/ipv4/ip4_addr.c
- lwip/src/core/ipv4/ip_frag.c
- lwip/src/core/ipv6/ip6.c
- lwip/src/core/ipv6/nd6.c
- lwip/src/core/ipv6/icmp6.c
- lwip/src/core/ipv6/ip6_addr.c
- lwip/src/core/ipv6/ip6_frag.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
|