xref: /illumos-gate/usr/src/tools/quick/make-zfs (revision 38aced4fb3d60e34a44207b22d0b0dd4909bf4d1)
110b444a8SGordon Ross#!/bin/ksh
210b444a8SGordon Ross#
310b444a8SGordon Ross# This file and its contents are supplied under the terms of the
410b444a8SGordon Ross# Common Development and Distribution License ("CDDL"), version 1.0.
510b444a8SGordon Ross# You may only use this file in accordance with the terms of version
610b444a8SGordon Ross# 1.0 of the CDDL.
710b444a8SGordon Ross#
810b444a8SGordon Ross# A full copy of the text of the CDDL should have accompanied this
910b444a8SGordon Ross# source.  A copy of the CDDL is also available via the Internet at
1010b444a8SGordon Ross# http://www.illumos.org/license/CDDL.
1110b444a8SGordon Ross#
1210b444a8SGordon Ross
1310b444a8SGordon Ross#
14b9538c21SGordon Ross# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
1510b444a8SGordon Ross#
1610b444a8SGordon Ross
1710b444a8SGordon Ross# Use distributed make (dmake) by default.
1810b444a8SGordon Rossmake=${MAKE:-dmake}
1910b444a8SGordon Ross
2010b444a8SGordon RossCLOSED_IS_PRESENT=no
2110b444a8SGordon Rossexport CLOSED_IS_PRESENT
2210b444a8SGordon Ross
2310b444a8SGordon Ross[ -n "$SRC" ] || {
2410b444a8SGordon Ross  echo "SRC not set.  Run 'ws' or 'bldenv' first."
2510b444a8SGordon Ross  exit 1
2610b444a8SGordon Ross}
2710b444a8SGordon Ross
2810b444a8SGordon Rosscpu=`uname -p`
2910b444a8SGordon Rosscase $cpu in
3010b444a8SGordon Rossi386)
3110b444a8SGordon Ross	x=intel
32b9538c21SGordon Ross	kmdb_arch="amd64"
3310b444a8SGordon Ross	mdb_arch="ia32 amd64"
3410b444a8SGordon Ross	arch32=i86
3510b444a8SGordon Ross	arch64=amd64
3610b444a8SGordon Ross	;;
3710b444a8SGordon Rosssparc)
3810b444a8SGordon Ross	x=sparc
39b9538c21SGordon Ross	kmdb_arch=v9
40b9538c21SGordon Ross	mdb_arch="v7 v9"
4110b444a8SGordon Ross	arch32=sparc
4210b444a8SGordon Ross	arch64=sparcv9
4310b444a8SGordon Ross	;;
4410b444a8SGordon Ross*)  echo "Huh?" ; exit 1;;
4510b444a8SGordon Rossesac
4610b444a8SGordon Ross
4710b444a8SGordon Ross################################################################
4810b444a8SGordon Ross
4910b444a8SGordon Rossbuild_tools() {
5010b444a8SGordon Ross  test -f $SRC/tools/proto/root_i386-nd/opt/onbld/bin/genoffsets ||
5110b444a8SGordon Ross    (cd $SRC/tools && $make install)
5210b444a8SGordon Ross  (cd $SRC/common/mapfiles; $make install)
5310b444a8SGordon Ross}
5410b444a8SGordon Ross
5510b444a8SGordon Rossclobber_tools() {
5610b444a8SGordon Ross  (cd $SRC/tools && $make clobber)
5710b444a8SGordon Ross  (cd $SRC/common/mapfiles; $make clobber)
5810b444a8SGordon Ross}
5910b444a8SGordon Ross
6010b444a8SGordon Ross################################################################
6110b444a8SGordon Ross
6210b444a8SGordon Rossdo_hdrs() {
6310b444a8SGordon Ross
6410b444a8SGordon Rosstarg=$1
6510b444a8SGordon Rossif [ "$targ" = clobber ]
6610b444a8SGordon Rossthen
6710b444a8SGordon Ross  (cd $SRC/uts && $make -k clobber_h)
6810b444a8SGordon Ross  (cd $SRC/head && $make clobber)
6910b444a8SGordon Rossfi
7010b444a8SGordon Ross
7110b444a8SGordon Rossif [ "$targ" = install ]
7210b444a8SGordon Rossthen
7310b444a8SGordon Ross  targ=install_h
7410b444a8SGordon Ross
7510b444a8SGordon Ross  # Just the parts of "make sgs" we need, and
7610b444a8SGordon Ross  # skip them if they appear to be done.
7710b444a8SGordon Ross  # ... stuff under $SRC
7810b444a8SGordon Ross  test -f $SRC/uts/common/sys/priv_names.h ||
7910b444a8SGordon Ross    (cd $SRC/uts && $make -k all_h)
8010b444a8SGordon Ross
8110b444a8SGordon Ross  test -f $SRC/head/rpcsvc/nispasswd.h ||
8210b444a8SGordon Ross    (cd $SRC/head && $make -k install_h)
8310b444a8SGordon Ross
8410b444a8SGordon Ross  # ... stuff under $ROOT (proto area)
8510b444a8SGordon Ross  test -d $ROOT/usr/include/sys ||
8610b444a8SGordon Ross    (cd $SRC && $make rootdirs)
8710b444a8SGordon Ross  test -f $ROOT/usr/include/sys/types.h ||
8810b444a8SGordon Ross    (cd $SRC/uts && $make -k install_h)
8910b444a8SGordon Ross  test -f $ROOT/usr/include/rpcsvc/daemon_utils.h ||
9010b444a8SGordon Ross    (cd $SRC/head && $make install_h)
9110b444a8SGordon Ross
9210b444a8SGordon Ross  # always update the sys headers to be safe
9310b444a8SGordon Ross  (cd $SRC/uts/common/sys && $make -k install_h)
9410b444a8SGordon Ross
9510b444a8SGordon Rossfi
9610b444a8SGordon Ross
9710b444a8SGordon Ross# Need some library headers too...
9810b444a8SGordon Rossfor lib in \
9910b444a8SGordon Ross  libbsm \
10010b444a8SGordon Ross  libcmdutils \
10110b444a8SGordon Ross  libcryptoutil \
10210b444a8SGordon Ross  libdevid \
10310b444a8SGordon Ross  libdiskmgt \
10410b444a8SGordon Ross  libidmap \
10510b444a8SGordon Ross  libpam \
10610b444a8SGordon Ross  libsec \
10710b444a8SGordon Ross  libscf \
10810b444a8SGordon Ross  libshare \
10910b444a8SGordon Ross  libuutil \
11010b444a8SGordon Ross  libzpool \
11110b444a8SGordon Ross  libzfs_core \
11210b444a8SGordon Ross  libzfs \
11310b444a8SGordon Ross  libzfs_jni
11410b444a8SGordon Rossdo
11510b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $targ)
11610b444a8SGordon Rossdone
11710b444a8SGordon Ross  # Should fix the Makefile here so all_h or install_h works.
11810b444a8SGordon Ross  (cd $SRC/lib/libzpool/$cpu && $make ../common/zfs.h)
11910b444a8SGordon Ross}
12010b444a8SGordon Ross
12110b444a8SGordon Ross################################################################
12210b444a8SGordon Ross
12310b444a8SGordon Rossdo_kern() {
12410b444a8SGordon Ross  case $1 in
12510b444a8SGordon Ross  lint) targ=modlintlib ;;
12610b444a8SGordon Ross  *) targ=$1 ;;
12710b444a8SGordon Ross  esac
12810b444a8SGordon Ross  (cd $SRC/uts/$x/zfs && $make $targ)
12910b444a8SGordon Ross}
13010b444a8SGordon Ross
13110b444a8SGordon Ross################################################################
13210b444a8SGordon Ross#
13310b444a8SGordon Ross# Build all libraries used by the other targets in here.
13410b444a8SGordon Ross#
13510b444a8SGordon Ross# Run this once (at least) in each new workspace where you
13610b444a8SGordon Ross# will run "make-zfs install", if you want to avoid linking
13710b444a8SGordon Ross# against the libraries from your build host.
13810b444a8SGordon Ross#
13910b444a8SGordon Rossdo_deplibs() {
14010b444a8SGordon Ross
14110b444a8SGordon Ross# install all the lib headers
14210b444a8SGordon Rossif [ "$1" = install ] ; then
14310b444a8SGordon Ross  (cd $SRC/lib && $make install_h)
14410b444a8SGordon Rossfi
14510b444a8SGordon Ross
14610b444a8SGordon Ross# Wow, building libc takes a while.  Really want that?
14710b444a8SGordon Rossfor lib in \
14810b444a8SGordon Ross	libc \
14910b444a8SGordon Ross	libavl \
15010b444a8SGordon Ross	libnvpair \
15110b444a8SGordon Ross	libsec \
15210b444a8SGordon Ross	libcmdutils \
15310b444a8SGordon Ross	libdevinfo \
15410b444a8SGordon Ross	libuutil \
15510b444a8SGordon Ross	libbrand \
15610b444a8SGordon Ross	libzonecfg \
15710b444a8SGordon Ross	libinetutil \
15810b444a8SGordon Ross	libdladm \
15910b444a8SGordon Ross	libdlpi \
16010b444a8SGordon Ross	libdiskmgt \
16110b444a8SGordon Ross	libumem \
16210b444a8SGordon Ross	libdisasm \
16310b444a8SGordon Ross	libidmap \
16410b444a8SGordon Ross	libdevid \
16510b444a8SGordon Ross	libsaveargs
16610b444a8SGordon Rossdo
16710b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $1)
16810b444a8SGordon Rossdone
16910b444a8SGordon Ross}
17010b444a8SGordon Ross
17110b444a8SGordon Ross################################################################
17210b444a8SGordon Ross
17310b444a8SGordon Rossdo_libs() {
17410b444a8SGordon Ross
17510b444a8SGordon Rossfor lib in \
17610b444a8SGordon Ross  libavl \
17710b444a8SGordon Ross  libcmdutils \
17810b444a8SGordon Ross  libuutil \
17910b444a8SGordon Ross  libzpool \
18010b444a8SGordon Ross  libzfs_core \
18110b444a8SGordon Ross  libzfs \
18210b444a8SGordon Ross  libzfs_jni \
18310b444a8SGordon Ross  pyzfs
18410b444a8SGordon Rossdo
18510b444a8SGordon Ross  (cd $SRC/lib/$lib && $make $1)
18610b444a8SGordon Rossdone
18710b444a8SGordon Ross(cd $SRC/lib/libshare && $make $1 PLUGINS=)
18810b444a8SGordon Ross}
18910b444a8SGordon Ross
19010b444a8SGordon Ross################################################################
19110b444a8SGordon Ross
19210b444a8SGordon Rossdo_cmds() {
19310b444a8SGordon Ross
19410b444a8SGordon Rossfor cmd in \
19510b444a8SGordon Ross  availdevs \
19610b444a8SGordon Ross  isaexec \
19710b444a8SGordon Ross  fstyp \
19810b444a8SGordon Ross  zdb \
19910b444a8SGordon Ross  zfs \
20010b444a8SGordon Ross  zhack \
20110b444a8SGordon Ross  zinject \
20210b444a8SGordon Ross  zpool \
20310b444a8SGordon Ross  ztest \
204*38aced4fSRichard Lowe  zstreamdump
20510b444a8SGordon Rossdo
20610b444a8SGordon Ross  (cd $SRC/cmd/$cmd && $make $1)
20710b444a8SGordon Rossdone
20810b444a8SGordon Ross
20910b444a8SGordon Rosscase $1 in
21010b444a8SGordon Rossinstall)
21110b444a8SGordon Ross  # mount programs need fslib.o
21210b444a8SGordon Ross  (cd $SRC/cmd/fs.d/zfs && $make $1)
21310b444a8SGordon Ross  # Build just the ZFS devfsadm module
21410b444a8SGordon Ross  (cd $SRC/cmd/devfsadm/$cpu && $make SUNW_zfs_link.so \
21510b444a8SGordon Ross    ${ROOT}/usr/lib/devfsadm/linkmod \
21610b444a8SGordon Ross    ${ROOT}/usr/lib/devfsadm/linkmod/SUNW_zfs_link.so )
21710b444a8SGordon Ross  ;;
21810b444a8SGordon Rossclean|clobber)
21910b444a8SGordon Ross  (cd $SRC/cmd/fs.d/zfs && $make clobber)
22010b444a8SGordon Ross  (cd $SRC/cmd/fs.d && $make ${1}_local)
22110b444a8SGordon Ross  (cd $SRC/cmd/devfsadm && $make $1)
22210b444a8SGordon Ross  ;;
22310b444a8SGordon Rossesac
22410b444a8SGordon Ross
22510b444a8SGordon Ross(cd $SRC/cmd/syseventd/modules/zfs_mod && $make $1)
22610b444a8SGordon Ross
22710b444a8SGordon Ross# Build the MDB modules, WITH the linktest
22810b444a8SGordon Ross(cd $SRC/cmd/mdb/tools && $make $1)
229b9538c21SGordon Ross
230b9538c21SGordon Ross# kmdb_arch is 64-bit only
231b9538c21SGordon Rossfor a in $kmdb_arch
23210b444a8SGordon Rossdo
23310b444a8SGordon Ross  case $1 in
23410b444a8SGordon Ross  install|lint)
23510b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
23610b444a8SGordon Ross	$make kmdb_modlinktest.o )
23710b444a8SGordon Ross    ;;
23810b444a8SGordon Ross  clean|clobber)
23910b444a8SGordon Ross    (cd $SRC/cmd/mdb/$x/$a/kmdb &&
24010b444a8SGordon Ross	$make -k $1 )
24110b444a8SGordon Ross    ;;
24210b444a8SGordon Ross  esac
24310b444a8SGordon Ross
24410b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/zfs &&
24510b444a8SGordon Ross	$make $1 KMDB_LINKTEST_ENABLE= )
24610b444a8SGordon Ross
247b9538c21SGordon Rossdone
248b9538c21SGordon Ross
249b9538c21SGordon Ross# mdb_arch is both 32-bit & 64-bit
250b9538c21SGordon Rossfor a in $mdb_arch
251b9538c21SGordon Rossdo
25210b444a8SGordon Ross  (cd $SRC/cmd/mdb/$x/$a/libzpool &&
25310b444a8SGordon Ross	$make $1 )
25410b444a8SGordon Ross
25510b444a8SGordon Rossdone
25610b444a8SGordon Ross}
25710b444a8SGordon Ross
25810b444a8SGordon Ross################################################################
25910b444a8SGordon Ross
26010b444a8SGordon Rossdo_mans() {
26110b444a8SGordon Ross
26210b444a8SGordon Ross  case "$1" in
26310b444a8SGordon Ross  install)
264bbf21555SRichard Lowe    (cd $SRC/man/man8 && make \
265bbf21555SRichard Lowe      $ROOT/usr/share/man/man8/zdb.8 \
266bbf21555SRichard Lowe      $ROOT/usr/share/man/man8/zfs.8 \
267bbf21555SRichard Lowe      $ROOT/usr/share/man/man8/zfs-program.8 \
268bbf21555SRichard Lowe      $ROOT/usr/share/man/man8/zpool.8 \
269bbf21555SRichard Lowe      $ROOT/usr/share/man/man8/ztest.8 )
270bbf21555SRichard Lowe    (cd $SRC/man/man7 && make \
271bbf21555SRichard Lowe      $ROOT/usr/share/man/man7/zpool-features.7 )
27210b444a8SGordon Ross    ;;
27310b444a8SGordon Ross  lint)
274bbf21555SRichard Lowe    (cd $SRC/man/man8 && make zdb.8.check zfs.8.check zfs-program.8.check \
275bbf21555SRichard Lowe      zpool.8.check ztest.8.check)
276bbf21555SRichard Lowe    (cd $SRC/man/man7 && make zpool-features.7.check)
27710b444a8SGordon Ross    ;;
27810b444a8SGordon Ross  *)
279bbf21555SRichard Lowe    (cd $SRC/man/man8 && make $1)
280bbf21555SRichard Lowe    (cd $SRC/man/man7 && make $)
28110b444a8SGordon Ross    ;;
28210b444a8SGordon Ross  esac
28310b444a8SGordon Ross}
28410b444a8SGordon Ross
28510b444a8SGordon Ross################################################################
28610b444a8SGordon Ross# This builds $SRC/TAGS (and cscope.files) in a helpful order.
28710b444a8SGordon Ross
28810b444a8SGordon Rossdo_tags() {
28910b444a8SGordon Ross	(cd $SRC ;
29010b444a8SGordon Ross	find uts/common/sys -name '*.[ch]' -print |sort
29110b444a8SGordon Ross	find uts/common/fs/zfs -name '*.[ch]' -print |sort
29210b444a8SGordon Ross	find lib/libzpool -name '*.[ch]' -print |sort
29310b444a8SGordon Ross	find lib/libzfs -name '*.[ch]' -print |sort
29410b444a8SGordon Ross	find cmd/zpool -name '*.[ch]' -print |sort
29510b444a8SGordon Ross	find cmd/zfs -name '*.[ch]' -print |sort
29610b444a8SGordon Ross	find cmd/zdb -name '*.[ch]' -print |sort
29710b444a8SGordon Ross	find cmd/zhack -name '*.[ch]' -print |sort
29810b444a8SGordon Ross	find cmd/zinject -name '*.[ch]' -print |sort
29910b444a8SGordon Ross	find cmd/ztest -name '*.[ch]' -print |sort
30010b444a8SGordon Ross	find common/zfs -name '*.[ch]' -print |sort
30110b444a8SGordon Ross	echo cmd/mdb/common/modules/zfs/zfs.c
30210b444a8SGordon Ross	) > $SRC/cscope.files
30310b444a8SGordon Ross
30410b444a8SGordon Ross	(cd $SRC ;
30510b444a8SGordon Ross	exctags -e --langmap=c:+.ndl -h ndl -L - < cscope.files
30610b444a8SGordon Ross	cscope -b )
30710b444a8SGordon Ross}
30810b444a8SGordon Ross
30910b444a8SGordon Ross################################################################
31010b444a8SGordon Ross# This creates a tarfile one can use to update a test machine.
31110b444a8SGordon Ross
31210b444a8SGordon Rossdo_tar() {
31310b444a8SGordon Ross	git_rev=`git rev-parse --short=8 HEAD`
31410b444a8SGordon Ross	files="
31510b444a8SGordon Rosskernel/drv/$arch64/zfs
31610b444a8SGordon Rosskernel/fs/$arch64/zfs
31710b444a8SGordon Rosskernel/kmdb/$arch64/zfs
31810b444a8SGordon Rosslib/$arch64/libzfs.so.1
31910b444a8SGordon Rosslib/$arch64/libzfs_core.so.1
32010b444a8SGordon Rosslib/libzfs.so.1
32110b444a8SGordon Rosslib/libzfs_core.so.1
32210b444a8SGordon Rossusr/bin/$arch32/ztest
32310b444a8SGordon Rossusr/bin/$arch64/ztest
32410b444a8SGordon Rossusr/lib/$arch64/libzfs_jni.so.1
32510b444a8SGordon Rossusr/lib/$arch64/libzpool.so.1
32610b444a8SGordon Rossusr/lib/devfsadm/linkmod/SUNW_zfs_link.so
32710b444a8SGordon Rossusr/lib/fs/zfs/bootinstall
32810b444a8SGordon Rossusr/lib/fs/zfs/fstyp.so.1
32910b444a8SGordon Rossusr/lib/libzfs_jni.so.1
33010b444a8SGordon Rossusr/lib/libzpool.so.1
33110b444a8SGordon Rossusr/lib/mdb/kvm/$arch64/zfs.so
33210b444a8SGordon Rossusr/lib/mdb/proc/$arch64/libzpool.so
33310b444a8SGordon Rossusr/lib/mdb/proc/libzpool.so
33410b444a8SGordon Rosssbin/zfs
33510b444a8SGordon Rosssbin/zpool
33610b444a8SGordon Rossusr/lib/sysevent/modules/zfs_mod.so
33710b444a8SGordon Rossusr/lib/zfs/availdevs
33810b444a8SGordon Rossusr/sbin/$arch32/zdb
33910b444a8SGordon Rossusr/sbin/$arch64/zdb
34010b444a8SGordon Rossusr/sbin/$arch32/zhack
34110b444a8SGordon Rossusr/sbin/$arch64/zhack
34210b444a8SGordon Rossusr/sbin/$arch32/zinject
34310b444a8SGordon Rossusr/sbin/$arch64/zinject
34410b444a8SGordon Rossusr/sbin/zstreamdump
345bbf21555SRichard Loweusr/share/man/man8/zdb.8
346bbf21555SRichard Loweusr/share/man/man8/zfs.8
347bbf21555SRichard Loweusr/share/man/man8/zfs-program.8
348bbf21555SRichard Loweusr/share/man/man8/zpool.8
349bbf21555SRichard Loweusr/share/man/man8/ztest.8
350bbf21555SRichard Loweusr/share/man/man7/zpool-features.7
35110b444a8SGordon Ross"
35210b444a8SGordon Ross	(cd $ROOT && tar cfj ../../zfs-${git_rev}.tar.bz2 $files)
35310b444a8SGordon Ross}
35410b444a8SGordon Ross
35510b444a8SGordon Ross################################################################
35610b444a8SGordon Ross
35710b444a8SGordon Rossif [ "$1" = "" ]; then
35810b444a8SGordon Ross  set '?' # force usage
35910b444a8SGordon Rossfi
36010b444a8SGordon Ross
36110b444a8SGordon Rossset -x
36210b444a8SGordon Ross
36310b444a8SGordon Rossfor arg
36410b444a8SGordon Rossdo
36510b444a8SGordon Ross  case "$arg" in
36610b444a8SGordon Ross  install)
36710b444a8SGordon Ross    build_tools
36810b444a8SGordon Ross    set -e
36910b444a8SGordon Ross    do_hdrs $arg
37010b444a8SGordon Ross    do_kern $arg
37110b444a8SGordon Ross    do_libs $arg
37210b444a8SGordon Ross    do_cmds $arg
37310b444a8SGordon Ross    do_mans $arg
37410b444a8SGordon Ross    ;;
37510b444a8SGordon Ross  lint)
37610b444a8SGordon Ross    do_kern $arg
37710b444a8SGordon Ross    do_libs $arg
37810b444a8SGordon Ross    do_cmds $arg
37910b444a8SGordon Ross    do_mans $arg
38010b444a8SGordon Ross    ;;
38110b444a8SGordon Ross  clean)
38210b444a8SGordon Ross    do_mans $arg
38310b444a8SGordon Ross    do_cmds $arg
38410b444a8SGordon Ross    do_libs $arg
38510b444a8SGordon Ross    do_kern $arg
38610b444a8SGordon Ross    ;;
38710b444a8SGordon Ross  clobber)
38810b444a8SGordon Ross    do_mans $arg
38910b444a8SGordon Ross    do_cmds $arg
39010b444a8SGordon Ross    do_libs $arg
39110b444a8SGordon Ross    do_kern $arg
39210b444a8SGordon Ross    do_hdrs $arg
39310b444a8SGordon Ross    clobber_tools
39410b444a8SGordon Ross    ;;
39510b444a8SGordon Ross  deplibs)
39610b444a8SGordon Ross    build_tools
39710b444a8SGordon Ross    set -e
39810b444a8SGordon Ross    do_hdrs install
39910b444a8SGordon Ross    do_deplibs install
40010b444a8SGordon Ross    ;;
40110b444a8SGordon Ross  tags)
40210b444a8SGordon Ross    do_tags
40310b444a8SGordon Ross    ;;
40410b444a8SGordon Ross  tar)
40510b444a8SGordon Ross    do_tar
40610b444a8SGordon Ross    ;;
40710b444a8SGordon Ross  *)
40810b444a8SGordon Ross    echo "Usage: $0 {install|lint|clean|clobber|deplibs|tags|tar}";
40910b444a8SGordon Ross    exit 1;
41010b444a8SGordon Ross    ;;
41110b444a8SGordon Ross  esac
41210b444a8SGordon Rossdone
413