nescc [-gcc=gcc-name]
[-fnesc-gcc=gcc-name] [-fnesc-mingw-gcc]
[-fnesc-target=architecture] [-fnesc-docdir=dir]
[-fnesc-topdir=dir] [-fnesc-docs-use-graphviz]
[-fnesc-is-app]
[-fnesc-simulate]
[-fnesc-nido-tosnodes=n]
[-fnesc-nido-motenumber=expression]
[-conly] [-fnesc-cfile=file] [-fnesc-gccize]
[-fnesc-cppdir=directory]
[-fnesc-separator=separator]
[-fnesc-no-inline] [-fnesc-optimize-atomic]
[--version] [-fnesc-include=file]
[-fnesc-verbose] [-Wnesc-...]
[-fnesc-dump=specification]
[-fnesc-dumpfile=file]
[-fnesc-scheduler=specification]
[-fnesc-path=path]
[-fnesc-no-debug]
[-fnesc-deputy] [-fnesc-no-deputy]
[-fnesc-default-safe] [-fnesc-default-unsafe]
[any gcc option] files...
nescc is an extension to gcc that knows how to
compile nesC applications. If invoked on regular C files, it behaves exactly
like gcc. When invoked on a nesC component or interface (.nc
extension) file it compiles and links (except if the -c, -S,
-conly, -E or -fsyntax-only options are used) that
component with the other files specified on the command line.
nescc accepts all gcc options, and some additional
nesC specific options:
- -gcc=gcc-name
-fnesc-gcc=gcc-name
- Specify which gcc compiler to use to compile and link any C files, either
explicitly specified, or generated as the output of the nesC-to-C
compiler. This option supports cross-compilation of nesC code (the usual
mode of operation...).
- -fnesc-mingw-gcc
- Pass this option if the gcc version specified with -gcc=... was
compiled for Window's mingw environment, and hence expects Windows-style
rather than Unix-style paths.
- -fnesc-target=architecture
- Specify the target architecture to compile for. Currently supported
platforms are avr (the Atmel AVR family), msp430 (the TI
MSP430 family) and self (the machine the nesC compiler is running
on). If you use the env target, the architecture details are read
from the NESC_MACHINE environment variable. See the separate env
target documentation for details.
- -fnesc-docdir=dir
- Generate documentation for the compiled component in directory
dir.
- -fnesc-topdir=dir
- Specify directory paths that should be stripped from the source file names
when generating "package names" for the documentation
files.
- -fnesc-docs-use-graphviz
- Explicitly enable or disable the use of the graphviz tool in the generated
documentation. Without this option, graphviz is enabled iff the dot
program is found in the current path. Use of graphviz requires dot.
The documentation generation tool checks the version of dot, and
enables client-side image maps, if supported.
- -fnesc-is-app
- Tell nescc that the source being compiled is an application, and to
generate an app description page for the entire application.
- -fnesc-simulate
- Compile for a simulation environment.
- -fnesc-nido-tosnodes=n,
-fnesc-nido-motenumber=expression
- When -fnesc-simulate is specified, the nesC program is compiled for
a simulation environment, where a single executable will simulate n
nodes. Specifically, in the generated code, each global variable becomes
an n element array, and all accesses to global variables are
indexed with expression.
- -conly
- Just compile to C, leaving the generated source code for
top-level-component comp.nc in C file comp.c (except if the
-fnesc-cfile option is specified).
- -fnesc-cfile=file
- Specify a file in which to save the C code generated when compiling a
component. Note: if you specify two components on the command line, then
the C code from the second one will overwrite the C code from the
first.
- -fnesc-gccize
- Output target-specific extensions as gcc-style attributes rather than
using the target's original syntax. Can help if using -conly and
sending the nesC output from some other tool that understands gcc
attributes but not the target-specific extensions.
- -fnesc-cppdir=directory
- Save all preprocessing results in directory. The directory is
created if it doesn't exist. This can be helpful to track down
preprocessor-related compilation problems. You probably want to ensure
that directory is empty when you call nescc, to make it
obvious which files where preprocessed as part of the current
compilation.
- -fnesc-separator=separator
- Set separator used to create symbol names in the generated C code (default
$). The compiler needs to generate unique names to denote, e.g., a module
variable. It does this by concatenating various symbol names to ensure
that it generates unique names. For instance, variable bar in
module Maz becomes a global C variable Maz$bar in the
compiler output. Some C compilers do not like $ in symbol names, so you
can specify a different separator, e.g., __ (leading to generated
symbols like Maz__bar).
You will get a compile-time warning if any symbol in the
program being compiled contains the separator you specify (the presence
of the separator in a symbol could lead to the generation of incorrect
code). The separator can however start or end a symbol.
- -fnesc-no-inline
- Disabled the automatic inlining of all small functions, and of all
functions with a single call site.
- -fnesc-optimize-atomic
- Optimize atomic statements [EXPERIMENTAL]: reduce or remove the overhead
of atomic statements in simple cases (e.g., single-byte reads).
- --version
- Print the version of nescc and of the selected gcc compiler (see
-gcc).
- -fnesc-include=header-file
- Include the specified file before compiling a nesC component. Behaves as
if includes header-file; was included at the start of
that component.
- -fnesc-dump=specification
- Output information on the compiled programs structure, and in particular
its user-specified attributes. For more details, see the separate nesC
dump documentation.
- -fnesc-dumpfile=file
- Where to output the information requested by -fnesc-dump. Defaults
to stdout.
- -fnesc-verbose
- Be more verbose than -v.
- -fnesc-scheduler=component,unique-string,interface-name,interface-definition,run-event,post-command
- By default, nesC compiles uses of task void taskname()
... to void taskname(), and post
taskname() to TOS_post(taskname).
With this option, each task gets its own
interface-definition interface, the task implementation is
transformed into a run-event event and posts becomes a call to
the post-command command. This per-task interface is
automatically connected to the parameterised interface-name
interface of scheduler component component. The parameter id for
the connection is chosen with
unique("unique-string").
- -fnesc-path=path
- Add colon separated directories to the nescc search path.
- -fnesc-no-debug
- Remove the functions dbg(), dbg_clear(), dbg_active()
from the source code.
- -fnesc-deputy
- Compile with the deputy compiler.
- -fnesc-no-deputy
- Do not use the deputy compiler. This is the default.
- -fnesc-default-safe
- Make modules default to having the @safe() attribute. Has no effect
if -fnesc-deputy is not set.
- -fnesc-default-unsafe
- Make modules default to having the @unsafe() attribute. Has no
effect if -fnesc-deputy is not set.
There are a number of warnings specific to nesC, specified with
-Wnesc- (all these warnings are off by default):
- -Wnesc-fnptr
- Warn when function pointers are used (use of function pointers is
deprecated in nesC and leads to inaccurate data race detection).
- -Wnesc-async
- Warn when interrupt handlers call commands or events not annotated with
async.
- -Wnesc-data-race
- Warn about potential data races.
- -Wnesc-combine
- Warn when configuration wiring leads to "fan-out" and the
function return type does not have a combining function defined.
- -Wnesc-docstring
- Warn when unexpected documentation strings (starting with /**) are
seen.
- -Wnesc-implicit-conn
- Warn when implicit connections between components are used.
- -Wnesc-all
- Turns on -Wnesc-fnptr, -Wnesc-async, -Wnesc-combine
and-Wnesc-data-race.
- -Wnesc-error
- Turns the -Wnesc-fnptr, -Wnesc-async, -Wnesc-combine
and -Wnesc-data-race warnings into errors.
When compiling a nesC component, the nesC compiler recognizes the
gcc C language (-f...) and warning (-W...) options. The
-S, -c and -o options work as usual, the -x
option accepts nesc. The -v option causes the nesC compiler to
print out the paths of all components and interfaces that are loaded.
Directories can be added to nesCs search path with -I.
If you wish to compile a component Bar.nc to a C file, you can
do:
- nescc -c -o /dev/null -fnesc-cfile=Bar.c Bar.nc
nescc defines the following preprocessor symbol:
- NESC (since
v1.1)
- set to XYZ where x.yz is the nesC version
- NESCPATH
- A colon separated list of additional search directories for nesC
components.
The warnings for the new nesC 1.1 features (see -Wnesc-all)
are off by default to increase compatibility with nesC 1.0 code. To match
the language specification in the nesC 1.1 reference manual, you should
compile with -Wnesc-all and -Wnesc-error. These options will
become the default in future releases.