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 {} +