summaryrefslogtreecommitdiff
path: root/Makefile
blob: 929af785cc9cb392c5e2f300b7e018fa44fbbca7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
CC = gcc

CFLAGS = -fvisibility=hidden -fPIC -DPIC -Wall -Wno-sign-compare -Werror -fno-strict-overflow
LDFLAGS = -fPIC
TARGET = RELEASE

ifeq ($(TARGET),DEBUG)
	CFLAGS += -g -O0
	TARGETNAME = debug
else ifeq ($(TARGET),RELEASE)
	CFLAGS += -g -O3
	TARGETNAME = release
else
	TARGETNAME = $(error Invalid TARGET. Use DEBUG or RELEASE)
endif

HEADERNAME = net_slirp.h
LIBNAME = libslirp.so
PCNAME = slirp.pc

BIN = $(addprefix $(TARGETNAME)/, libslirp.so)

INCLUDEDIR = /usr/include/libslirp
LIBDIR = /usr/lib64
PKGCONFIGDIR = /usr/lib64/pkgconfig

SRCS =\
	bootp.c\
	cksum.c\
	debug.c\
	if.c\
	ip_icmp.c\
	ip_input.c\
	ip_output.c\
	mbuf.c\
	misc.c\
	sbuf.c\
	net_slirp.c\
	tcp_input.c\
	tcp_output.c\
	tcp_subr.c\
	tcp_timer.c\
	udp.c\
    socket.c\
    $(NULL)

TMP = $(SRCS:.c=.o)
OBJ = $(addprefix $(TARGETNAME)/, $(TMP))

STATIC_LIBS = 
DYNAMIC_LIBS =

LIBS = -Wl,-Bstatic $(addprefix -l, $(STATIC_LIBS)) -Wl,-Bdynamic $(addprefix -l, $(DYNAMIC_LIBS))

all : $(BIN) link

$(BIN) : $(TARGETNAME) $(OBJ)
	$(CC) -shared $(LDFLAGS) -o $(BIN) $(OBJ) $(LIBS)

link : $(BIN)
	rm -f $(LIBNAME)
	ln -s $(BIN)

MAKEDEPEND = $(CC) -M $(CFLAGS) -o $(addprefix $(TARGETNAME)/,.$*.dep.tmp) $<

$(addprefix $(TARGETNAME)/, %.o) : %.c Makefile
	@$(MAKEDEPEND) && \
	cp $(addprefix $(TARGETNAME)/, .$*.dep.tmp) $(addprefix $(TARGETNAME)/, .$*.dep) && \
	sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
	    -e '/^$$/ d' -e 's/$$/ :/' < $(addprefix $(TARGETNAME)/,.$*.dep.tmp) >> $(addprefix $(TARGETNAME)/,.$*.dep) && \
	sed -i '1 s/^\(.\)/$(TARGETNAME)\/\1/' $(addprefix $(TARGETNAME)/, .$*.dep) && \
	rm -f $(addprefix $(TARGETNAME)/,.$*.dep.tmp)
	$(CC) $(CFLAGS) -c -o $@ $<

clean:
	@rm -f $(TARGETNAME)/*.o $(TARGETNAME)/.*.dep $(TARGETNAME)/.*.dep.tmp $(BIN)

$(TARGETNAME):
	@mkdir -p $(TARGETNAME)

-include $(patsubst %.c, $(TARGETNAME)/.%.dep, $(SRCS))

install:
	mkdir -p $(DESTDIR)/$(INCLUDEDIR)
	cp $(LIBNAME) $(DESTDIR)/$(LIBDIR)
	cp $(HEADERNAME) $(DESTDIR)/$(INCLUDEDIR)
	cp $(PCNAME) $(DESTDIR)/$(PKGCONFIGDIR)
uninstall:
	rm -f $(DESTDIR)/$(LIBDIR)/$(LIBNAME)
	rm -f $(DESTDIR)/$(INCLUDEDIR)/$(HEADERNAME)
	rm -f $(DESTDIR)/$(PKGCONFIGDIR)/$(PCNAME)