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