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