xref: /illumos-gate/usr/src/tools/quick/make-zfs (revision 8a2b682e57a046b828f37bcde1776f131ef4629f)
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      $ROOT/usr/share/man/man1m/ztest.1m )
271    (cd $SRC/man/man5 && make \
272      $ROOT/usr/share/man/man5/zpool-features.5 )
273    ;;
274  lint)
275    (cd $SRC/man/man1m && make zdb.1m.check zfs.1m.check zfs-program.1m.check \
276      zpool.1m.check ztest.1m.check)
277    (cd $SRC/man/man5 && make zpool-features.5.check)
278    ;;
279  *)
280    (cd $SRC/man/man1m && make $1)
281    (cd $SRC/man/man5 && make $)
282    ;;
283  esac
284}
285
286################################################################
287# This builds $SRC/TAGS (and cscope.files) in a helpful order.
288
289do_tags() {
290	(cd $SRC ;
291	find uts/common/sys -name '*.[ch]' -print |sort
292	find uts/common/fs/zfs -name '*.[ch]' -print |sort
293	find lib/libzpool -name '*.[ch]' -print |sort
294	find lib/libzfs -name '*.[ch]' -print |sort
295	find cmd/zpool -name '*.[ch]' -print |sort
296	find cmd/zfs -name '*.[ch]' -print |sort
297	find cmd/zdb -name '*.[ch]' -print |sort
298	find cmd/zhack -name '*.[ch]' -print |sort
299	find cmd/zinject -name '*.[ch]' -print |sort
300	find cmd/ztest -name '*.[ch]' -print |sort
301	find common/zfs -name '*.[ch]' -print |sort
302	echo cmd/mdb/common/modules/zfs/zfs.c
303	) > $SRC/cscope.files
304
305	(cd $SRC ;
306	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
307	cscope -b )
308}
309
310################################################################
311# This creates a tarfile one can use to update a test machine.
312
313do_tar() {
314	git_rev=`git rev-parse --short=8 HEAD`
315	files="
316kernel/drv/$arch64/zfs
317kernel/fs/$arch64/zfs
318kernel/kmdb/$arch64/zfs
319lib/$arch64/libzfs.so.1
320lib/$arch64/libzfs_core.so.1
321lib/libzfs.so.1
322lib/libzfs_core.so.1
323usr/bin/$arch32/ztest
324usr/bin/$arch64/ztest
325usr/lib/$arch64/libzfs_jni.so.1
326usr/lib/$arch64/libzpool.so.1
327usr/lib/devfsadm/linkmod/SUNW_zfs_link.so
328usr/lib/fs/zfs/bootinstall
329usr/lib/fs/zfs/fstyp.so.1
330usr/lib/libzfs_jni.so.1
331usr/lib/libzpool.so.1
332usr/lib/mdb/kvm/$arch64/zfs.so
333usr/lib/mdb/proc/$arch64/libzpool.so
334usr/lib/mdb/proc/libzpool.so
335sbin/zfs
336sbin/zpool
337usr/lib/sysevent/modules/zfs_mod.so
338usr/lib/zfs/availdevs
339usr/lib/zfs/pyzfs.py
340usr/lib/zfs/pyzfs.pyc
341usr/sbin/$arch32/zdb
342usr/sbin/$arch64/zdb
343usr/sbin/$arch32/zhack
344usr/sbin/$arch64/zhack
345usr/sbin/$arch32/zinject
346usr/sbin/$arch64/zinject
347usr/sbin/zstreamdump
348usr/share/man/man1m/zdb.1m
349usr/share/man/man1m/zfs.1m
350usr/share/man/man1m/zfs-program.1m
351usr/share/man/man1m/zpool.1m
352usr/share/man/man1m/ztest.1m
353usr/share/man/man5/zpool-features.5
354"
355	(cd $ROOT && tar cfj ../../zfs-${git_rev}.tar.bz2 $files)
356}
357
358################################################################
359
360if [ "$1" = "" ]; then
361  set '?' # force usage
362fi
363
364set -x
365
366for arg
367do
368  case "$arg" in
369  install)
370    build_tools
371    set -e
372    do_hdrs $arg
373    do_kern $arg
374    do_libs $arg
375    do_cmds $arg
376    do_mans $arg
377    ;;
378  lint)
379    do_kern $arg
380    do_libs $arg
381    do_cmds $arg
382    do_mans $arg
383    ;;
384  clean)
385    do_mans $arg
386    do_cmds $arg
387    do_libs $arg
388    do_kern $arg
389    ;;
390  clobber)
391    do_mans $arg
392    do_cmds $arg
393    do_libs $arg
394    do_kern $arg
395    do_hdrs $arg
396    clobber_tools
397    ;;
398  deplibs)
399    build_tools
400    set -e
401    do_hdrs install
402    do_deplibs install
403    ;;
404  tags)
405    do_tags
406    ;;
407  tar)
408    do_tar
409    ;;
410  *)
411    echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}";
412    exit 1;
413    ;;
414  esac
415done
416