Makefile.in 5.98 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
57
58
59
60
61
62

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

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

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


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

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

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

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

112
all: $(TARGETS)
113

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

117
install: $(addprefix inst_, $(TARGETS))
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133

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) 
134

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

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


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

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

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


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

171
172
173
174
175
176
177
178
179
180
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)
181

Matt Johnston's avatar
Matt Johnston committed
182
$(LTC): options.h
183
184
	cd libtomcrypt && $(MAKE) clean && $(MAKE)

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

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

distclean: clean tidy
Matt Johnston's avatar
Matt Johnston committed
206
207
	-rm -f config.h
	-rm -f Makefile
208
209
210

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