Makefile.in 5.21 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
		svr-chansession.o svr-runopts.o svr-agentfwd.o svr-main.o svr-x11fwd.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
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

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

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


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

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

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

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

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

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