Makefile.in 5.25 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 dropbearkey
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
28
		svr-chansession.o svr-runopts.o svr-agentfwd.o svr-main.o svr-x11fwd.o\
		svr-tcpfwd.o
29

Matt Johnston's avatar
Matt Johnston committed
30
CLIOBJS=cli-algo.o cli-main.o cli-auth.o cli-authpasswd.o cli-kex.o \
Matt Johnston's avatar
Matt Johnston committed
31
		cli-session.o cli-service.o cli-runopts.o cli-chansession.o \
Matt Johnston's avatar
Matt Johnston committed
32
		cli-authpubkey.o cli-tcpfwd.o
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 \
36
			tcp-accept.o listener.o process-packet.o \
Matt Johnston's avatar
Matt Johnston committed
37
			common-runopts.o fake-rfc2553.o
38

39
KEYOBJS=dropbearkey.o gendss.o genrsa.o
40
41
42
43
44
45
46

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
47
		debug.h channel.h chansession.h config.h queue.h sshpty.h \
48
		termcodes.h gendss.h genrsa.h authpubkey.h runopts.h includes.h \
Matt Johnston's avatar
Matt Johnston committed
49
		loginrec.h atomicio.h x11fwd.h agentfwd.h tcpfwd.h compat.h \
Matt Johnston's avatar
Matt Johnston committed
50
		listener.h fake-rfc2553.h
51

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

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

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

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


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

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

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

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

113
all: $(TARGETS)
114

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

118
install: $(addprefix install, $(TARGETS))
119

Matt Johnston's avatar
Matt Johnston committed
120
121
122
123
124
125
# 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)
126

Matt Johnston's avatar
Matt Johnston committed
127
128
129
130
131
132
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)
133
		@echo 
Matt Johnston's avatar
Matt Johnston committed
134
135
		@echo "You must manually create links for $*"
	endif
136
137
138



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

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

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


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

Matt Johnston's avatar
Matt Johnston committed
161
dropbearmulti: $(HEADERS) $(MULTIOBJS) $(LTC) $(LTM) Makefile
Matt Johnston's avatar
Matt Johnston committed
162
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $(MULTIOBJS) $(LIBS)
163
	@echo
Matt Johnston's avatar
Matt Johnston committed
164
165
	@echo "You should now create symlinks to the programs you have included"
	@echo "ie 'ln -s dropbearmulti dropbear'"
166

Matt Johnston's avatar
Matt Johnston committed
167
$(LTC): options.h
168
169
	cd libtomcrypt && $(MAKE) clean && $(MAKE)

Matt Johnston's avatar
Matt Johnston committed
170
$(LTM): options.h
171
172
173
174
175
176
177
178
179
180
181
182
	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
183
184
185
	-rm -f dropbear dbclient dropbearkey dropbearconvert scp scp-progress
	-rm -f staticdropbear staticdropbearkey staticdropbearconvert staticscp
	-rm -f dropbearmulti staticdropbearmulti
186
187
188
	-rm -f *.o *.da *.bb *.bbg *.prof 

distclean: clean tidy
Matt Johnston's avatar
Matt Johnston committed
189
190
	-rm -f config.h
	-rm -f Makefile
191
192
193

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