xref: /illumos-gate/usr/src/tools/quick/make-zfs (revision 856f710c9dc323b39da5935194d7928ffb99b67f)
1#!/bin/ksh
2#
3# This file and its contents are supplied under the terms of the
4# Common Development and Distribution License ("CDDL"), version 1.0.
5# You may only use this file in accordance with the terms of version
6# 1.0 of the CDDL.
7#
8# A full copy of the text of the CDDL should have accompanied this
9# source.  A copy of the CDDL is also available via the Internet at
10# http://www.illumos.org/license/CDDL.
11#
12
13#
14# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
15#
16
17# Use distributed make (dmake) by default.
18make=${MAKE:-dmake}
19
20CLOSED_IS_PRESENT=no
21export CLOSED_IS_PRESENT
22
23[ -n "$SRC" ] || {
24  echo "SRC not set.  Run 'ws' or 'bldenv' first."
25  exit 1
26}
27
28cpu=`uname -p`
29case $cpu in
30i386)
31	x=intel
32	kmdb_arch="amd64"
33	mdb_arch="ia32 amd64"
34	arch32=i86
35	arch64=amd64
36	;;
37sparc)
38	x=sparc
39	kmdb_arch=v9
40	mdb_arch="v7 v9"
41	arch32=sparc
42	arch64=sparcv9
43	;;
44*)  echo "Huh?" ; exit 1;;
45esac
46
47################################################################
48
49build_tools() {
50  test -f $SRC/tools/proto/root_i386-nd/opt/onbld/bin/genoffsets ||
51    (cd $SRC/tools && $make install)
52  (cd $SRC/common/mapfiles; $make install)
53}
54
55clobber_tools() {
56  (cd $SRC/tools && $make clobber)
57  (cd $SRC/common/mapfiles; $make clobber)
58}
59
60################################################################
61
62do_hdrs() {
63
64targ=$1
65if [ "$targ" = clobber ]
66then
67  (cd $SRC/uts && $make -k clobber_h)
68  (cd $SRC/head && $make clobber)
69fi
70
71if [ "$targ" = install ]
72then
73  targ=install_h
74
75  # Just the parts of "make sgs" we need, and
76  # skip them if they appear to be done.
77  # ... stuff under $SRC
78  test -f $SRC/uts/common/sys/priv_names.h ||
79    (cd $SRC/uts && $make -k all_h)
80
81  test -f $SRC/head/rpcsvc/nispasswd.h ||
82    (cd $SRC/head && $make -k install_h)
83
84  # ... stuff under $ROOT (proto area)
85  test -d $ROOT/usr/include/sys ||
86    (cd $SRC && $make rootdirs)
87  test -f $ROOT/usr/include/sys/types.h ||
88    (cd $SRC/uts && $make -k install_h)
89  test -f $ROOT/usr/include/rpcsvc/daemon_utils.h ||
90    (cd $SRC/head && $make install_h)
91
92  # always update the sys headers to be safe
93  (cd $SRC/uts/common/sys && $make -k install_h)
94
95fi
96
97# Need some library headers too...
98for lib in \
99  libbsm \
100  libcmdutils \
101  libcryptoutil \
102  libdevid \
103  libdiskmgt \
104  libidmap \
105  libpam \
106  libsec \
107  libscf \
108  libshare \
109  libuutil \
110  libzpool \
111  libzfs_core \
112  libzfs \
113  libzfs_jni
114do
115  (cd $SRC/lib/$lib && $make $targ)
116done
117  # Should fix the Makefile here so all_h or install_h works.
118  (cd $SRC/lib/libzpool/$cpu && $make ../common/zfs.h)
119}
120
121################################################################
122
123do_kern() {
124  case $1 in
125  lint) targ=modlintlib ;;
126  *) targ=$1 ;;
127  esac
128  (cd $SRC/uts/$x/zfs && $make $targ)
129}
130
131################################################################
132#
133# Build all libraries used by the other targets in here.
134#
135# Run this once (at least) in each new workspace where you
136# will run "make-zfs install", if you want to avoid linking
137# against the libraries from your build host.
138#
139do_deplibs() {
140
141# install all the lib headers
142if [ "$1" = install ] ; then
143  (cd $SRC/lib && $make install_h)
144fi
145
146# Wow, building libc takes a while.  Really want that?
147for lib in \
148	libc \
149	libavl \
150	libnvpair \
151	libsec \
152	libcmdutils \
153	libdevinfo \
154	libuutil \
155	libbrand \
156	libzonecfg \
157	libinetutil \
158	libdladm \
159	libdlpi \
160	libdiskmgt \
161	libumem \
162	libdisasm \
163	libidmap \
164	libdevid \
165	libsaveargs
166do
167  (cd $SRC/lib/$lib && $make $1)
168done
169}
170
171################################################################
172
173do_libs() {
174
175for lib in \
176  libavl \
177  libcmdutils \
178  libuutil \
179  libzpool \
180  libzfs_core \
181  libzfs \
182  libzfs_jni \
183  pyzfs
184do
185  (cd $SRC/lib/$lib && $make $1)
186done
187(cd $SRC/lib/libshare && $make $1 PLUGINS=)
188}
189
190################################################################
191
192do_cmds() {
193
194for cmd in \
195  availdevs \
196  isaexec \
197  fstyp \
198  zdb \
199  zfs \
200  zhack \
201  zinject \
202  zpool \
203  ztest \
204  zstreamdump \
205  pyzfs
206do
207  (cd $SRC/cmd/$cmd && $make $1)
208done
209
210case $1 in
211install)
212  # mount programs need fslib.o
213  (cd $SRC/cmd/fs.d/zfs && $make $1)
214  # Build just the ZFS devfsadm module
215  (cd $SRC/cmd/devfsadm/$cpu && $make SUNW_zfs_link.so \
216    ${ROOT}/usr/lib/devfsadm/linkmod \
217    ${ROOT}/usr/lib/devfsadm/linkmod/SUNW_zfs_link.so )
218  ;;
219clean|clobber)
220  (cd $SRC/cmd/fs.d/zfs && $make clobber)
221  (cd $SRC/cmd/fs.d && $make ${1}_local)
222  (cd $SRC/cmd/devfsadm && $make $1)
223  ;;
224esac
225
226(cd $SRC/cmd/syseventd/modules/zfs_mod && $make $1)
227
228# Build the MDB modules, WITH the linktest
229(cd $SRC/cmd/mdb/tools && $make $1)
230
231# kmdb_arch is 64-bit only
232for a in $kmdb_arch
233do
234  case $1 in
235  install|lint)
236    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
237	$make kmdb_modlinktest.o )
238    ;;
239  clean|clobber)
240    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
241	$make -k $1 )
242    ;;
243  esac
244
245  (cd $SRC/cmd/mdb/$x/$a/zfs &&
246	$make $1 KMDB_LINKTEST_ENABLE= )
247
248done
249
250# mdb_arch is both 32-bit & 64-bit
251for a in $mdb_arch
252do
253  (cd $SRC/cmd/mdb/$x/$a/libzpool &&
254	$make $1 )
255
256done
257}
258
259################################################################
260
261do_mans() {
262
263  case "$1" in
264  install)
265    (cd $SRC/man/man1m && make \
266      $ROOT/usr/share/man/man1m/zdb.1m \
267      $ROOT/usr/share/man/man1m/zfs.1m \
268      $ROOT/usr/share/man/man1m/zfs-program.1m \
269      $ROOT/usr/share/man/man1m/zpool.1m )
270    (cd $SRC/man/man5 && make \
271      $ROOT/usr/share/man/man5/zpool-features.5 )
272    ;;
273  lint)
274    (cd $SRC/man/man1m && make zdb.1m.check zfs.1m.check zfs-program.1m.check \
275      zpool.1m.check)
276    (cd $SRC/man/man5 && make zpool-features.5.check)
277    ;;
278  *)
279    (cd $SRC/man/man1m && make $1)
280    (cd $SRC/man/man5 && make $)
281    ;;
282  esac
283}
284
285################################################################
286# This builds $SRC/TAGS (and cscope.files) in a helpful order.
287
288do_tags() {
289	(cd $SRC ;
290	find uts/common/sys -name '*.[ch]' -print |sort
291	find uts/common/fs/zfs -name '*.[ch]' -print |sort
292	find lib/libzpool -name '*.[ch]' -print |sort
293	find lib/libzfs -name '*.[ch]' -print |sort
294	find cmd/zpool -name '*.[ch]' -print |sort
295	find cmd/zfs -name '*.[ch]' -print |sort
296	find cmd/zdb -name '*.[ch]' -print |sort
297	find cmd/zhack -name '*.[ch]' -print |sort
298	find cmd/zinject -name '*.[ch]' -print |sort
299	find cmd/ztest -name '*.[ch]' -print |sort
300	find common/zfs -name '*.[ch]' -print |sort
301	echo cmd/mdb/common/modules/zfs/zfs.c
302	) > $SRC/cscope.files
303
304	(cd $SRC ;
305	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
306	cscope -b )
307}
308
309################################################################
310# This creates a tarfile one can use to update a test machine.
311
312do_tar() {
313	git_rev=`git rev-parse --short=8 HEAD`
314	files="
315kernel/drv/$arch64/zfs
316kernel/fs/$arch64/zfs
317kernel/kmdb/$arch64/zfs
318lib/$arch64/libzfs.so.1
319lib/$arch64/libzfs_core.so.1
320lib/libzfs.so.1
321lib/libzfs_core.so.1
322usr/bin/$arch32/ztest
323usr/bin/$arch64/ztest
324usr/lib/$arch64/libzfs_jni.so.1
325usr/lib/$arch64/libzpool.so.1
326usr/lib/devfsadm/linkmod/SUNW_zfs_link.so
327usr/lib/fs/zfs/bootinstall
328usr/lib/fs/zfs/fstyp.so.1
329usr/lib/libzfs_jni.so.1
330usr/lib/libzpool.so.1
331usr/lib/mdb/kvm/$arch64/zfs.so
332usr/lib/mdb/proc/$arch64/libzpool.so
333usr/lib/mdb/proc/libzpool.so
334sbin/zfs
335sbin/zpool
336usr/lib/sysevent/modules/zfs_mod.so
337usr/lib/zfs/availdevs
338usr/lib/zfs/pyzfs.py
339usr/lib/zfs/pyzfs.pyc
340usr/sbin/$arch32/zdb
341usr/sbin/$arch64/zdb
342usr/sbin/$arch32/zhack
343usr/sbin/$arch64/zhack
344usr/sbin/$arch32/zinject
345usr/sbin/$arch64/zinject
346usr/sbin/zstreamdump
347usr/share/man/man1m/zdb.1m
348usr/share/man/man1m/zfs.1m
349usr/share/man/man1m/zfs-program.1m
350usr/share/man/man1m/zpool.1m
351usr/share/man/man5/zpool-features.5
352"
353	(cd $ROOT && tar cfj ../../zfs-${git_rev}.tar.bz2 $files)
354}
355
356################################################################
357
358if [ "$1" = "" ]; then
359  set '?' # force usage
360fi
361
362set -x
363
364for arg
365do
366  case "$arg" in
367  install)
368    build_tools
369    set -e
370    do_hdrs $arg
371    do_kern $arg
372    do_libs $arg
373    do_cmds $arg
374    do_mans $arg
375    ;;
376  lint)
377    do_kern $arg
378    do_libs $arg
379    do_cmds $arg
380    do_mans $arg
381    ;;
382  clean)
383    do_mans $arg
384    do_cmds $arg
385    do_libs $arg
386    do_kern $arg
387    ;;
388  clobber)
389    do_mans $arg
390    do_cmds $arg
391    do_libs $arg
392    do_kern $arg
393    do_hdrs $arg
394    clobber_tools
395    ;;
396  deplibs)
397    build_tools
398    set -e
399    do_hdrs install
400    do_deplibs install
401    ;;
402  tags)
403    do_tags
404    ;;
405  tar)
406    do_tar
407    ;;
408  *)
409    echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}";
410    exit 1;
411    ;;
412  esac
413done
414