xref: /titanic_53/usr/src/tools/README.tools (revision 96ccc8cb05e8790fcc24931dcb155b76e810295c)
17c478bd9Sstevel@tonic-gate#
27c478bd9Sstevel@tonic-gate# CDDL HEADER START
37c478bd9Sstevel@tonic-gate#
47c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the
534c98957Smeem# Common Development and Distribution License (the "License").
634c98957Smeem# You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate#
87c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate# and limitations under the License.
127c478bd9Sstevel@tonic-gate#
137c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate#
197c478bd9Sstevel@tonic-gate# CDDL HEADER END
207c478bd9Sstevel@tonic-gate#
217c478bd9Sstevel@tonic-gate#
2234c98957Smeem# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate# Use is subject to license terms.
247c478bd9Sstevel@tonic-gate#
257c478bd9Sstevel@tonic-gate#ident	"%Z%%M%	%I%	%E% SMI"
267c478bd9Sstevel@tonic-gate
277c478bd9Sstevel@tonic-gateThis directory contains the tools used to do a full build of the
287c478bd9Sstevel@tonic-gateOS/Net workspace.  They usually live in the /opt/onbld directory on build
297c478bd9Sstevel@tonic-gatemachines. From here, 'make install' will build and install the tools
307c478bd9Sstevel@tonic-gatein $ROOT/opt/onbld. If you like, 'make pkg' will build the SUNWonbld
317c478bd9Sstevel@tonic-gatepackage in $(PKGARCHIVE). Installing that package will populate the
327c478bd9Sstevel@tonic-gate/opt/onbld directory, and create a root account for building called 'gk',
337c478bd9Sstevel@tonic-gatewhich uses csh and has a home directory of /opt/onbld/gk. You can
347c478bd9Sstevel@tonic-gateuse this account to do full builds with 'nightly'. You don't have to,
35b84bdc30Smeembut the 'gk' account has the path setup properly, has a .make.machines
36b84bdc30Smeemfile for dmake, and has a .login that sets up for dmake.
377c478bd9Sstevel@tonic-gate
387c478bd9Sstevel@tonic-gateLayout of /opt/onbld
397c478bd9Sstevel@tonic-gate--------------------
407c478bd9Sstevel@tonic-gate
417c478bd9Sstevel@tonic-gate/opt/onbld/etc/abi
427c478bd9Sstevel@tonic-gate	contains Solaris ABI database (ABI_*.db) and exceptions
437c478bd9Sstevel@tonic-gate	for ABI Auditing tool (intf_check).
447c478bd9Sstevel@tonic-gate
457c478bd9Sstevel@tonic-gate/opt/onbld/gk
467c478bd9Sstevel@tonic-gate	gk account's home directory.
477c478bd9Sstevel@tonic-gate
487c478bd9Sstevel@tonic-gate/opt/onbld/bin
497c478bd9Sstevel@tonic-gate	basic bin directory - contains scripts.
507c478bd9Sstevel@tonic-gate
517c478bd9Sstevel@tonic-gate/opt/onbld/bin/${MACH}
527c478bd9Sstevel@tonic-gate	architecture-specific bin directory for binaries.
537c478bd9Sstevel@tonic-gate
547c478bd9Sstevel@tonic-gate/opt/onbld/env
557c478bd9Sstevel@tonic-gate	build environment files.
567c478bd9Sstevel@tonic-gate
577c478bd9Sstevel@tonic-gate/opt/onbld/man
587c478bd9Sstevel@tonic-gate	rudimentary man pages for some of the tools.
597c478bd9Sstevel@tonic-gate
607c478bd9Sstevel@tonic-gate
617c478bd9Sstevel@tonic-gateTool Summary
627c478bd9Sstevel@tonic-gate------------
637c478bd9Sstevel@tonic-gate
647c478bd9Sstevel@tonic-gatebfu
657c478bd9Sstevel@tonic-gate	bonwick/faulkner upgrade. Loads a set of cpio archives created
667c478bd9Sstevel@tonic-gate	by 'mkbfu' onto a machine, either live or on alternate root
677c478bd9Sstevel@tonic-gate	and /usr filesystems. Attempts to preserve important files,
687c478bd9Sstevel@tonic-gate	but may require manual intervention before reboot to resolve
697c478bd9Sstevel@tonic-gate	changes to preserved files.
707c478bd9Sstevel@tonic-gate
717c478bd9Sstevel@tonic-gatebfuld
727c478bd9Sstevel@tonic-gate	Used by bfu to survive getting a new runtime linker when extracting
737c478bd9Sstevel@tonic-gate	new cpio archives onto a live system. Patches binaries to use
747c478bd9Sstevel@tonic-gate	a saved runtime linker in /tmp during the bfu process.
757c478bd9Sstevel@tonic-gate	Not run by anything but bfu.
767c478bd9Sstevel@tonic-gate
777c478bd9Sstevel@tonic-gatebldenv
787c478bd9Sstevel@tonic-gate	companion to 'nightly.' Takes the same environment file you
797c478bd9Sstevel@tonic-gate	used with 'nightly,' and starts a shell with the environment
807c478bd9Sstevel@tonic-gate	set up the same way as 'nightly' set it up. This is useful
817c478bd9Sstevel@tonic-gate	if you're trying to quickly rebuild portions of a workspace
827c478bd9Sstevel@tonic-gate	built by 'nightly'. 'ws' should not be used for this since it
837c478bd9Sstevel@tonic-gate	sets the environment up differently and may cause everything
847c478bd9Sstevel@tonic-gate	to rebuild (because of different -I or -L paths).
857c478bd9Sstevel@tonic-gate
867c478bd9Sstevel@tonic-gatebuild_cscope
877c478bd9Sstevel@tonic-gate
887c478bd9Sstevel@tonic-gate	builds cscope databases in the uts, the platform subdirectories
897c478bd9Sstevel@tonic-gate	of uts, and in usr/src. Uses cscope-fast.
907c478bd9Sstevel@tonic-gate
917c478bd9Sstevel@tonic-gatecheck_rtime
927c478bd9Sstevel@tonic-gate
937c478bd9Sstevel@tonic-gate	checks ELF attributes used by ELF dynamic objects in the proto area.
947c478bd9Sstevel@tonic-gate	Used by 'nightly's -r option, to check a number of ELF runtime
957c478bd9Sstevel@tonic-gate	attributes for consistency with common build rules.  nightly uses
967c478bd9Sstevel@tonic-gate	the -o option to simplify the output for diffing with previous
977c478bd9Sstevel@tonic-gate	build results.  It also uses the -i option to obtain NEEDED and RUNPATH
987c478bd9Sstevel@tonic-gate	entries, which help detect changes in software dependencies and makes
997c478bd9Sstevel@tonic-gate	sure objects don't have any strange runpaths like /opt/SUNWspro/lib.
1007c478bd9Sstevel@tonic-gate
1017c478bd9Sstevel@tonic-gatecheckproto
1027c478bd9Sstevel@tonic-gate
1037c478bd9Sstevel@tonic-gate	Runs protocmp and protolist on a workspace (or uses the environment
1047c478bd9Sstevel@tonic-gate	variable CODEMGR_WS to determine the workspace). Checks the proto area
1057c478bd9Sstevel@tonic-gate	against the packages.
1067c478bd9Sstevel@tonic-gate
1077c478bd9Sstevel@tonic-gatecodereview
1087c478bd9Sstevel@tonic-gate
1097c478bd9Sstevel@tonic-gate	Given two filenames, creates a postscript file with the file
1107c478bd9Sstevel@tonic-gate	differences highlighted.
1117c478bd9Sstevel@tonic-gate
1127c478bd9Sstevel@tonic-gatecscope-fast
1137c478bd9Sstevel@tonic-gate	The fast version of cscope that we use internally. Seems to work,
1147c478bd9Sstevel@tonic-gate	but may need more testing before it's placed in the gate. The source
1157c478bd9Sstevel@tonic-gate	just really needs to be here.
1167c478bd9Sstevel@tonic-gate
1177c478bd9Sstevel@tonic-gatecstyle
1187c478bd9Sstevel@tonic-gate	checks C source for compliance with OS/Net guidelines.
1197c478bd9Sstevel@tonic-gate
1207c478bd9Sstevel@tonic-gatectfconvert
1217c478bd9Sstevel@tonic-gate	Convert symbolic debugging information in an object file to the Compact
1227c478bd9Sstevel@tonic-gate	ANSI-C Type Format (CTF).
1237c478bd9Sstevel@tonic-gate
1247c478bd9Sstevel@tonic-gatectfdump
1257c478bd9Sstevel@tonic-gate	Decode and display CTF data stored in a raw file or in an ELF file.
1267c478bd9Sstevel@tonic-gate
1277c478bd9Sstevel@tonic-gatectfmerge
1287c478bd9Sstevel@tonic-gate	Merge the CTF data from one or more object files.
1297c478bd9Sstevel@tonic-gate
1307c478bd9Sstevel@tonic-gatedepcheck
1317c478bd9Sstevel@tonic-gate	A tool to try an assess the dependencies of executables.  This tool
1327c478bd9Sstevel@tonic-gate	is not a definitive dependency check, but it does use "strings" and
1337c478bd9Sstevel@tonic-gate	"ldd" to gather as much information as it can.  The dependency check
1347c478bd9Sstevel@tonic-gate	tool can handle filenames and pkgnames.  Before using the dependency
1357c478bd9Sstevel@tonic-gate	checker you must build a database which reflects the properties and
1367c478bd9Sstevel@tonic-gate	files in your system.
1377c478bd9Sstevel@tonic-gate
1387c478bd9Sstevel@tonic-gateelfcmp
1397c478bd9Sstevel@tonic-gate	Compares two ELF modules (e.g. .o files, executables) section by
1407c478bd9Sstevel@tonic-gate	section.  Useful for determining whether "trivial" changes -
1417c478bd9Sstevel@tonic-gate	cstyle, lint, etc - actually changed the code.  The -S option
1427c478bd9Sstevel@tonic-gate	is used to test whether two binaries are the same except for
1437c478bd9Sstevel@tonic-gate	the elfsign signature.
1447c478bd9Sstevel@tonic-gate
1457c478bd9Sstevel@tonic-gateelfsign
1467c478bd9Sstevel@tonic-gate	Built from the same sources as the shipped elfsign(1), this
1477c478bd9Sstevel@tonic-gate	version is used in nightly -t builds to assure that the signing
1487c478bd9Sstevel@tonic-gate	process and format is the same as will be used on the target
1497c478bd9Sstevel@tonic-gate	system.
1507c478bd9Sstevel@tonic-gate
1517c478bd9Sstevel@tonic-gateelfsigncmp
1527c478bd9Sstevel@tonic-gate	This script can be used in lieu of elfsign during a build.
1537c478bd9Sstevel@tonic-gate	It uses elfsign to sign a copy of the object and elfcmp -S to
1547c478bd9Sstevel@tonic-gate	verify that the signing caused no damage before updating
1557c478bd9Sstevel@tonic-gate	the object to be signed.
1567c478bd9Sstevel@tonic-gate
1577c478bd9Sstevel@tonic-gatefindunref
1587c478bd9Sstevel@tonic-gate	Finds all files in a source tree that have access times older than a
1597c478bd9Sstevel@tonic-gate	certain time and are not in a specified list of exceptions.  Since
1607c478bd9Sstevel@tonic-gate	'nightly' timestamps the start of the build, and findunref uses its
1617c478bd9Sstevel@tonic-gate	timestamp (by default), this can be used to find all files that were
1627c478bd9Sstevel@tonic-gate	unreferenced during a nightly build).  Since some files are only used
1637c478bd9Sstevel@tonic-gate	during a SPARC or Intel build, 'findunref' needs to be run on
1647c478bd9Sstevel@tonic-gate	workspaces from both architectures and the results need to be merged.
1657c478bd9Sstevel@tonic-gate	For instance, if $INTELSRC and $SPARCSRC are set to the usr/src
1667c478bd9Sstevel@tonic-gate	directories of your Intel and SPARC nightly workspaces, then you
1677c478bd9Sstevel@tonic-gate	can merge the results like so:
1687c478bd9Sstevel@tonic-gate
1697c478bd9Sstevel@tonic-gate	$ findunref $INTELSRC $INTELSRC/tools/findunref/exception_list | \
1707c478bd9Sstevel@tonic-gate	  sort > ~/unref-i386.out
1717c478bd9Sstevel@tonic-gate	$ findunref $SPARCSRC $SPARCSRC/tools/findunref/exception_list | \
1727c478bd9Sstevel@tonic-gate	  sort > ~/unref-sparc.out
1737c478bd9Sstevel@tonic-gate	$ comm -12 ~/unref-i386.out ~/unref-sparc.out > ~/unref.out
1747c478bd9Sstevel@tonic-gate
1757c478bd9Sstevel@tonic-gatehdrchk
1767c478bd9Sstevel@tonic-gate	checks headers for compliance with OS/Net standards (form, includes,
1777c478bd9Sstevel@tonic-gate	C++ guards).
1787c478bd9Sstevel@tonic-gate
1797c478bd9Sstevel@tonic-gateinstall.bin
1807c478bd9Sstevel@tonic-gate	binary version of /usr/sbin/install. Used to be vastly faster
1817c478bd9Sstevel@tonic-gate	(since /usr/sbin/install is a shell script), but may only be a bit
1827c478bd9Sstevel@tonic-gate	faster now. One speedup includes avoiding the name service for the
1837c478bd9Sstevel@tonic-gate	well-known, never-changing password entries like 'root' and 'sys.'
1847c478bd9Sstevel@tonic-gate
1857c478bd9Sstevel@tonic-gateintf_check
1867c478bd9Sstevel@tonic-gate	detects and reports ABI versioning and stability problems.
1877c478bd9Sstevel@tonic-gate
18834c98957Smeemlintdump
18934c98957Smeem	dumps the contents of one or more lint libraries; see lintdump(1)
19034c98957Smeem
1917c478bd9Sstevel@tonic-gatekeywords
1927c478bd9Sstevel@tonic-gate	checks files for proper SCCS keywords.
1937c478bd9Sstevel@tonic-gate
1947c478bd9Sstevel@tonic-gatemakebfu
1957c478bd9Sstevel@tonic-gate	simple wrapper around 'mkbfu' for use outside nightly (when in a build
1967c478bd9Sstevel@tonic-gate	shell from 'ws' or 'bldenv').
1977c478bd9Sstevel@tonic-gate
1987c478bd9Sstevel@tonic-gatemkbfu
1997c478bd9Sstevel@tonic-gate	makes cpio archives out of the proto area suitable for bfu'ing.
2007c478bd9Sstevel@tonic-gate	Used by 'nightly' and 'makebfu'.
2017c478bd9Sstevel@tonic-gate
2027c478bd9Sstevel@tonic-gatenightly
2037c478bd9Sstevel@tonic-gate	nightly build script. Takes an environment (or 'env') file describing
2047c478bd9Sstevel@tonic-gate	such things as the workspace, the parent, and what to build. See
2057c478bd9Sstevel@tonic-gate	env/developer and env/gatekeeper for sample, hopefully well-commented
2067c478bd9Sstevel@tonic-gate	env files.
2077c478bd9Sstevel@tonic-gate
2087c478bd9Sstevel@tonic-gatepmodes
2097c478bd9Sstevel@tonic-gate	enforces proper file ownership and permissions in pkgmap and package
2107c478bd9Sstevel@tonic-gate	prototype* files.  converts files if necessary
2117c478bd9Sstevel@tonic-gate
2127c478bd9Sstevel@tonic-gateprotocmp
2137c478bd9Sstevel@tonic-gate	compares proto lists and the package definitions. Used by nightly
2147c478bd9Sstevel@tonic-gate	to determine if the proto area matches the packages, and to detect
2157c478bd9Sstevel@tonic-gate	differences between a childs proto area and a parents.
2167c478bd9Sstevel@tonic-gate
2177c478bd9Sstevel@tonic-gateprotocmp.terse
2187c478bd9Sstevel@tonic-gate	transforms the output of protocmp into something a bit more friendly
2197c478bd9Sstevel@tonic-gate
2207c478bd9Sstevel@tonic-gateprotolist
2217c478bd9Sstevel@tonic-gate	create a list of what's in the proto area, to feed to protocmp.
2227c478bd9Sstevel@tonic-gate
2237c478bd9Sstevel@tonic-gatesccscp
2247c478bd9Sstevel@tonic-gate	copy a file under SCCS control to another location in a workspace.
2257c478bd9Sstevel@tonic-gate	also updates teamware's nametable.
2267c478bd9Sstevel@tonic-gate
2277c478bd9Sstevel@tonic-gatesccshist
2287c478bd9Sstevel@tonic-gate	Display the history, comments and diffs, of a file under SCCS
2297c478bd9Sstevel@tonic-gate	control.
2307c478bd9Sstevel@tonic-gate
2317c478bd9Sstevel@tonic-gatesccsmv
2327c478bd9Sstevel@tonic-gate	rename a file under SCCS control to another location in a workspace.
2337c478bd9Sstevel@tonic-gate	also updates teamware's nametable.
2347c478bd9Sstevel@tonic-gate
2357c478bd9Sstevel@tonic-gatesccsrm
2367c478bd9Sstevel@tonic-gate	delete a file under SCCS control workspace. also updates teamware's
2377c478bd9Sstevel@tonic-gate	nametable. Actually renames it to .del-<file>-`date` so that others
2387c478bd9Sstevel@tonic-gate	will see it move when it is brought over (in case they were working
2397c478bd9Sstevel@tonic-gate	on it).
2407c478bd9Sstevel@tonic-gate
2417c478bd9Sstevel@tonic-gatews
2427c478bd9Sstevel@tonic-gate	creates a shell with the environment set up to build in the given
2437c478bd9Sstevel@tonic-gate	workspace. Used mostly for non-full-build workspaces, so it sets up
2447c478bd9Sstevel@tonic-gate	to pull headers and libraries from the proto area of the parent if
2457c478bd9Sstevel@tonic-gate	they aren't in the childs proto area.
2467c478bd9Sstevel@tonic-gate
2477c478bd9Sstevel@tonic-gatewx
2487c478bd9Sstevel@tonic-gate	A great workspace tool by bonwick. See wx.README for information
2497c478bd9Sstevel@tonic-gate	and warnings.
2507c478bd9Sstevel@tonic-gate
2517c478bd9Sstevel@tonic-gatetokenize
2527c478bd9Sstevel@tonic-gate	Used to build the sun4u boot block.
2537c478bd9Sstevel@tonic-gate
2547c478bd9Sstevel@tonic-gatewebrev
2557c478bd9Sstevel@tonic-gate	Generates a set of HTML pages that show side-by-side diffs of
2567c478bd9Sstevel@tonic-gate	changes in your workspace, for easy communication of code
2577c478bd9Sstevel@tonic-gate	review materials.  Can automagically find edited files or use a
2587c478bd9Sstevel@tonic-gate	manually-generated list; knows how to use wx's active file for
2597c478bd9Sstevel@tonic-gate	lists of checked-out files and proposed SCCS comments.
2607c478bd9Sstevel@tonic-gate
261*96ccc8cbSesaxewsdiff
262*96ccc8cbSesaxe	Detect object differences between two ON proto areas. Used by
263*96ccc8cbSesaxe	nightly(1) to determine what changed between two builds. Handy
264*96ccc8cbSesaxe	for identifying the set of built objects impacted by a given
265*96ccc8cbSesaxe	source change. This information is needed for patch construction.
266*96ccc8cbSesaxe
267*96ccc8cbSesaxe
2687c478bd9Sstevel@tonic-gateHow to do a full build
2697c478bd9Sstevel@tonic-gate----------------------
2707c478bd9Sstevel@tonic-gate
2717c478bd9Sstevel@tonic-gate1. Find an environment file that might do what you want to do. If you're just
2727c478bd9Sstevel@tonic-gate   a developer wanting to do a full build in a child of the gate, copy the
2737c478bd9Sstevel@tonic-gate   'developer' environment file to a new name (private to you and/or the
2747c478bd9Sstevel@tonic-gate   work being done in this workspace, to avoid collisions with others). Then
2757c478bd9Sstevel@tonic-gate   edit the file and tailor it to your workspace. Remember that this file
2767c478bd9Sstevel@tonic-gate   is a shell script, so it can do more than set environment variables.
2777c478bd9Sstevel@tonic-gate
278b84bdc30Smeem2. Login as 'gk' (or root, but your PATH and .make.machines for dmake will
2797c478bd9Sstevel@tonic-gate   not be right). Run 'nightly' and give it your environment file as an
2807c478bd9Sstevel@tonic-gate   option. 'nightly' will first look for your environment file in
2817c478bd9Sstevel@tonic-gate   /opt/onbld/env, and if it's not there then it will look for it as an
2827c478bd9Sstevel@tonic-gate   absolute or relative path. Some people put their environment files in
2837c478bd9Sstevel@tonic-gate   their workspace to keep them close.
2847c478bd9Sstevel@tonic-gate
2857c478bd9Sstevel@tonic-gate3. When 'nightly' is complete, it will send a summary of what happened to
2867c478bd9Sstevel@tonic-gate   $MAILTO. Usually, the less info in the mail the better. If you have failures,
2877c478bd9Sstevel@tonic-gate   you can go look at the full log of what happened, generally in
2887c478bd9Sstevel@tonic-gate   $CODEMGR_WS/log/log.<date>/nightly.log (the mail_msg it sent and the proto
2897c478bd9Sstevel@tonic-gate   list are there too). You can also find the individual build logs, like
2907c478bd9Sstevel@tonic-gate   'make clobber' and 'make install' output in $SRC, under names like
2917c478bd9Sstevel@tonic-gate   clobber-${MACH}.out and install-${MACH}.out (for a DEBUG build). These
2927c478bd9Sstevel@tonic-gate   will be smaller than nightly.log, and maybe more searchable.
2937c478bd9Sstevel@tonic-gate
2947c478bd9Sstevel@tonic-gateFiles you have to update to add a tool
2957c478bd9Sstevel@tonic-gate--------------------------------------
2967c478bd9Sstevel@tonic-gate
2977c478bd9Sstevel@tonic-gate1.  Add the tool in its appropriate place.
2987c478bd9Sstevel@tonic-gate2.  Update the Makefile as required.
2997c478bd9Sstevel@tonic-gate3.  Update usr/src/tools/SUNWonbld/prototype_*.
30034c98957Smeem4.  Update usr/src/tools/README.tools (this file).
30134c98957Smeem5.  Repeat 1-4 for any man pages.
302