diff options
Diffstat (limited to 'usr.sbin/crunch/crunchgen/crunchgen.1')
-rw-r--r-- | usr.sbin/crunch/crunchgen/crunchgen.1 | 475 |
1 files changed, 0 insertions, 475 deletions
diff --git a/usr.sbin/crunch/crunchgen/crunchgen.1 b/usr.sbin/crunch/crunchgen/crunchgen.1 deleted file mode 100644 index 66fe8f3..0000000 --- a/usr.sbin/crunch/crunchgen/crunchgen.1 +++ /dev/null @@ -1,475 +0,0 @@ -.\" -.\" Copyright (c) 1994 University of Maryland -.\" All Rights Reserved. -.\" -.\" Permission to use, copy, modify, distribute, and sell this software and its -.\" documentation for any purpose is hereby granted without fee, provided that -.\" the above copyright notice appear in all copies and that both that -.\" copyright notice and this permission notice appear in supporting -.\" documentation, and that the name of U.M. not be used in advertising or -.\" publicity pertaining to distribution of the software without specific, -.\" written prior permission. U.M. makes no representations about the -.\" suitability of this software for any purpose. It is provided "as is" -.\" without express or implied warranty. -.\" -.\" U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M. -.\" BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -.\" IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.\" -.\" Author: James da Silva, Systems Design and Analysis Group -.\" Computer Science Department -.\" University of Maryland at College Park -.\" $FreeBSD$ -.\" -.Dd December 23, 2005 -.Dt CRUNCHGEN 1 -.Os -.Sh NAME -.Nm crunchgen -.Nd generates build environment for a crunched binary -.Sh SYNOPSIS -.Bk -words -.Nm -.Op Fl foql -.Op Fl h Ar makefile-header-name -.Op Fl m Ar makefile-name -.Op Fl p Ar obj-prefix -.Op Fl c Ar c-file-name -.Op Fl e Ar exec-file-name -.Op Ar conf-file -.Ek -.Sh DESCRIPTION -A crunched binary is a program made up of many other programs linked -together into a single executable. -The crunched binary -.Fn main -function determines which component program to run by the contents of -.Va argv[0] . -The main reason to crunch programs together is for fitting -as many programs as possible onto an installation or system recovery -floppy. -.Pp -The -.Nm -utility reads in the specifications in -.Ar conf-file -for a crunched binary, and generates a -.Pa Makefile -and accompanying -top-level C source file that when built creates the crunched executable -file from the component programs. -For each component program, -.Nm -can optionally attempt to determine the object (.o) files that make up -the program from its source directory -.Pa Makefile . -This information is cached between runs. -The -.Nm -utility uses the companion program -.Xr crunchide 1 -to eliminate link-time conflicts between the component programs by -hiding all unnecessary symbols. -.Pp -The -.Nm -utility places specific requirements on package -.Pa Makefile Ns s -which make it unsuitable for use with -.No non- Ns Bx -sources. -In particular, the -.Pa Makefile -must contain the target -.Ic depend , -and it must define all object files in the variable -.Va OBJS . -In some cases, you can use a fake -.Pa Makefile : -before looking for -.Pa Makefile -in the source directory -.Pa foo , -.Nm -looks for the file -.Pa Makefile.foo -in the current directory. -.Pp -After -.Nm -is run, the crunched binary can be built by running -.Dq Li make -f <conf-name>.mk . -The component programs' object files must already be built. -An -.Ic objs -target, included in the output makefile, will -run -.Xr make 1 -in each component program's source dir to build the object -files for the user. -This is not done automatically since in release -engineering circumstances it is generally not desirable to be -modifying objects in other directories. -.Pp -The options are as follows: -.Bl -tag -width indent -.It Fl c Ar c-file-name -Set output C file name to -.Ar c-file-name . -The default name is -.Pa <conf-name>.c . -.It Fl e Ar exec-file-name -Set crunched binary executable file name to -.Ar exec-file-name . -The default name is -.Pa <conf-name> . -.It Fl f -Flush cache. -Forces the recalculation of cached parameters. -.It Fl l -List names. -Lists the names this binary will respond to. -.It Fl h Ar makefile-header-name -Set the name of a file to be included at the beginning of the -.Pa Makefile Ns s -generated by -.Nm . -This is useful to define some make variables such as -.Va RELEASE_CRUNCH -or similar, which might affect the behavior of -.Xr make 1 -and are annoying to pass through environment variables. -.It Fl m Ar makefile-name -Set output -.Pa Makefile -name to -.Ar makefile-name . -The default name is -.Pa <conf-name>.mk . -.It Fl o -Add -.Dq Li make obj -rules to each program make target. -.It Fl p Ar obj-prefix -Set the pathname to be prepended to the -.Ic srcdir -when computing the -.Ic objdir . -If this option is not present, then the prefix used -is the content of the -.Ev MAKEOBJDIRPREFIX -environment variable, or -.Pa /usr/obj . -.It Fl q -Quiet operation. -Status messages are suppressed. -.El -.Sh CRUNCHGEN CONFIGURATION FILE COMMANDS -The -.Nm -utility reads specifications from the -.Ar conf-file -that describe the components of the crunched binary. -In its simplest -use, the component program names are merely listed along with the -top-level source directories in which their sources can be found. -The -.Nm -utility then calculates (via the source makefiles) and caches the -list of object files and their locations. -For more specialized -situations, the user can specify by hand all the parameters that -.Nm -needs. -.Pp -The -.Ar conf-file -commands are as follows: -.Bl -tag -width indent -.It Ic srcdirs Ar dirname ... -A list of source trees in which the source directories of the -component programs can be found. -These dirs are searched using the -.Bx -.Dq Pa <source-dir>/<progname>/ -convention. -Multiple -.Ic srcdirs -lines can be specified. -The directories are searched in the order they are given. -.It Ic progs Ar progname ... -A list of programs that make up the crunched binary. -Multiple -.Ic progs -lines can be specified. -.It Ic libs Ar libspec ... -A list of library specifications to be included in the crunched binary link. -Multiple -.Ic libs -lines can be specified. -.It Ic libs_so Ar libspec ... -A list of library specifications to be dynamically linked in the -crunched binary. -These libraries will need to be made available via the run-time link-editor -.Xr rtld 1 -when the component program that requires them is executed from -the crunched binary. -Multiple -.Ic libs_so -lines can be specified. -The -.Ic libs_so -directive overrides a library specified gratuitously on a -.Ic libs -line. -.It Ic buildopts Ar buildopts ... -A list of build options to be added to every make target. -.It Ic ln Ar progname linkname -Causes the crunched binary to invoke -.Ar progname -whenever -.Ar linkname -appears in -.Va argv[0] . -This allows programs that change their behavior when -run under different names to operate correctly. -.El -.Pp -To handle specialized situations, such as when the source is not -available or not built via a conventional -.Pa Makefile , -the following -.Ic special -commands can be used to set -.Nm -parameters for a component program. -.Bl -tag -width indent -.It Ic special Ar progname Ic srcdir Ar pathname -Set the source directory for -.Ar progname . -This is normally calculated by searching the specified -.Ic srcdirs -for a directory named -.Ar progname . -.It Ic special Ar progname Ic objdir Ar pathname -Set the -.Pa obj -directory for -.Ar progname . -The -.Pa obj -directory is normally calculated by looking for a directory -whose name is that of the source directory prepended by -one of the following components, in order of priority: -the -.Fl p -argument passed to the command line; or, -the value of the -.Ev MAKEOBJDIRPREFIX -environment variable, or -.Pa /usr/obj . -If the directory is not found, the -.Ic srcdir -itself becomes the -.Ic objdir . -.It Ic special Ar progname Ic buildopts Ar buildopts -Define a set of build options that should be added to -.Xr make 1 -targets in addition to those specified using -.Ic buildopts -when processing -.Ar progname . -.It Ic special Ar progname Ic objs Ar object-file-name ... -Set the list of object files for program -.Ar progname . -This is normally calculated by constructing a temporary makefile that includes -.Dq Ic srcdir Ns / Ns Pa Makefile -and outputs the value of -.Va $(OBJS) . -.It Ic special Ar progname Ic objpaths Ar full-pathname-to-object-file ... -Sets the pathnames of the object files for program -.Ar progname . -This is normally calculated by prepending the -.Ic objdir -pathname to each file in the -.Ic objs -list. -.It Ic special Ar progname Ic objvar Ar variable_name -Sets the name of the -.Xr make 1 -variable which holds the list of -object files for program -.Ar progname . -This is normally -.Va OBJS -but some -.Pa Makefile Ns s -might like to use other conventions or -prepend the program's name to the variable, e.g.\& -.Va SSHD_OBJS . -.It Ic special Ar progname Ic lib Ar library-name ... -Specifies libraries to be linked with object files to produce -.Ar progname Ns Pa .lo . -This can be useful with libraries which redefine routines in -the standard libraries, or poorly written libraries which -reference symbols in the object files. -.It Ic special Ar progname Ic keep Ar symbol-name ... -Add specified list of symbols to the keep list for program -.Ar progname . -An underscore -.Pq Ql _ -is prepended to each symbol and it becomes the argument to a -.Fl k -option for the -.Xr crunchide 1 -phase. -This option is to be used as a last resort as its use can cause a -symbol conflict, however in certain instances it may be the only way to -have a symbol resolve. -.It Ic special Ar progname Ic ident Ar identifier -Set the -.Pa Makefile Ns / Ns Tn C -identifier for -.Ar progname . -This is normally generated from a -.Ar progname , -mapping -.Ql - -to -.Ql _ -and ignoring all other non-identifier characters. -This leads to programs named -.Qq Li foo.bar -and -.Qq Li foobar -to map to the same identifier. -.El -.Pp -Only the -.Ic objpaths -parameter is actually needed by -.Nm , -but it is calculated from -.Ic objdir -and -.Ic objs , -which are in turn calculated from -.Ic srcdir , -so is sometimes convenient to specify the earlier parameters and let -.Nm -calculate forward from there if it can. -.Pp -The makefile produced by -.Nm -contains an optional -.Ic objs -target that will build the object files for each component program by -running -.Xr make 1 -inside that program's source directory. -For this to work the -.Ic srcdir -and -.Ic objs -parameters must also be valid. -If they are not valid for a particular program, that -program is skipped in the -.Ic objs -target. -.Sh EXAMPLES -Here is an example -.Nm -input conf file, named -.Dq Pa kcopy.conf : -.Bd -literal -offset indent -srcdirs /usr/src/bin /usr/src/sbin - -progs test cp echo sh fsck halt init mount umount myinstall -progs anotherprog -ln test [ # test can be invoked via [ -ln sh -sh # init invokes the shell with "-sh" in argv[0] - -special myprog objpaths /homes/leroy/src/myinstall.o # no sources - -special anotherprog -DNO_FOO WITHOUT_BAR=YES - -libs -lutil -lcrypt -.Ed -.Pp -This conf file specifies a small crunched binary consisting of some -basic system utilities plus a homegrown install program -.Dq Pa myinstall , -for which no source directory is specified, but its object file is -specified directly with the -.Ic special -line. -.Pp -Additionally when -.Dq Pa anotherprog -is built the arguments -.Pp -.Dl -DNO_FOO WITHOUT_BAR=YES -.Pp -are added to all build targets. -.Pp -The crunched binary -.Dq Pa kcopy -can be built as follows: -.Bd -literal -offset indent -% crunchgen -m Makefile kcopy.conf # gen Makefile and kcopy.c -% make objs # build the component programs' .o files -% make # build the crunched binary kcopy -% kcopy sh # test that this invokes a sh shell -$ # it works! -.Ed -.Pp -At this point the binary -.Dq Pa kcopy -can be copied onto an install floppy -and hard-linked to the names of the component programs. -.Pp -Note that if the -.Ic libs_so -command had been used, copies of the libraries so named -would also need to be copied to the install floppy. -.Sh SEE ALSO -.Xr crunchide 1 , -.Xr make 1 , -.Xr rtld 1 -.Sh AUTHORS -.An -nosplit -The -.Nm -utility was written by -.An James da Silva Aq jds@cs.umd.edu . -.Pp -Copyright (c) 1994 University of Maryland. -All Rights Reserved. -.Pp -The -.Ic libs_so -keyword was added in 2005 by -.An Adrian Steinmann Aq ast@marabu.ch -and -.An Ceri Davies Aq ceri@FreeBSD.org . -.Sh CAVEATS -While -.Nm -takes care to eliminate link conflicts between the component programs -of a crunched binary, conflicts are still possible between the -libraries that are linked in. -Some shuffling in the order of -libraries may be required, and in some rare cases two libraries may -have an unresolvable conflict and thus cannot be crunched together. -.Pp -Some versions of the -.Bx -build environment do not by default build the -intermediate object file for single-source file programs. -The -.Dq Li make objs -must then be used to get those object files built, or -some other arrangements made. |