Print this page
9128 cw(1onbld) should be able to run multiple shadows
9129 file-locking tests shouldn't build multiple source files in one compiler invocation
9130 DTrace tst.gcc.d isn't useful
9132 cw(1onbld) shouldn't shadow pure preprocessing
Reviewed by: Andy Fiddaman <omnios@citrus-it.net>
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/tools/cw/cw.1onbld.man.txt
+++ new/usr/src/tools/cw/cw.1onbld.man.txt
1 1 CW(1ONBLD) illumos Build Tools CW(1ONBLD)
2 2
3 -
4 -
5 3 NAME
6 - cw - invoke one or more compilers with argument translation
4 + cw - invoke one or more compilers with argument translation
7 5
8 6 SYNOPSIS
9 - cw {-_cc|-_gcc|-_CC|-_g++} [options] [compiler args...]
7 + cw [-C] [--versions] [--noecho] --primary compiler
8 + [--shadow compiler ...] -- compiler args ...
10 9
11 10 DESCRIPTION
12 - cw is a facility for invoking one or more compilers, providing
13 - translation from Sun Studio arguments as appropriate. This allows the
14 - use of arbitrary compilers without the need to alter large numbers of
15 - makefiles. A mode called shadow compilation, the default, invokes two
16 - different compilers so that warnings and errors may be obtained from
17 - both. See SHADOW COMPILATION for details. This version of cw supports
18 - Sun Studio 10 and 11 and gcc 3.4.3 as shipped in Solaris.
11 + cw is a facility for invoking one or more compilers, providing
12 + translation from Sun style arguments as appropriate. This allows the use
13 + of arbitrary compilers without the need to alter large numbers of
14 + makefiles. A mode called shadow compilation invokes multiple compilers
15 + so that warnings and errors may be obtained from all of them. See SHADOW
16 + COMPILATION for details. This version of cw supports compilers with both
17 + Sun Studio 12 and GCC-style command lines.
19 18
20 19 ARGUMENTS
21 - Exactly one of the following arguments is required, and must appear
22 - immediately following cw in the argument list:
20 + Both the --primary and --shadow parameters take a compiler specification.
21 + This is a comma-separated list of the form name,executable,style Where
22 + name is a name for the compiler, executable is the full path to the
23 + compiler executable, and style is the style of command-line options the
24 + compiler expects, either sun or gnu.
23 25
24 - -_cc
25 - Select Sun Studio C (cc) as the primary compiler.
26 + --primary compiler
27 + Specify the compiler to be used primarily (that which is used for
28 + link-editing and pre-processing, and whos objects we deliver).
26 29
27 - -_gcc
28 - Select GNU C (gcc) as the primary compiler.
30 + --shadow compiler
31 + Specify a shadow compiler, which builds sources for the sake of
32 + checking code quality and compatibility, but has its output
33 + discarded.
29 34
30 - -_CC
31 - Select Sun Studio C++ (CC) as the primary compiler.
35 + --noecho
36 + Do not echo the actual command line of any compilers invoked.
32 37
33 - -_g++
34 - Select GNU C++ (g++) as the primary compiler.
38 + --versions
39 + Request from each configured primary and shadow compiler its
40 + version information.
35 41
36 -OPTIONS
37 - The following options are supported:
42 + -C The sources being compiled are C++. This is necessary as it
43 + affects the translation of compiler arguments.
38 44
39 - -_compiler
40 - Do not invoke any compiler; instead, write to standard output the
41 - full path to the primary compiler that would be invoked. If this
42 - option is given, it must appear immediately following the compiler
43 - selection argument, and all other options will be disregarded.
45 + -- Arguments intended for the compilers themselves must be separated
46 + from those of cw by a --.
44 47
45 - -_versions
46 - Print the cw version, followed in turn by the path to and versions
47 - of each compiler which would be invoked. If this option is given,
48 - it must appear immediately following the compiler selection
49 - argument, and all other options will be disregarded.
48 + -_name=
50 49
51 - -_noecho
52 - Normally, cw writes to standard error the actual compiler commands
53 - invoked, each prefixed with '+'. This option suppresses these
54 - messages.
50 + -_style=
51 + Parameters intended for the compiler be guarded with options of
52 + the form -_name= and -_style= Where name and style are those
53 + passed to --primary and --shadow this allows certain flags to be
54 + passed only to certain classes of compiler.
55 55
56 - -_cc=,-_gcc=,-_CC=,-g++=
57 - Pass compiler-dependent options. See ARGUMENT TRANSLATION.
56 + For historical reasons, the -_style= option is also translated
57 + such that a style of sun may use the flag -_cc= and a style of
58 + gnu may use the flag -_gcc=, and when the -C option is given and
59 + C++ is in use the style of sun may use the flag -_CC= and the
60 + style of gnu may use the flag -_g++=.
58 61
59 62 SHADOW COMPILATION
60 - Unless otherwise directed by environment variables (see ENVIRONMENT),
61 - cw will invoke both the compiler specified by its first argument
62 - (primary) and a designated alternate compiler (shadow). The primary
63 - compiler will be invoked with the arguments given to cw, translated as
64 - described in ARGUMENT TRANSLATION. The secondary compiler will be
65 - invoked in parallel with the primary (but see ENVIRONMENT); its
66 - arguments will likewise be translated. However, the shadow compiler's
67 - arguments will also be modified as follows:
63 + If --shadow compilers are specified cw will invoke each shadow compiler,
64 + with the outputs modified (as well as any translation for compiler style)
65 + as follows:
68 66
69 - 1. If none of -c, -E, -P, or -S appears in the argument list (that is,
70 - linking is attempted), the shadow compiler will not be invoked.
71 - This is because the objects built with that compiler which would be
72 - linked have been previously discarded.
67 + 1. If neither of -c, -S appears in the argument list (that is, linking
68 + is attempted or only the pre-processor is invoked), the shadow
69 + compilers will not be invoked.
73 70
74 - 2. If an option of the form -ofilename was provided, it will be
75 - replaced by two options of the form -o tempfile.
71 + 2. If the -o filename option was provided, with or without a separating
72 + space, it will be replaced with -o tempfile
76 73
77 - 3. If the option -o was provided, its following argument will be
78 - replaced by tempfile.
74 + 3. If the option -o was not provided, -o tempfile will be added to the
75 + end of the argument list used to invoke the shadow compilers.
76 + When shadow compilation is in effect, cw writes to standard error each
77 + compiler's standard error output following its argument list. Messages
78 + from the compilers will not be interleaved. If cw is used to invoke the
79 + preprocessor and no output location is specified, cw will write to
80 + standard output the primary compiler's standard output.
79 81
80 - 4. If neither of the above options was provided, two options of the
81 - form -o tempfile will be added to the end of the argument list used
82 - to invoke the shadow compiler.
82 + Because the Sun compilers write intermediate objects to fixed filenames
83 + in the current directory when instructed to compile and link multiple
84 + source files via a single command line, it would be unsafe to invoke more
85 + than one compiler in this fashion. Therefore cw does not accept multiple
86 + source files unless the preprocessor is to be invoked. An attempt to
87 + invoke cw in this manner will result in an error.
83 88
84 - In all three cases, tempfile is the name of a temporary file which will
85 - be removed by cw before it terminates.
86 -
87 - When shadow compilation is in effect, cw writes to standard error each
88 - compiler's standard error output following its argument list. Messages
89 - from the two compilers will not be interleaved. If cw is used to
90 - invoke the preprocessor and no output location is specified, cw will
91 - write to standard output the primary compiler's standard output, and
92 - the secondary compiler's standard output will be discarded.
93 -
94 - Because the Studio compilers write intermediate objects to fixed
95 - filenames in the current directory when instructed to compile and link
96 - multiple source files via a single command line, it would be unsafe to
97 - invoke more than one compiler in this fashion. Therefore cw does not
98 - accept multiple source files unless the preprocessor is to be invoked.
99 - An attempt to invoke cw in this manner will result in an error.
100 -
101 89 ARGUMENT TRANSLATION
102 - The arguments provided to cw will be passed through to each compiler
103 - invoked, altered as follows:
90 + If the compiler to be invoked is a GNU-style C or C++ compiler, a set of
91 + default flags is added to the beginning of the argument list, and the
92 + remaining arguments are translated to their closest appropriate semantic
93 + equivalents and passed in the same order as their counterparts given to
94 + cw. See the comments at the head of usr/src/tools/cw/cw.c for a detailed
95 + list of translations.
104 96
105 - 1. Options intended for cw itself are removed.
106 -
107 - 2. The shadow compiler's arguments are modified as described in SHADOW
108 - COMPILATION so that its output is discarded.
109 -
110 - 3. If the compiler to be invoked is a GNU C or C++ compiler, a set of
111 - default flags is added to the beginning of the argument list, and
112 - the remaining arguments are translated to their closest appropriate
113 - semantic equivalents and passed in the same order as their
114 - counterparts given to cw. Arguments which begin with -_gcc= or
115 - -_g++= will be passed in place with the leading portion removed.
116 - Arguments which begin with -_cc= or -_CC= will be discarded. See
117 - the comments at the head of usr/src/tools/cw/cw.c for a detailed
118 - list of translations.
119 -
120 - 4. If the compiler to be invoked is a Studio C or C++ compiler, the
121 - remaining arguments are passed unmodified and in the same order as
122 - given to cw. Arguments which begin with -_cc= or -_CC= will be
123 - passed in place with the leading portion removed. Arguments which
124 - begin with -_gcc= or -_g++= will be discarded.
125 -
126 97 ENVIRONMENT
127 - CW_NO_SHADOW
128 - If this variable is set in the environment, invoke only the primary
129 - compiler.
98 + CW_SHADOW_SERIAL
99 + If this variable is set in the environment, invoke the primary
100 + compiler, wait for it to complete, then invoke the shadow
101 + compilers. Normally the primary and shadow compilers are invoked
102 + in parallel.
130 103
131 - CW_SHADOW_SERIAL
132 - If this variable is set in the environment, invoke the primary
133 - compiler, wait for it to complete, then invoke the shadow compiler.
134 - Normally the two compilers are invoked in parallel. If
135 - CW_NO_SHADOW is set, this has no effect.
104 + CW_NO_EXEC
105 + f this variable is set in the environment, write the usual output
106 + to standard error but do not actually invoke any compiler. This
107 + is useful for debugging the translation engine.
136 108
137 - CW_NO_EXEC
138 - If this variable is set in the environment, write the usual output
139 - to standard error but do not actually invoke any compiler. This is
140 - useful for debugging the translation engine.
141 -
142 - CW_CC, CW_CPLUSPLUS
143 - If these variables are set in the environment, they specify the
144 - full pathname for the Studio C and C++ compilers, respectively.
145 -
146 - CW_CC_DIR, CW_CPLUSPLUS_DIR, SPRO_VROOT, SPRO_ROOT, BUILD_TOOLS
147 - If CW_CC or CW_CPLUSPLUS are not set, these variables define the
148 - search path for Studio compilers as follows: If CW_CC_DIR is set,
149 - the Studio C compiler in $CW_CC_DIR will be used. Likewise, if
150 - CW_CPLUSPLUS_DIR is set, the Studio C++ compiler in
151 - $CW_CPLUSPLUS_DIR will be used. Otherwise, if SPRO_VROOT is set,
152 - the Studio C and C++ compilers in $SPRO_VROOT/bin will be used.
153 - Otherwise, if SPRO_ROOT is set, the Studio C and C++ compilers in
154 - $SPRO_ROOT/SS12/bin will be used. Otherwise, if BUILD_TOOLS is
155 - set, the Studio C and C++ compilers in
156 - $BUILD_TOOLS/SUNWspro/SS12/bin will be used. Otherwise, the Studio
157 - compilers in a predefined default location will be used.
158 -
159 - CW_GCC, CW_GPLUSPLUS
160 - If these variables are set in the environment, they specify the
161 - full pathname for the GNU C and C++ compilers, respectively.
162 -
163 - CW_GCC_DIR, CW_GPLUSPLUS_DIR, GNUC_ROOT
164 - If CW_GCC or CW_GPLUSPLUS are not set, these variables alter the
165 - search path for GNU compilers in a manner similar to that described
166 - above for the Studio compilers. Specifically:
167 -
168 - If CW_GCC_DIR is set, the GNU C compiler in $CW_GCC_DIR will be used.
169 - Likewise, if CW_GPLUSPLUS_DIR is set, the GNU C++ compiler in
170 - $CW_GPLUSPLUS_DIR will be used. Otherwise, if GNUC_ROOT is set, the
171 - GNU C and C++ compilers in $GNUC_ROOT/bin will be used. Previously
172 - $GCC_ROOT was used to in place of $GNUC_ROOT; however, because that
173 - environment variable has special meaning to gcc, if it is encountered
174 - in bldenv or nightly(1ONBLD), it will be translated to $GNUC_ROOT.
175 -
176 - If none of the aforementioned environment variables are set, the GNU
177 - compilers in a predefined default location will be used.
178 -
179 109 EXIT STATUS
180 - The following exit status values are returned:
110 + The following exit status values are returned:
181 111
182 - 0 The primary compiler, and shadow compiler if invoked, both
183 - completed successfully.
112 + 0 The primary compiler, and shadow compilers if invoked, all
113 + completed successfully.
184 114
185 - >0 A usage error occurred, or one or more compilers returned a nonzero
186 - exit status.
115 + >0 A usage error occurred, or one or more compilers returned a
116 + nonzero exit status.
187 117
188 -BUGS
189 - The translations provided for gcc are not always exact and in some
190 - cases reflect local ON policy rather than actual equivalence.
191 -
192 - Additional compiler types should be supported.
193 -
194 - The translation engine is hacky.
195 -
196 118 SEE ALSO
197 - cc(1), CC(1), gcc(1)
119 + cc(1), CC(1), gcc(1)
198 120
121 +BUGS
122 + The translations provided for gcc are not always exact and in some cases
123 + reflect local policy rather than actual equivalence.
199 124
125 + Additional compiler types should be supported.
200 126
201 - August 16, 2018 CW(1ONBLD)
127 + The translation engine is hacky.
128 +
129 +illumos September 4, 2018 illumos
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX