Makefile.in 6.03 KB
Newer Older
Matt Johnston's avatar
Matt Johnston committed
1
2
3
4
5
# This Makefile is for Dropbear SSH Server and Client

# invocation:
# make PROGRAMS="dropbear dbclient scp" MULTI=1 STATIC=1 SCPPROGRESS=1
#
6
7
8
9
# to make a multiple-program statically linked binary "staticdropbearmulti".
# This example will include dropbear, scp, dropbearkey, dropbearconvert, and
# dbclient functionality, and includes the progress-bar functionality in scp.
# Hopefully that seems intuitive.
Matt Johnston's avatar
Matt Johnston committed
10
11

ifndef PROGRAMS
12
	PROGRAMS=dropbear dbclient dropbearkey dropbearconvert
Matt Johnston's avatar
Matt Johnston committed
13
14
endif

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

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

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

Matt Johnston's avatar
Matt Johnston committed
29
CLIOBJS=cli-algo.o cli-main.o cli-auth.o cli-authpasswd.o cli-kex.o \
Matt Johnston's avatar
Matt Johnston committed
30
		cli-session.o cli-service.o cli-runopts.o cli-chansession.o \
Matt Johnston's avatar
Nasty.    
Matt Johnston committed
31
		cli-authpubkey.o cli-tcpfwd.o cli-channel.o
32

33
34
CLISVROBJS=common-session.o packet.o common-algo.o common-kex.o \
			common-channel.o common-chansession.o termcodes.o loginrec.o \
35
			tcp-accept.o listener.o process-packet.o \
Matt Johnston's avatar
Nasty.    
Matt Johnston committed
36
			common-runopts.o circbuffer.o
37

38
KEYOBJS=dropbearkey.o gendss.o genrsa.o
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 \
Matt Johnston's avatar
Matt Johnston committed
45
		dss.h bignum.h signkey.h rsa.h random.h service.h auth.h \
Matt Johnston's avatar
Matt Johnston committed
46
		debug.h channel.h chansession.h config.h queue.h sshpty.h \
Matt Johnston's avatar
Matt Johnston committed
47
		termcodes.h gendss.h genrsa.h runopts.h includes.h \
Matt Johnston's avatar
Matt Johnston committed
48
		loginrec.h atomicio.h x11fwd.h agentfwd.h tcpfwd.h compat.h \
Matt Johnston's avatar
Matt Johnston committed
49
		listener.h fake-rfc2553.h
50

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

Matt Johnston's avatar
Matt Johnston committed
57
58
59
VPATH=@[email protected]
srcdir=@[email protected]

60
61
62
63
64
65
prefix=@[email protected]
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
sbindir=${exec_prefix}/sbin

CC=@[email protected]
66
LD=@[email protected]
67
68
69
70
AR=@[email protected]
RANLIB=@[email protected]
STRIP=@[email protected]
INSTALL=@[email protected]
Matt Johnston's avatar
Matt Johnston committed
71
CFLAGS=-I. -I$(srcdir)/libtomcrypt @[email protected]
72
73
74
LIBS=$(LTC) $(LTM) @[email protected]
LDFLAGS=@LD[email protected]

Matt Johnston's avatar
Matt Johnston committed
75
76
77
78
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
79
80
81
space:= $(empty) $(empty)
ifneq (,$(strip $(foreach prog, $(PROGRAMS), $(findstring ZdropbearZ, Z$(prog)Z))))
	CFLAGS+= -DDROPBEAR_SERVER
Matt Johnston's avatar
Matt Johnston committed
82
endif
83
84
ifneq (,$(strip $(foreach prog, $(PROGRAMS), $(findstring ZdbclientZ, Z$(prog)Z))))
	CFLAGS+= -DDROPBEAR_CLIENT
Matt Johnston's avatar
Matt Johnston committed
85
86
87
endif


88
89
90
91
92
# 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
93
94
95
96
97
98
ifeq ($(STATIC), 1)
	LDFLAGS+=-static
	SPREFIX=static
else
	SPREFIX=
endif
99

Matt Johnston's avatar
Matt Johnston committed
100
101
102
103
104
ifeq ($(MULTI), 1)
	TARGETS=dropbearmulti
else
	TARGETS=$(PROGRAMS)
endif
105

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

Matt Johnston's avatar
Matt Johnston committed
111
112
113
#%: $(HEADERS)
#%: $(HEADERS) Makefile
# TODO
114

115
all: $(TARGETS)
116

117
118
strip: $(TARGETS)
	$(STRIP) $(addsuffix $(EXEEXT), $(addprefix $(SPREFIX), $(TARGETS)))
119

120
install: $(addprefix inst_, $(TARGETS))
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136

installdropbearmulti: insdbmulti $(addprefix insmulti, $(PROGRAMS)) 

insdbmulti: dropbearmulti
	$(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
	$(INSTALL) -m 755 $(SPREFIX)dropbearmulti$(EXEEXT) $(DESTDIR)$(bindir)
	-chown root $(DESTDIR)$(bindir)/$(SPREFIX)dropbearmulti$(EXEEXT)
	-chgrp 0 $(DESTDIR)$(bindir)/$(SPREFIX)dropbearmulti$(EXEEXT)

insmultidropbear: dropbearmulti
	-rm -f $(DESTDIR)$(sbindir)/$(SPREFIX)dropbear$(EXEEXT)
	-ln -s $(DESTDIR)$(bindir)/$(SPREFIX)dropbearmulti$(EXEEXT) $(DESTDIR)$(sbindir)/$(SPREFIX)dropbear$(EXEEXT) 

insmulti%: dropbearmulti
	-rm -f $(DESTDIR)$(bindir)/$(SPREFIX)$*$(EXEEXT) 
	-ln -s $(DESTDIR)$(bindir)/$(SPREFIX)dropbearmulti$(EXEEXT) $(DESTDIR)$(bindir)/$(SPREFIX)$*$(EXEEXT) 
137

Matt Johnston's avatar
Matt Johnston committed
138
# dropbear should go in sbin, so it needs a seperate rule
139
inst_dropbear: dropbear
Matt Johnston's avatar
Matt Johnston committed
140
141
142
143
	$(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)
144

145
inst_%: $*
Matt Johnston's avatar
Matt Johnston committed
146
147
	$(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
	$(INSTALL) -m 755 $(SPREFIX)$*$(EXEEXT) $(DESTDIR)$(bindir)
Matt Johnston's avatar
Matt Johnston committed
148
149
	-chown root $(DESTDIR)$(bindir)/$(SPREFIX)$*$(EXEEXT)
	-chgrp 0 $(DESTDIR)$(bindir)/$(SPREFIX)$*$(EXEEXT)
150
151


152
# for some reason the rule further down doesn't like $([email protected]) as a prereq.
Matt Johnston's avatar
Matt Johnston committed
153
dropbear: $(dropbearobjs)
154
155
156
dbclient: $(dbclientobjs)
dropbearkey: $(dropbearkeyobjs)
dropbearconvert: $(dropbearconvertobjs)
157

Matt Johnston's avatar
Matt Johnston committed
158
159
dropbear dbclient dropbearkey dropbearconvert: $(HEADERS)  $(LTC) $(LTM) \
													Makefile
Matt Johnston's avatar
Matt Johnston committed
160
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $([email protected]objs) $(LIBS)
161

Matt Johnston's avatar
Matt Johnston committed
162
# scp doesn't use the libs so is special.
Matt Johnston's avatar
Matt Johnston committed
163
scp: $(SCPOBJS)  $(HEADERS) Makefile
Matt Johnston's avatar
Matt Johnston committed
164
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $(SCPOBJS)
165
166


167
168
# multi-binary compilation.
MULTIOBJS=
Matt Johnston's avatar
Matt Johnston committed
169
ifeq ($(MULTI),1)
170
171
	MULTIOBJS=dbmulti.o $(sort $(foreach prog, $(PROGRAMS), $($(prog)objs)))
	CFLAGS+=$(addprefix -DDBMULTI_, $(PROGRAMS)) -DDROPBEAR_MULTI
Matt Johnston's avatar
Matt Johnston committed
172
endif
173

174
175
176
177
178
179
180
181
182
183
dropbearmulti: multilink 

multibinary: $(HEADERS) $(MULTIOBJS) $(LTC) $(LTM) Makefile
	$(LD) $(LDFLAGS) -o $(SPREFIX)dropbearmulti$(EXEEXT) $(MULTIOBJS) $(LIBS)

multilink: multibinary $(addprefix link, $(PROGRAMS))

link%:
	-rm -f $(SPREFIX)$*$(EXEEXT)
	-ln -s $(SPREFIX)dropbearmulti$(EXEEXT) $(SPREFIX)$*$(EXEEXT)
184

Matt Johnston's avatar
Matt Johnston committed
185
$(LTC): options.h
186
187
	cd libtomcrypt && $(MAKE) clean && $(MAKE)

Matt Johnston's avatar
Matt Johnston committed
188
$(LTM): options.h
189
190
191
192
193
194
195
196
197
198
199
	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

Matt Johnston's avatar
Matt Johnston committed
200
201
202
clean: ltc-clean ltm-clean thisclean

thisclean:
Matt Johnston's avatar
Matt Johnston committed
203
204
205
	-rm -f dropbear dbclient dropbearkey dropbearconvert scp scp-progress
	-rm -f staticdropbear staticdropbearkey staticdropbearconvert staticscp
	-rm -f dropbearmulti staticdropbearmulti
206
207
208
	-rm -f *.o *.da *.bb *.bbg *.prof 

distclean: clean tidy
Matt Johnston's avatar
Matt Johnston committed
209
210
	-rm -f config.h
	-rm -f Makefile
211
212
213

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