compile-udpgw.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/env bash
  2. #
  3. # Compiles udpgw 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}" )
  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/BConnection_common.c
  44. system/BDatagram_unix.c
  45. system/BTime.c
  46. system/BUnixSignal.c
  47. system/BNetwork.c
  48. flow/StreamRecvInterface.c
  49. flow/PacketRecvInterface.c
  50. flow/PacketPassInterface.c
  51. flow/StreamPassInterface.c
  52. flow/SinglePacketBuffer.c
  53. flow/BufferWriter.c
  54. flow/PacketBuffer.c
  55. flow/PacketStreamSender.c
  56. flow/PacketProtoFlow.c
  57. flow/PacketPassFairQueue.c
  58. flow/PacketProtoEncoder.c
  59. flow/PacketProtoDecoder.c
  60. base/DebugObject.c
  61. base/BLog.c
  62. base/BPending.c
  63. udpgw/udpgw.c
  64. "
  65. set -e
  66. set -x
  67. OBJS=()
  68. for f in $SOURCES; do
  69. obj=$(basename "${f}").o
  70. "${CC}" -c ${CFLAGS} "${INCLUDES[@]}" "${DEFS[@]}" "${SRCDIR}/${f}" -o "${obj}"
  71. OBJS=( "${OBJS[@]}" "${obj}" )
  72. done
  73. "${CC}" ${LDFLAGS} "${OBJS[@]}" -o udpgw -lrt