Todo
revise and update links
Development Environments¶
Linux + GNU make
+ GCC/binutils for Linux¶
The is the most natural development environment for NuttX. Any version of the GCC/binutils toolchain may be used. There is a highly modified buildroot available for download from the NuttX Bitbucket.org page. This download may be used to build a NuttX-compatible ELF toolchain under Linux or Cygwin. That toolchain will support ARM, m68k, m68hc11, m68hc12, and SuperH ports. The buildroot GIT may be accessed in the NuttX buildroot GIT.
Linux + GNU make
+ SDCC for Linux¶
Also very usable is the Linux environment using the SDCC compiler. The SDCC compiler provides support for the 8051/2, z80, hc08, and other microcontrollers. The SDCC-based logic is less well exercised and you will likely find some compilation issues if you use parts of NuttX with SDCC that have not been well-tested.
Windows with Cygwin + GNU make
+ GCC/binutils (custom built under Cygwin)¶
This combination works well too. It works just as well as the native Linux environment except that compilation and build times are a little longer. The custom NuttX buildroot referenced above may be build in the Cygwin environment as well.
Windows with Cygwin + GNU make
+ SDCC (custom built under Cygwin)¶
I have never tried this combination, but it would probably work just fine.
Windows with Cygwin + GNU make
+ Windows Native Toolchain¶
This is a tougher environment. In this case, the Windows native toolchain is unaware of the Cygwin sandbox and, instead, operates in the native Windows environment. The primary difficulties with this are:
Paths. Full paths for the native toolchain must follow Windows standards. For example, the path
/home/my\ name/nuttx/include
my have to be converted to something like'C:\cygwin\home\my name\nuttx\include'
to be usable by the toolchain.Symbolic Links NuttX depends on symbolic links to install platform-specific directories in the build system. On Linux, true symbolic links are used. On Cygwin, emulated symbolic links are used. Unfortunately, for native Windows applications that operate outside of the Cygwin sandbox, these symbolic links cannot be used.
Dependencies NuttX uses the GCC compiler’s
-M
option to generate make dependencies. These dependencies are retained in files calledMake.deps
throughout the system. For compilers other than GCC, there is no support for making dependencies in this way.
Supported Windows Native Toolchains. At present, the following Windows native toolchains are in use:
GCC built for Windows (such as CodeSourcery, Atollic, devkitARM, etc.),
SDCC built for Windows,
the ZiLOG XDS-II toolchain for Z16F, z8Encore, and eZ80Acclaim parts.
Windows Native (CMD.exe
) + GNUWin32 (including GNU make
) + MinGW Host GCC compiler + Windows Native Toolchain¶
Build support has been added to support building natively in a Windows console rather than in a POSIX-like environment.
This build:
Uses all Windows style paths
Uses primarily Windows batch commands from cmd.exe, with
A few extensions from GNUWin32
This capability first appeared in NuttX-6.24 and should still be
considered a work in progress because: (1) it has not been verfied on
all targets and tools, and (2) still lacks some of the creature-comforts
of the more mature environments. The windows native build logic
initiated if CONFIG_WINDOWS_NATIVE=y
is defined in the NuttX
configuration file:
At present, this build environment also requires:
Windows Console. The build must be performed in a Windows console
window. This may be using the standard CMD.exe
terminal that comes
with Windows. I prefer the ConEmu terminal which can be downloaded from:
http://code.google.com/p/conemu-maximus5/
GNUWin32. The build still relies on some Unix-like commands. I
usethe GNUWin32 tools that can be downloaded from
http://gnuwin32.sourceforge.net/. See the top-level nuttx/README.txt
file for some download, build, and installation notes.
MinGW-GCC. MinGW-GCC is used to compiler the C tools in the
nuttx/tools
directory that are needed by the build. MinGW-GCC can be
downloaded from http://www.mingw.org/. If you are using GNUWin32, then
it is recommended that you not install the optional MSYS components as
there may be conflicts.
Wine + GNU make
+ Windows Native Toolchain¶
I’ve never tried this one, but I off the following reported by an ez80 user using the ZiLOG ZDS-II Windows-native toolchain:
“I’ve installed ZDS-II 5.1.1 (IDE for ez80-based boards) on wine (windows emulator for UNIX) and to my surprise, not many changes were needed to make GIT snapshot of NuttX buildable… I’ve tried nsh profile and build process completed successfully. One remark is necessary: NuttX makefiles for ez80 are referencing
cygpath
utility. Wine provides similar thing calledwinepath
which is compatible and offers compatible syntax. To use that,winepath
(which itself is a shell script) has to be copied ascygpath
somewhere in$PATH
, and edited as in following patch:“Better solution would be replacing all
cygpath
references inMakefiles
with$(CONVPATH)
(or${CONVPATH}
in shell scripts) and settingCONVPATH
tocygpath
orwinepath
regarding to currently used environment.
Other Environments¶
Environment Dependencies. The primary environmental dependency of NuttX are (1) GNU make, (2) bash scripting, and (3) Linux utilities (such as cat, sed, etc.). If you have other platforms that support GNU make or make utilities that are compatible with GNU make, then it is very likely that NuttX would work in that environment as well (with some porting effort). If GNU make is not supported, then some significant modification of the Make system would be required.
MSYS. I have not used MSYS but what I gather from talking with NuttX users is that MSYS can be used as an alternative to Cygwin in any of the above Cygwin environments. This is not surprising since MSYS is based on an older version of Cygwin (cygwin-1.3). MSYS has been modified, however, to interoperate in the Windows environment better than Cygwin and that may be of value to some users.
MSYS, however, cannot be used with the native Windows NuttX build
because it will invoke the MSYS bash shell instead of the CMD.exe
shell. Use GNUWin32 in the native Windows build environment.