" CDDL HEADER START
"
" The contents of this file are subject to the terms of the
" Common Development and Distribution License (the "License").
" You may not use this file except in compliance with the License.
"
" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
" or http://www.opensolaris.org/os/licensing.
" See the License for the specific language governing permissions
" and limitations under the License.
"
" When distributing Covered Code, include this CDDL HEADER in each
" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
" If applicable, add the following below this CDDL HEADER, with the
" fields enclosed by brackets "[]" replaced with your own identifying
" information: Portions Copyright [yyyy] [name of copyright owner]
"
" CDDL HEADER END
"
"Copyright 2006 Sun Microsystems, Inc. All rights reserved."
"Use is subject to license terms."
nightly, the mother of all build scripts, can bringover, build, archive, package, error check, and generally do everything it takes to turn OS/Net consolidation source code into useful stuff. It is customizable to permit you to run anything from a simple build to all of the cross-checking a gatekeeper needs. The advantage to using nightly is that you build things correctly, consistently and automatically, with the best practices; building with nightly can mean never having to say you're sorry to your gatekeeper.
More specifically, nightly performs the following tasks, in order, if all these things are desired:
perform a "make clobber" to clean up old binaries
bringover from the identified parent gate/clone
perform non-debug and debug builds
list proto area files and compare with previous list
copy updated proto area to parent
list shared lib interface and compare with previous list
perform a "make lint" of the kernel and report errors
perform a "make check" to report hdrchk/cstyle errors
report the presence of any core files
check the ELF runtime attributes of all dynamic objects
check for unreferenced files
report the total build time
save a detailed log file for reference
mail the user a summary of the completed build
The actions of the script are almost completely determined by the environment variables in the env file, the only necessary argument. Ths only thing you really need to use nightly is an env file that does what you want.
10 -D Do a build with DEBUG on (non-DEBUG is built by default)
-F Do _not_ do a non-DEBUG build (use with -D to get just a DEBUG build)
-M Do not run pmodes (safe file permission checker)
-i Do an incremental build, suppressing the "make clobber" that by default removes all existing binaries and derived files. From the command line, -i also suppresses the lint pass and the cstyle/hdrchk pass
-n Suppress the bringover so that the build will start immediately with current source code
-o Do an "old style" (pre-S10) build using root privileges to set OWNER and GROUP from the Makefiles.
-a Create BFU archives
-z Compress cpio archives with gzip
-p Create packages for regular install
-U Update proto area in the parent workspace
-u Copy proto_list_${MACH} and friends to usr/src in the parent workspace. When used with -f, also build a usr/src/unrefmaster.out in the parent by merging all the usr/src/unref-${MACH}.out files in the parent.
-m Send mail to $MAILTO at end of build
-t Build and use the tools in $SRC/tools.
Code checking options
10 -A Check for ABI discrepancies in .so files. It is only required for shared object developers when there is an addition, deletion or change of interface in the .so files.
-C Check for cstyle/hdrchk errors
-f Check for unreferenced files. Since the full workspace must be built in order to accurately identify unreferenced files, -f is ignored for incremental (-i) builds, or builds that do not include -l and -p.
-r Check the ELF runtime attributes of all dynamic objects
-l Do "make lint" in $LINTDIRS (default: $SRC n)
-N Do not run protocmp or checkpaths (note: this option is not recommended, especially in conjunction with the -p option)
-W Do not report warnings (for freeware gate ONLY)
Groups of options
10 -G Gate keeper default group of options (-au)
-I Integration engineer default group of options (-ampu)
-R Default group of options for building a release (-mp)
Miscellaneous options
10 -V VERS set the build version string to VERS, overriding VERSION
-X do IA32 realmode builds (requires access to a properly-configured NT build machine and root permissions)
-S E | D | H Build the Export, Domestic, or Hybrid source product. Only Export and Domestic are truly buildable at this time.
Here is a list of prominent environment variables that nightly references and the meaning of each variable.
CODEMGR_WS
The root of your Teamware workspace, which is the directory containing Codemgr_wsdata. This is the source to be built
The root of the Teamware workspace which is the parent of the one being built; nightly uses this for the bringover if $CLONE_WS is not defined
The clone of the parent Teamware workspace; nightly uses this for the bringover if it is defined, to avoid locking out updates to the parent for the duration of the bringover
Root of OS-Net source code, referenced by the Makefiles. It is the starting point of build activity. It should be expressed in terms of $CODEMGR_WS
Root of the proto area for the build. The makefiles direct the installation of header files and libraries to this area and direct references to these files by builds of commands and other targets. It should be expressed in terms of $CODEMGR_WS
The instruction set architecture of the build machine as given by uname -p, e.g. sparc, i386
The name of the file used to lock out multiple runs of nightly. This should generally be left to the default setting
The location of the log directory maintained by nightly This should generally be left to the default setting
The name of the log file in the $ATLOG directory maintained by nightly This should generally be left to the default setting
The non-root user identity to use for the bringover from the clone or parent workspace
The address to be used to send completion e-mail at the end of the build (for the -m option)
Name of file used with protocmp to compare proto area contents
The destination for cpio archives. This may be relative to $CODEMGR_WS for private archives or relative to $PARENT_WS if you have different workspaces for different architectures but want one hierarchy of BFU archives
The parent root, which is the destination for updated headers and libraries when using the -U option
The release version number to be used; e.g., 5.10.1 (Note: this is set in Makefile.master and should not normally be overridden)
The version text string to be used; e.g., "onnv:`date '+%Y-%m-%d'`"
The release date text to be used; e.g., October 2007
See Makefile.master - but it mostly controls id strings. Generally, let nightly set this for you.
Define this to build a release with a non-debug kernel. Generally, let nightly set this for you based on its options.
The destination for packages. This may be relative to $CODEMGR_WS for private archives or relative to $PARENT_WS if you have different workspaces for different architectures but want one hierarchy of BFU archives
Set default flags to make; e.g., -k to build all targets regardless of errors.
Disables usage reporting by listed Devpro tools. Otherwise it sends mail to some Devpro machine every time the tools are used.
Directories to lint with the -l option
BUILD_TOOLS is the root of all tools including the compilers; e.g., /ws/onnv-tools. It is used by the makefile system, but not nightly.
ONBLD_TOOLS is the root of all the tools that are part of SUNWonbld; e.g., /ws/onnv-tools/onbld. By default, it is derived from BUILD_TOOLS . It is used by the makefile system, but not nightly.
The gate-defined default location for the Sun compilers, e.g. /ws/onnv-tools/SUNWspro. By default, it is derived from BUILD_TOOLS . It is used by the makefile system, but not nightly.
The gate-defined default location of things formerly in /opt; e.g., /ws/onnv-tools. This is used by nightly, but not the makefiles.
The gate-defined default location for the Teamware tools; e.g., /ws/onnv-tools/SUNWspro. By default, it is derived from OPTHOME . This is used by nightly, but not the makefiles.
The source product has no SCCS history, and is modified to remove source that cannot be shipped. EXPORT_SRC is where the clear files are copied, then modified with 'make EXPORT_SRC'
CRYPT_SRC is similar to EXPORT_SRC, but after 'make CRYPT_SRC' the files in xmod/cry_files are saved. They are dropped on the exportable source to create the domestic build
CHECK_PATHS
Normally, nightly runs the 'checkpaths' script to check for discrepancies among the files that list paths to other files, such as exception lists and req.flg. Set this flag to 'n' to disable this check, which appears in the nightly output as "Check lists of files."
CHECK_DMAKE
Nightly validates that the version of dmake encountered is known to be safe to use. Set this flag to 'n' to disable this test, allowing any version of dmake to be used.
POST_NIGHTLY
The command specified here will be executed at the end of nightly. The return status of nightly - one of "Completed", "Interrupted", or "Failed" - will be available in the environment variable NIGHTLY_STATUS. Any other environment variables exported in the environment file or by nightly are available, although these are not stable, and should be checked before use. The command output will be appended to the mail message and log file.
The following environment variables referenced by nightly are only required on IA32 realmode builds, enabled with option -X.
NTSERVER
The host name of the NT server to be used for realmode builds. It is unlikely there will be any public NT machines available, so you'll most likely need to set one of these up for your project's use if you need to build realmode.
Reference to the IHV workspace containing IHV driver binaries. The IHV workspace must be fully built before starting the ON realmode build.
Reference to the IHV workspace proto area. The IHV workspace must be fully built before starting the ON realmode build.
Reference to the IHV workspace packages. The IHV workspace must be fully built before starting the ON realmode build.
Reference to binary-only IHV packages. These packages must be available before starting the ON realmode build.
The DCB proto area containing all the individual realmode drivers used to construct the boot floppy.
Boot floppy proto area containing the actual boot floppy image resulting from the build.
Destination for sparc realmode package SUNWrmodu. Yes, this sparc package really is built on x86.
This is the reference DCB proto area to compare against the results of your build. This makes it easy to see the changes introduced from one build to the next.
This is the reference BootFloppy proto area to compare against the results of your build. This makes it easy to see the changes introduced from one build to the next.
Since realmode builds are always non-DEBUG, there's no difference between the DEBUG & non-DEBUG versions of the realmode packages. All the realmode and IHV packages are installed by nightly in both the nightly and nightly-nd packages so both sets of packages are complete. This means both the IHV and ON builds must include non-DEBUG.
The IHV workspace can be built with nightly. The recommended options are:
NIGHTLY_OPTIONS="-pmWN"
The NTSERVER variable must be set to provide the NT server to be used for the realmode part of the IHV build. None of the other realmode environment variables needed for ON realmode builds are required to build the IHV workspace.
Start with the example file in usr/src/tools/env/developer.sh (or gatekeeper.sh), copy to myenv and make your changes.
0 # grep NIGHTLY_OPTIONS myenv
NIGHTLY_OPTIONS="-ACrlapDm"
export NIGHTLY_OPTIONS
# /opt/onbld/bin/nightly -i myenv