summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nuttx/ChangeLog1
-rw-r--r--nuttx/Documentation/NuttX.html211
-rw-r--r--nuttx/Makefile75
-rw-r--r--nuttx/configs/z16f2800100zcog/Make.defs5
-rwxr-xr-xnuttx/tools/link.sh84
-rwxr-xr-xnuttx/tools/unlink.sh70
-rwxr-xr-xnuttx/tools/winlink.sh97
7 files changed, 479 insertions, 64 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 8ba9463ed..36de29e4d 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -303,4 +303,5 @@
* Add support toolchains that do not support making of dependencies
* Fix Cygwin build with spaces in directory names
* Name make system changes to deal with non-GNU toolchains (i.e., Zilog)
+ * Add support for Windows native toolchains that cannot follow Cygwin soft links
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 52ed3cfa9..69d7d4c25 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: January 7, 2008</p>
+ <p>Last Updated: January 8, 2008</p>
</td>
</tr>
</table>
@@ -27,39 +27,76 @@
<table>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#overview">Overview</a></td>
+ <td>
+ <a href="#overview">Overview</a>.<br>
+ What is NuttX?
+ </td>
+</tr>
+<tr>
+ <td><img src="favicon.ico"></td>
+ <td>
+ <a href="#downloads">Downloads</a>.<br>
+ Where can I get NuttX? What is the current development status?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#downloads">Downloads</a></td>
+ <td>
+ <a href="#platforms">Supported Platforms</a>.<br>
+ What target platforms has NuttX been ported to?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#platforms">Supported Platforms</a></td>
+ <td>
+ <a href="#environments">Development Environments</a>.<br>
+ What kinds of host cross-development platforms can be used with NuttX?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#footprint">Memory Footprint</a></td>
+ <td>
+ <a href="#footprint">Memory Footprint</a>.<br>
+ Just how big is it? Do I have enough memory to use NuttX?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#licensing">Licensing</a></td>
+ <td>
+ <a href="#licensing">Licensing</a>.<br>
+ Are there any licensing restrictions for the use of NuttX? (Almost none)
+ Will there be problems if I link my proprietary code with NuttX? (No)
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#history">Release History</a></td>
+ <td>
+ <a href="#history">Release History</a><br>
+ What has changed in the last release of NuttX?
+ What unreleased changes are pending in CVS?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#TODO">Bugs, Issues, <i>Things-To-Do</i></a></td>
+ <td>
+ <a href="#TODO">Bugs, Issues, <i>Things-To-Do</i></a>.<br>
+ Software is never finished nor ever tested well enough.
+ (Do you want to help devlop NuttX? If so, send me an email).
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#documentation">Other Documentation</a></td>
+ <td>
+ <a href="#documentation">Other Documentation</a>.<br>
+ What other NuttX documentation is available?
+ </td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
- <td><a href="#trademarks">Trademarks</a></td>
+ <td>
+ <a href="#trademarks">Trademarks</a>.<br>
+ Some of the words used in this document belong to other people.
+ </td>
</tr>
</table>
</td>
@@ -646,6 +683,159 @@ Linux or Cygwin.</blockquote>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
+ <a name="environments"><h1>Development Environments</h1></a>
+ </td>
+ </tr>
+</table>
+
+<center><table width="90%">
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Linux + GNU make + GCC/binutils</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ The is the most natural development environment for NuttX.
+ Any version of the GCC/binutils toolchain may be used.
+ There is a highly modified <a href="http://buildroot.uclibc.org/">buildroot</a>
+ available for download from the
+ <a href="http://sourceforge.net/project/showfiles.php?group_id=189573">NuttX SourceForge</a>
+ page.
+ This download may be used to build a NuttX-compatible arm-elf toolchain under Linux or Cygwin.
+ Additional support for m68k, m68hc11, and m68hc12 is available in the
+ <a href="http://nuttx.cvs.sourceforge.net/nuttx/misc/buildroot/">NuttX CVS</a>.
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Linux + GNU make + SDCC</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ Also very usable is the Linux environment using the
+ <a href="http://sdcc.sourceforge.net/">SDCC</a> 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.
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Cygwin + GNU make + GCC/binutils</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ 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.
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Cygwin + GNU make + SDCC</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ I have never tried this combination, but it would probably work just fine.
+ </p>
+ </td>
+</tr>
+
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Cygwin + GNU make + Windows Native Toolchain</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ This is a tougher environment.
+ In this case, the Windows native toolchain is unaware of the the
+ Cygwin <i>sandbox</i> and, instead, operates in the native Windows environment.
+ The primary difficulties with this are:
+ </p>
+ <ul>
+ <li>
+ <b>Pathes</b>.
+ Full pathes for the native toolchain must follow Windows standards.
+ For example, the path <code>/home/my\ name/nuttx/include</code> my have to be
+ converted to something like <code>'C:\cygwin\home\my name\nuttx\include'</code>
+ to be usable by the toolchain.
+ </li>
+ <p>
+ Fortunately, this conversion is done simply using the <code>cygpath</code> utility.
+ </p>
+ <li>
+ <b>Symbolic Links</b>
+ 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 <i>sandbox</i>, these symbolic links cannot be used.
+ </li>
+ <p>
+ The NuttX make system works around this limitation by copying the platform
+ specific directories in place.
+ These copied directories make work a little more complex, but otherwise work well.
+ </p>
+ </ul>
+ <p>
+ At present, on the Zilog Z16F port uses a native Windows toolchain
+ (the Zilog ZDS-II toolchain).
+ </p.
+ </td>
+</tr>
+
+<tr>
+ <td valign="top"><img src="favicon.ico"></td>
+ <td bgcolor="#5eaee1">
+ <b>Others?</b>
+ </td>
+</tr>
+<tr>
+ <td><br></td>
+ <td>
+ <p>
+ The primary environmental dependency of NuttX is GNU make.
+ 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.
+ If GNU make is not supported, then some significant modification
+ of the Make system would be required.
+ </p>
+ </td>
+</tr>
+</table></center>
+
+<table width ="100%">
+ <tr bgcolor="#e4e4e4">
+ <td>
<a name="footprint"><h1>Memory Footprint</h1></a>
</td>
</tr>
@@ -790,6 +980,7 @@ Other memory:
* Add support toolchains that do not support making of dependencies
* Fix Cygwin build with spaces in directory names
* Name make system changes to deal with non-GNU toolchains (i.e., Zilog)
+ * Add support for Windows native toolchains that cannot follow Cygwin soft links
</pre></ul>
<table width ="100%">
diff --git a/nuttx/Makefile b/nuttx/Makefile
index 7ee658c64..4a7e17aba 100644
--- a/nuttx/Makefile
+++ b/nuttx/Makefile
@@ -37,6 +37,13 @@ TOPDIR := ${shell pwd | sed -e 's/ /\\ /g'}
-include ${TOPDIR}/.config
-include ${TOPDIR}/Make.defs
+# Default tools
+
+ifeq ($(DIRLINK),)
+DIRLINK = $(TOPDIR)/tools/link.sh
+DIRUNLINK = $(TOPDIR)/tools/unlink.sh
+endif
+
# Process architecture and board-specific directories
ARCH_DIR = arch/$(CONFIG_ARCH)
@@ -121,79 +128,39 @@ include/nuttx/config.h: $(TOPDIR)/.config tools/mkconfig
# link the arch/<arch-name>/include dir to include/arch
include/arch: Make.defs
- @if [ -h include/arch ]; then \
- rm -f include/arch ; \
- else \
- if [ -e include/arch ]; then \
- echo "include/arch exists but is not a symbolic link" ; \
- exit 1 ; \
- fi ; \
- fi
- @ln -s $(TOPDIR)/$(ARCH_DIR)/include include/arch
+ @$(DIRLINK) $(TOPDIR)/$(ARCH_DIR)/include include/arch
# Link the configs/<board-name>/include dir to include/arch/board
-include/arch/board: Make.defs include/arch
- @if [ -h include/arch/board ]; then \
- rm -f include/arch/board ; \
- else \
- if [ -e include/arch/board ]; then \
- echo "include/arch/board exists but is not a symbolic link" ; \
- exit 1 ; \
- fi ; \
- fi
- @ln -s $(TOPDIR)/$(BOARD_DIR)/include include/arch/board
+include/arch/board: include/arch Make.defs include/arch
+ @$(DIRLINK) $(TOPDIR)/$(BOARD_DIR)/include include/arch/board
# Link the configs/<board-name>/src dir to arch/<arch-name>/src/board
$(ARCH_SRC)/board: Make.defs
- @if [ -h $(ARCH_SRC)/board ]; then \
- rm -f $(ARCH_SRC)/board ; \
- else \
- if [ -e $(ARCH_SRC)/board ]; then \
- echo "$(ARCH_SRC)/board exists but is not a symbolic link" ; \
- exit 1 ; \
- fi ; \
- fi
- @ln -s $(TOPDIR)/$(BOARD_DIR)/src $(ARCH_SRC)/board
+ @$(DIRLINK) $(TOPDIR)/$(BOARD_DIR)/src $(ARCH_SRC)/board
# Link arch/<arch-name>/include/<chip-name> to arch/<arch-name>/include/chip
$(ARCH_SRC)/chip: Make.defs
ifneq ($(CONFIG_ARCH_CHIP),)
- @if [ -h $(ARCH_SRC)/chip ]; then \
- rm -f $(ARCH_SRC)/chip ; \
- else \
- if [ -e $(ARCH_SRC)/chip ]; then \
- echo "$(ARCH_SRC)/chip exists but is not a symbolic link" ; \
- exit 1 ; \
- fi ; \
- fi
- @ln -s $(CONFIG_ARCH_CHIP) $(ARCH_SRC)/chip
+ @$(DIRLINK) $(CONFIG_ARCH_CHIP) $(ARCH_SRC)/chip
endif
# Link arch/<arch-name>/src/<chip-name> to arch/<arch-name>/src/chip
-$(ARCH_INC)/chip: Make.defs
+include/arch/chip: include/arch Make.defs
ifneq ($(CONFIG_ARCH_CHIP),)
- @if [ -e $(ARCH_INC)/chip ]; then \
- if [ -h $(ARCH_INC)/chip ]; then \
- rm -f $(ARCH_INC)/chip ; \
- else \
- echo "$(ARCH_INC)/chip exists but is not a symbolic link" ; \
- exit 1 ; \
- fi ; \
- fi
- @ln -s $(CONFIG_ARCH_CHIP) $(ARCH_INC)/chip
+ @$(DIRLINK) $(CONFIG_ARCH_CHIP) include/arch/chip
endif
-dirlinks: include/arch include/arch/board $(ARCH_SRC)/board $(ARCH_SRC)/chip $(ARCH_INC)/chip
+dirlinks: include/arch include/arch/board include/arch/chip $(ARCH_SRC)/board $(ARCH_SRC)/chip
context: check_context include/nuttx/config.h dirlinks
clean_context:
- @rm -f include/nuttx/config.h include/arch
- @if [ -h include/arch ]; then rm -f include/arch ; fi
- @if [ -h $(ARCH_INC)/board ]; then rm -f $(ARCH_INC)/board ; fi
- @if [ -h $(ARCH_SRC)/board ]; then rm -f $(ARCH_SRC)/board ; fi
- @if [ -h $(ARCH_INC)/chip ]; then rm -f $(ARCH_INC)/chip ; fi
- @if [ -h $(ARCH_SRC)/chip ]; then rm -f $(ARCH_SRC)/chip ; fi
+ @rm -f include/nuttx/config.h
+ @$(DIRUNLINK) include/arch/board
+ @$(DIRUNLINK) include/arch/chip
+ @$(DIRUNLINK) include/arch
+ @$(DIRUNLINK) $(ARCH_SRC)/board
+ @$(DIRUNLINK) $(ARCH_SRC)/chip
check_context:
@if [ ! -e ${TOPDIR}/.config -o ! -e ${TOPDIR}/Make.defs ]; then \
diff --git a/nuttx/configs/z16f2800100zcog/Make.defs b/nuttx/configs/z16f2800100zcog/Make.defs
index e9f7342b7..ee7a692ce 100644
--- a/nuttx/configs/z16f2800100zcog/Make.defs
+++ b/nuttx/configs/z16f2800100zcog/Make.defs
@@ -129,6 +129,11 @@ endef
MKDEP = $(TOPDIR)/tools/mknulldeps.sh
+# ZNeo-II cannot follow Cygwin soft links, so we will have to use directory copies
+
+DIRLINK = $(TOPDIR)/tools/winlink.sh
+DIRUNLINK = $(TOPDIR)/tools/unlink.sh
+
# Linux/Cygwin host tool definitions
HOSTCC = gcc
diff --git a/nuttx/tools/link.sh b/nuttx/tools/link.sh
new file mode 100755
index 000000000..5c9576294
--- /dev/null
+++ b/nuttx/tools/link.sh
@@ -0,0 +1,84 @@
+#!/bin/sh
+############################################################################
+# tools/link.sh
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+src=$1
+dest=$2
+
+# Verify that arguments were provided
+
+if [ -z "${src}" -o -z "${dest}" ]; then
+ echo "Missing src and/or dest arguments"
+ exit 1
+fi
+
+# Check if something already exists at the destination path
+
+if [ -e "${dest}" ]; then
+
+ # Yes, is it a symbolic link? If so, then remove it so that we can
+ # replace it with the new link (which might be different)
+
+ if [ -h "${dest}" ]; then
+ rm -f "${dest}"
+ else
+
+ # If the path is a directory and contains the "fake link" mark, then
+ # treat it like a soft link (i.e., remove the directory)
+
+ if [ -d "${dest}" -a -f "${dest}/.fakelnk" ]; then
+ rm -rf "${dest}"
+ else
+
+ # It is something else (like a file) or directory that does
+ # not contain the "fake link" mark
+
+ echo "${dest} already exists but is not a symbolic link"
+ exit 1
+ fi
+ fi
+fi
+
+# Verify that a directory exists at the source path
+
+if [ ! -d ${src} ]; then
+ echo "No directory at ${src}"
+ exit 1
+fi
+
+# Create the soft link
+
+ln -s "${src}" "${dest}" || \
+ { echo "Failed to create link: $dest" ; exit 1 ; } \ No newline at end of file
diff --git a/nuttx/tools/unlink.sh b/nuttx/tools/unlink.sh
new file mode 100755
index 000000000..ebd21d512
--- /dev/null
+++ b/nuttx/tools/unlink.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+############################################################################
+# tools/unlink.sh
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+link=$1
+
+# Verify that arguments were provided
+
+if [ -z "${link}" ]; then
+ echo "Missing link argument"
+ exit 1
+fi
+
+# Check if something already exists at the link path
+
+if [ -e "${link}" ]; then
+
+ # Yes, is it a symbolic link? If so, then remove it
+
+ if [ -h "${link}" ]; then
+ rm -f "${link}"
+ else
+
+ # If the path is a directory and contains the "fake link" mark, then
+ # treat it like a soft link (i.e., remove the directory)
+
+ if [ -d "${link}" -a -f "${link}/.fakelnk" ]; then
+ rm -rf "${link}"
+ else
+
+ # It is something else (like a file) or directory that does
+ # not contain the "fake link" mark
+
+ echo "${link} already exists but is not a symbolic link"
+ exit 1
+ fi
+ fi
+fi \ No newline at end of file
diff --git a/nuttx/tools/winlink.sh b/nuttx/tools/winlink.sh
new file mode 100755
index 000000000..c98efa47d
--- /dev/null
+++ b/nuttx/tools/winlink.sh
@@ -0,0 +1,97 @@
+#!/bin/sh
+############################################################################
+# tools/winlink.sh
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+#
+# NuttX uses symbolic links to configure platform-specific directories into
+# the build system. This works great except for when a Windows native
+# toolchain is used in a Cygwin environment. In that case, symbolic
+# links do not work correctly when accessed from the Windows native toolchain;
+# rather, just look link files with the extension .lnk
+#
+# In this environment, the build system will work around this using this script
+# as a replacement for the 'ln' command. This scrpt will simply copy the
+# directory into the expected positiion.
+#
+
+src=$1
+dest=$2
+
+# Verify that arguments were provided
+
+if [ -z "${src}" -o -z "${dest}" ]; then
+ echo "Missing src and/or dest arguments"
+ exit 1
+fi
+
+# Check if something already exists at the destination path
+
+if [ -e "${dest}" ]; then
+
+ # Yes, is it a symbolic link? If so, then remove it so that we can
+ # replace it with the new directory copy
+
+ if [ -h "${dest}" ]; then
+ rm -f "${dest}"
+ else
+
+ # If the path is a directory and contains the "fake link" mark, then
+ # remove the directory so that we can replace it with a new copy
+
+ if [ -d "${dest}" -a -f "${dest}/.fakelnk" ]; then
+ rm -rf "${dest}"
+ else
+
+ # It is something else (like a file) or directory that does
+ # not contain the "fake link" mark
+
+ echo "${dest} already exists but is not a symbolic link"
+ exit 1
+ fi
+ fi
+fi
+
+# Verify that a directory exists at the source path
+
+if [ ! -d ${src} ]; then
+ echo "No directory at ${src}"
+ exit 1
+fi
+
+# Copy the directory
+
+cp -a "${src}" "${dest}" || \
+ { echo "Failed to create link: $dest" ; rm -rf ${dest} ; exit 1 ; }
+touch "${dest}/.fakelnk" || \
+ { echo "Failed to touch ${dest}/.fakelnk" ; rm -rf ${dest} ; exit 1 ; } \ No newline at end of file