compile-tun2sock.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/bin/bash
  2. #
  3. # Compiles tun2socks for Linux.
  4. # Intended as a convenience if you don't want to deal with CMake.
  5. # Input environment vars:
  6. # SRCDIR - BadVPN source code
  7. # CC - compiler
  8. # CFLAGS - compiler compile flags
  9. # LDFLAGS - compiler link flags
  10. # ENDIAN - "little" or "big"
  11. # KERNEL - "2.6" or "2.4", default "2.6"
  12. #
  13. # Puts object files and the executable in the working directory.
  14. #
  15. if [[ -z $SRCDIR ]] || [[ ! -e $SRCDIR/CMakeLists.txt ]]; then
  16. echo "SRCDIR is wrong"
  17. exit 1
  18. fi
  19. if ! "${CC}" --version &>/dev/null; then
  20. echo "CC is wrong"
  21. exit 1
  22. fi
  23. if [[ $ENDIAN != "little" ]] && [[ $ENDIAN != "big" ]]; then
  24. echo "ENDIAN is wrong"
  25. exit 1
  26. fi
  27. if [[ -z $KERNEL ]]; then
  28. KERNEL="2.6"
  29. elif [[ $KERNEL != "2.6" ]] && [[ $KERNEL != "2.4" ]]; then
  30. echo "KERNEL is wrong"
  31. exit 1
  32. fi
  33. CFLAGS="${CFLAGS} -std=gnu99"
  34. INCLUDES=( "-I${SRCDIR}" "-I${SRCDIR}/lwip/src/include/ipv4" "-I${SRCDIR}/lwip/src/include" "-I${SRCDIR}/lwip/custom" )
  35. DEFS=( -DBADVPN_THREAD_SAFE=0 -DBADVPN_LINUX -DBADVPN_BREACTOR_BADVPN -D_GNU_SOURCE )
  36. [[ $KERNEL = "2.4" ]] && DEFS=( "${DEFS[@]}" -DBADVPN_USE_SELFPIPE -DBADVPN_USE_POLL ) || DEFS=( "${DEFS[@]}" -DBADVPN_USE_SIGNALFD -DBADVPN_USE_EPOLL )
  37. [[ $ENDIAN = "little" ]] && DEFS=( "${DEFS[@]}" -DBADVPN_LITTLE_ENDIAN ) || DEFS=( "${DEFS[@]}" -DBADVPN_BIG_ENDIAN )
  38. SOURCES="
  39. base/BLog_syslog.c
  40. system/BReactor_badvpn.c
  41. system/BSignal.c
  42. system/BConnection_unix.c
  43. system/BTime.c
  44. system/BUnixSignal.c
  45. system/BNetwork.c
  46. flow/StreamRecvInterface.c
  47. flow/PacketRecvInterface.c
  48. flow/PacketPassInterface.c
  49. flow/StreamPassInterface.c
  50. flow/SinglePacketBuffer.c
  51. flow/BufferWriter.c
  52. flow/PacketBuffer.c
  53. flow/PacketStreamSender.c
  54. flow/PacketPassConnector.c
  55. flow/PacketProtoFlow.c
  56. flow/PacketPassFairQueue.c
  57. flow/PacketProtoEncoder.c
  58. flow/PacketProtoDecoder.c
  59. socksclient/BSocksClient.c
  60. tuntap/BTap.c
  61. lwip/src/core/timers.c
  62. lwip/src/core/udp.c
  63. lwip/src/core/memp.c
  64. lwip/src/core/init.c
  65. lwip/src/core/pbuf.c
  66. lwip/src/core/tcp.c
  67. lwip/src/core/tcp_out.c
  68. lwip/src/core/netif.c
  69. lwip/src/core/def.c
  70. lwip/src/core/mem.c
  71. lwip/src/core/tcp_in.c
  72. lwip/src/core/stats.c
  73. lwip/src/core/ipv4/icmp.c
  74. lwip/src/core/ipv4/ip_addr.c
  75. lwip/src/core/ipv4/ip_frag.c
  76. lwip/src/core/ipv4/inet_chksum.c
  77. lwip/src/core/ipv4/ip.c
  78. lwip/src/core/ipv4/inet.c
  79. lwip/custom/sys.c
  80. tun2socks/tun2socks.c
  81. base/DebugObject.c
  82. base/BLog.c
  83. base/BPending.c
  84. flowextra/PacketPassInactivityMonitor.c
  85. tun2socks/SocksUdpGwClient.c
  86. udpgw_client/UdpGwClient.c
  87. "
  88. set -e
  89. set -x
  90. OBJS=()
  91. for f in $SOURCES; do
  92. obj=$(basename "${f}").o
  93. "${CC}" -c ${CFLAGS} "${INCLUDES[@]}" "${DEFS[@]}" "${SRCDIR}/${f}" -o "${obj}"
  94. OBJS=( "${OBJS[@]}" "${obj}" )
  95. done
  96. "${CC}" ${LDFLAGS} "${OBJS[@]}" -o tun2socks -lrt