Makefile.in 4.93 KB
Newer Older
Matt Johnston's avatar
Matt Johnston committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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
	PROGRAMS="dropbear dbclient dropbearkey dropbearmulti"
endif

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

Matt Johnston's avatar
Matt Johnston committed
19
COMMONOBJS=dbutil.o common-session.o packet.o common-algo.o buffer.o \
20
21
		common-kex.o dss.o bignum.o \
		signkey.o rsa.o random.o common-channel.o \
22
		common-chansession.o queue.o termcodes.o  \
Matt Johnston's avatar
Matt Johnston committed
23
		loginrec.o atomicio.o tcpfwd-direct.o compat.o \
Matt Johnston's avatar
Matt Johnston committed
24
		tcpfwd-remote.o listener.o process-packet.o common-runopts.o
25

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

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

Matt Johnston's avatar
Matt Johnston committed
33
DROPBEAROBJS=
34
35
36
37
38
39
40
41
42

DROPBEARKEYOBJS=dropbearkey.o gendss.o genrsa.o

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
43
		debug.h channel.h chansession.h config.h queue.h sshpty.h \
44
		termcodes.h gendss.h genrsa.h authpubkey.h runopts.h includes.h \
45
46
		loginrec.h atomicio.h x11fwd.h agentfwd.h tcpfwd-direct.h compat.h \
		tcpfwd-remote.h listener.h
47

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

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

CC=@[email protected]
LD=@[email protected]
AR=@[email protected]
RANLIB=@[email protected]
STRIP=@[email protected]
INSTALL=@[email protected]
Matt Johnston's avatar
Matt Johnston committed
65
CFLAGS=@[email protected]
66
67
68
LIBS=$(LTC) $(LTM) @[email protected]
LDFLAGS=@[email protected]

Matt Johnston's avatar
Matt Johnston committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
EXEEXT=@[email protected]

# whether we're building client, server, or both for the common objects.
space:= $(empty) $(empty)
CLISVRFLAGS=
# evilness so we detect 'dropbear' by itself as a word
ifneq (,$(findstring $(space)dropbear$(space), $(space)$(PROGRAMS)$(space)))
	CLISVRFLAGS+= -DDROPBEAR_SERVER
endif
ifneq (,$(findstring $(space)dbclient$(space), $(space)$(PROGRAMS)$(space)))
	CLISVRFLAGS+= -DDROPBEAR_CLIENT
endif

CFLAGS+=$(CLISVRFLAGS)

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


Matt Johnston's avatar
Matt Johnston committed
112
113
strip: $(TARGETS)
	$(STRIP) $(foreach prog, $(TARGETS), $(SPREFIX)$(prog)$(EXEEXT))
114
115


Matt Johnston's avatar
Matt Johnston committed
116
install: $(foreach prog, $(TARGETS), install$prog)
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
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)
		@echo "You must manually create links for $*"
	endif
133
134
135



Matt Johnston's avatar
Matt Johnston committed
136
137
# The actual binaries
dropbear: $(dropbearobjs)
138

Matt Johnston's avatar
Matt Johnston committed
139
140
141
142
dropbear dbclient dropbearkey dropbearconvert: $($([email protected])) $(HEADERS) \
														$(LTC) $(LTM)
	@echo $(CLISVRFLAGS)
	$(LD) $(LDFLAGS) -o $(SPREFIX)[email protected]$(EXEEXT) $([email protected]objs) $(LIBS)
143
144


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


Matt Johnston's avatar
Matt Johnston committed
150
151
152
153
154
MULTIOBJS=dbmulti.o
ifeq ($(MULTI),1)
	deftarget=multi
	MULTIOBJS=$(foreach prog, $(PROGRAMS), $($(prog)objs))
endif
155

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

$(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
177
178
179
	-rm -f dropbear dbclient dropbearkey dropbearconvert scp scp-progress
	-rm -f staticdropbear staticdropbearkey staticdropbearconvert staticscp
	-rm -f dropbearmulti staticdropbearmulti
180
181
182
	-rm -f *.o *.da *.bb *.bbg *.prof 

distclean: clean tidy
Matt Johnston's avatar
Matt Johnston committed
183
184
	-rm -f config.h
	-rm -f Makefile
185
186
187

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