udphole

Basic UDP wormhole proxy
git clone git://git.finwo.net/app/udphole
Log | Files | Refs | README | LICENSE

Makefile (3194B)


      1 LIBS:=
      2 SRC:=
      3 
      4 BIN?=udphole
      5 VERSION?=1.3.13
      6 
      7 CC:=gcc
      8 CPP:=g++
      9 
     10 FIND=$(shell which gfind find | head -1)
     11 SRC+=$(shell $(FIND) src/ -type f -name '*.c')
     12 # Exclude standalone test programs from main binary
     13 SRC:=$(filter-out $(wildcard src/test/test_*.c),$(SRC))
     14 
     15 INCLUDES:=
     16 
     17 CFLAGS?=-Wall -O2
     18 CFLAGS+=-I src -D INI_HANDLER_LINENO=1 -D'UDPHOLE_VERSION_STR="$(VERSION)"'
     19 LDFLAGS?=
     20 
     21 LDFLAGS+=-lresolv
     22 
     23 CPPFLAGS?=
     24 
     25 ifeq ($(OS),Windows_NT)
     26     # CFLAGS += -D WIN32
     27     CPPFLAGS+=-lstdc++
     28     CPPFLAGS+=
     29     ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
     30         # CFLAGS += -D AMD64
     31     else
     32         ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
     33             # CFLAGS += -D AMD64
     34         endif
     35         ifeq ($(PROCESSOR_ARCHITECTURE),x86)
     36             # CFLAGS += -D IA32
     37         endif
     38     endif
     39 else
     40     UNAME_S := $(shell uname -s)
     41     ifeq ($(UNAME_S),Linux)
     42         # CFLAGS += -D LINUX
     43         CPPFLAGS+=-lstdc++
     44         # CFLAGS+=$(shell pkg-config --cflags glib-2.0)
     45         # LDFLAGS+=$(shell pkg-config --libs glib-2.0)
     46         CFLAGS+=-D _GNU_SOURCE
     47     endif
     48     ifeq ($(UNAME_S),Darwin)
     49         # CFLAGS += -D OSX
     50         CPPFLAGS+=-std=c++14
     51         CFLAGS+=-D _BSD_SOURCE
     52     endif
     53     UNAME_P := $(shell uname -p)
     54     ifeq ($(UNAME_P),x86_64)
     55         # CFLAGS += -D AMD64
     56     endif
     57     ifneq ($(filter %86,$(UNAME_P)),)
     58         # CFLAGS += -D IA32
     59     endif
     60     ifneq ($(filter arm%,$(UNAME_P)),)
     61         # CFLAGS += -D ARM
     62     endif
     63     # TODO: flags for riscv
     64 endif
     65 
     66 include lib/.dep/config.mk
     67 
     68 OBJ:=$(SRC:.c=.o)
     69 OBJ:=$(OBJ:.cc=.o)
     70 
     71 CFLAGS+=$(INCLUDES)
     72 CPPFLAGS+=$(INCLUDES)
     73 CPPFLAGS+=$(CFLAGS)
     74 
     75 .PHONY: default
     76 default: $(BIN)
     77 
     78 # Stddoc: extract /// documentation from source to markdown for manpage
     79 STDDOC ?= stddoc
     80 doc/cli_doc.md: $(SRC)
     81 	@mkdir -p doc
     82 	cat $(SRC) | $(STDDOC) > doc/cli_doc.md
     83 
     84 # Manpage: template + stddoc fragment (markdown -> man) + envsubst for VERSION
     85 doc/cli_doc.man: doc/cli_doc.md
     86 	pandoc doc/cli_doc.md -f markdown -t man -o doc/cli_doc.man
     87 
     88 doc/license.man: LICENSE.md
     89 	@mkdir -p doc
     90 	pandoc LICENSE.md -f markdown -t man --standalone=false -o doc/license.man
     91 
     92 $(BIN).1: doc/udphole.1.in doc/cli_doc.man doc/license.man
     93 	VERSION=$(VERSION) envsubst '$$VERSION' < doc/udphole.1.in | sed '/__COMMANDS_MAN__/r doc/cli_doc.man' | sed '/__COMMANDS_MAN__/d' | sed '/__LICENSE_MAN__/r doc/license.man' | sed '/__LICENSE_MAN__/d' > $(BIN).1
     94 
     95 # .cc.o:
     96 # 	$(CPP) $< $(CPPFLAGS) -c -o $@
     97 
     98 .c.o:
     99 	${CC} $< ${CFLAGS} -c -o $@
    100 
    101 $(BIN): $(OBJ)
    102 	${CC} ${OBJ} ${CFLAGS} ${LDFLAGS} -o $@
    103 
    104 .PHONY: test
    105 test: $(BIN)
    106 	@gcc -Wall -O2 -I src -D INI_HANDLER_LINENO=1 test/test_scheduler.c src/common/scheduler.c -o test-scheduler
    107 	@./test-scheduler
    108 	@rm -f test-scheduler
    109 	@sleep 1
    110 	@node test/system-commands.js
    111 	@sleep 1
    112 	@node test/basic-forwarding-tcp.js
    113 	@sleep 1
    114 	@node test/basic-forwarding-unix.js
    115 	@sleep 1
    116 	@node test/listen-relearn-tcp.js
    117 	@sleep 1
    118 	@node test/listen-relearn-unix.js
    119 	@sleep 1
    120 	@node test/connect-drop-unknown.js
    121 	@sleep 1
    122 	@node test/cluster.js
    123 
    124 .PHONY: clean
    125 clean:
    126 	rm -rf $(BIN) $(BIN).1
    127 	rm -rf $(OBJ)
    128 	rm -rf doc/cli_doc.md doc/cli_doc.man doc/license.man
    129 
    130 .PHONY: format
    131 format:
    132 	$(FIND) src/ -type f \( -name '*.c' -o -name '*.h' \) -exec clang-format -i {} +