Makefile.in 5.15 KB
Newer Older
Matt Johnston's avatar
Matt Johnston committed
1
2
3
4
5
6
7
8
9
10
11
12
# This Makefile is for Dropbear SSH Server and Client

# invocation:
# make PROGRAMS="dropbear dbclient scp" MULTI=1 STATIC=1 SCPPROGRESS=1
#
# to make a single multiple statically linked binary "staticdropbearmulti",
# which includes dropbear, scp and dbclient functionality, and includes the
# progress-bar functionality in scp. Hopefully that seems intuitive.

# This makefile is quite evil.

ifndef PROGRAMS
13
	PROGRAMS=dropbear dbclient dropbearkey dropbearmulti
Matt Johnston's avatar
Matt Johnston committed
14
15
endif

16
17
18
LTC=libtomcrypt/libtomcrypt.a
LTM=libtommath/libtommath.a

19
20
21
22
23
COMMONOBJS=dbutil.o buffer.o \
		dss.o bignum.o \
		signkey.o rsa.o random.o \
		queue.o \
		atomicio.o compat.o 
24

Matt Johnston's avatar
Matt Johnston committed
25
SVROBJS=svr-kex.o svr-algo.o svr-auth.o sshpty.o \
26
		svr-authpasswd.o svr-authpubkey.o svr-session.o svr-service.o \
Matt Johnston's avatar
Matt Johnston committed
27
		svr-chansession.o svr-runopts.o svr-agentfwd.o svr-main.o svr-x11fwd.o
28

Matt Johnston's avatar
Matt Johnston committed
29
30
CLIOBJS=cli-algo.o cli-main.o cli-auth.o cli-authpasswd.o cli-kex.o \
		cli-session.o cli-service.o
31

32
33
34
35
CLISVROBJS=common-session.o packet.o common-algo.o common-kex.o \
			common-channel.o common-chansession.o termcodes.o loginrec.o \
			tcpfwd-direct.o tcpfwd-remote.o listener.o process-packet.o \
			common-runopts.o
36

37
KEYOBJS=dropbearkey.o gendss.o genrsa.o
38
39
40
41
42
43
44

CONVERTOBJS=dropbearconvert.o keyimport.o

SCPOBJS=scp.o progressmeter.o atomicio.o scpmisc.o

HEADERS=options.h dbutil.h session.h packet.h algo.h ssh.h buffer.h kex.h \
		dss.h bignum.h signkey.h rsa.h random.h service.h auth.h authpasswd.h \
Matt Johnston's avatar
Matt Johnston committed
45
		debug.h channel.h chansession.h config.h queue.h sshpty.h \
46
		termcodes.h gendss.h genrsa.h authpubkey.h runopts.h includes.h \
47
48
		loginrec.h atomicio.h x11fwd.h agentfwd.h tcpfwd-direct.h compat.h \
		tcpfwd-remote.h listener.h
49

50
51
dropbearobjs=$(COMMONOBJS) $(CLISVROBJS) $(SVROBJS) 
dbclientobjs=$(COMMONOBJS) $(CLISVROBJS) $(CLIOBJS)
Matt Johnston's avatar
Matt Johnston committed
52
53
54
dropbearkeyobjs=$(COMMONOBJS) $(KEYOBJS)
dropbearconvertobjs=$(COMMONOBJS) $(CONVERTOBJS)
scpobjs=$(SCPOBJS)
55
56
57
58
59
60
61

prefix=@[email protected]
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
sbindir=${exec_prefix}/sbin

CC=@[email protected]
62
LD=@[email protected]
63
64
65
66
AR=@[email protected]
RANLIB=@[email protected]
STRIP=@[email protected]
INSTALL=@[email protected]
67
CFLAGS=-Ilibtomcrypt @[email protected]
68
69
70
LIBS=$(LTC) $(LTM) @[email protected]
LDFLAGS=@[email protected]

Matt Johnston's avatar
Matt Johnston committed
71
72
73
74
EXEEXT=@[email protected]

# whether we're building client, server, or both for the common objects.
# evilness so we detect 'dropbear' by itself as a word
75
76
77
space:= $(empty) $(empty)
ifneq (,$(strip $(foreach prog, $(PROGRAMS), $(findstring ZdropbearZ, Z$(prog)Z))))
	CFLAGS+= -DDROPBEAR_SERVER
Matt Johnston's avatar
Matt Johnston committed
78
endif
79
80
ifneq (,$(strip $(foreach prog, $(PROGRAMS), $(findstring ZdbclientZ, Z$(prog)Z))))
	CFLAGS+= -DDROPBEAR_CLIENT
Matt Johnston's avatar
Matt Johnston committed
81
82
83
endif


84
85
86
87
88
# these are exported so that libtomcrypt's makefile will use them
export CC
export CFLAGS
export RANLIB AR STRIP

Matt Johnston's avatar
Matt Johnston committed
89
90
91
92
93
94
ifeq ($(STATIC), 1)
	LDFLAGS+=-static
	SPREFIX=static
else
	SPREFIX=
endif
95

Matt Johnston's avatar
Matt Johnston committed
96
97
98
99
100
ifeq ($(MULTI), 1)
	TARGETS=dropbearmulti
else
	TARGETS=$(PROGRAMS)
endif
101

Matt Johnston's avatar
Matt Johnston committed
102
103
104
105
# for the scp progress meter. The -D doesn't affect anything else.
ifeq ($(SCPPROGRESS), 1)
	CFLAGS+=-DPROGRESS_METER
endif
106

Matt Johnston's avatar
Matt Johnston committed
107
108
109
#%: $(HEADERS)
#%: $(HEADERS) Makefile
# TODO
110

111
all: $(TARGETS)
112

113
114
strip: $(TARGETS)
	$(STRIP) $(addsuffix $(EXEEXT), $(addprefix $(SPREFIX), $(TARGETS)))
115

116
install: $(addprefix install, $(TARGETS))
117

Matt Johnston's avatar
Matt Johnston committed
118
119
120
121
122
123
# dropbear should go in sbin, so it needs a seperate rule
installdropbear: dropbear
	$(INSTALL) -d -m 755 $(DESTDIR)$(sbindir)
	$(INSTALL) -m 755 $(SPREFIX)dropbear$(EXEEXT) $(DESTDIR)$(sbindir)
	-chown root $(DESTDIR)$(sbindir)/$(SPREFIX)dropbear$(EXEEXT)
	-chgrp 0 $(DESTDIR)$(sbindir)/$(SPREFIX)dropbear$(EXEEXT)
124

Matt Johnston's avatar
Matt Johnston committed
125
126
127
128
129
130
install%: $*
	$(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
	$(INSTALL) -m 755 $(SPREFIX)$*$(EXEEXT) $(DESTDIR)$(bindir)
	-chown root $(DESTDIR)$(sbindir)/$(SPREFIX)$*$(EXEEXT)
	-chgrp 0 $(DESTDIR)$(sbindir)/$(SPREFIX)$*$(EXEEXT)
	ifeq ($(MULTI), 1)
131
		@echo 
Matt Johnston's avatar
Matt Johnston committed
132
133
		@echo "You must manually create links for $*"
	endif
134
135
136



137
# for some reason the rule further down doesn't like $([email protected]) as a prereq.
Matt Johnston's avatar
Matt Johnston committed
138
dropbear: $(dropbearobjs)
139
140
141
dbclient: $(dbclientobjs)
dropbearkey: $(dropbearkeyobjs)
dropbearconvert: $(dropbearconvertobjs)
142

143
dropbear dbclient dropbearkey dropbearconvert: $(HEADERS)  $(LTC) $(LTM)
Matt Johnston's avatar
Matt Johnston committed
144
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $([email protected]objs) $(LIBS)
145

Matt Johnston's avatar
Matt Johnston committed
146
147
148
# scp doesn't use the libs so is special.
scp: $(SCPOBJS)  $(HEADERS)
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $(SCPOBJS)
149
150


151
152
# multi-binary compilation.
MULTIOBJS=
Matt Johnston's avatar
Matt Johnston committed
153
ifeq ($(MULTI),1)
154
155
	MULTIOBJS=dbmulti.o $(sort $(foreach prog, $(PROGRAMS), $($(prog)objs)))
	CFLAGS+=$(addprefix -DDBMULTI_, $(PROGRAMS)) -DDROPBEAR_MULTI
Matt Johnston's avatar
Matt Johnston committed
156
endif
157

Matt Johnston's avatar
Matt Johnston committed
158
159
dropbearmulti: $(HEADERS) $(MULTIOBJS) $(LTC) $(LTM)
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $(MULTIOBJS) $(LIBS)
160
	@echo
Matt Johnston's avatar
Matt Johnston committed
161
162
	@echo "You should now create symlinks to the programs you have included"
	@echo "ie 'ln -s dropbearmulti dropbear'"
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179

$(LTC): $(HEADERS)
	cd libtomcrypt && $(MAKE) clean && $(MAKE)

$(LTM): $(HEADERS)
	cd libtommath && $(MAKE)

ltc-clean:
	cd libtomcrypt && $(MAKE) clean

ltm-clean:
	cd libtommath && $(MAKE) clean

sizes: dropbear
	objdump -t dropbear|grep ".text"|cut -d "." -f 2|sort -rn

clean: ltc-clean ltm-clean
Matt Johnston's avatar
Matt Johnston committed
180
181
182
	-rm -f dropbear dbclient dropbearkey dropbearconvert scp scp-progress
	-rm -f staticdropbear staticdropbearkey staticdropbearconvert staticscp
	-rm -f dropbearmulti staticdropbearmulti
183
184
185
	-rm -f *.o *.da *.bb *.bbg *.prof 

distclean: clean tidy
Matt Johnston's avatar
Matt Johnston committed
186
187
	-rm -f config.h
	-rm -f Makefile
188
189
190

tidy:
	-rm -f *~ *.gcov */*~