summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-06-29 09:39:01 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-06-29 09:39:01 -0600
commit2896baa86fe813fddfe8ce77a8247872f40515c6 (patch)
treea180ce7bcfa8556ed4ee9388573fa79686e57e6b
parent1318d4e429be4e445b532798269e5485444b621c (diff)
downloadpx4-nuttx-2896baa86fe813fddfe8ce77a8247872f40515c6.tar.gz
px4-nuttx-2896baa86fe813fddfe8ce77a8247872f40515c6.tar.bz2
px4-nuttx-2896baa86fe813fddfe8ce77a8247872f40515c6.zip
Changes to get a clean compile of configs/sam3u-ek/nxwm
-rw-r--r--nuttx/configs/sam3u-ek/README.txt63
-rw-r--r--nuttx/configs/sam3u-ek/knsh/Make.defs2
-rw-r--r--nuttx/configs/sam3u-ek/nsh/Make.defs2
-rw-r--r--nuttx/configs/sam3u-ek/nx/Make.defs2
-rw-r--r--nuttx/configs/sam3u-ek/nxwm/Make.defs2
-rw-r--r--nuttx/configs/sam3u-ek/ostest/Make.defs2
-rwxr-xr-xnuttx/configs/sam3u-ek/scripts/ld.script33
-rw-r--r--nuttx/configs/sam3u-ek/src/Makefile4
-rw-r--r--nuttx/configs/sam3u-ek/src/up_cxxinitialize.c149
9 files changed, 219 insertions, 40 deletions
diff --git a/nuttx/configs/sam3u-ek/README.txt b/nuttx/configs/sam3u-ek/README.txt
index d49b2a645..55f269d0f 100644
--- a/nuttx/configs/sam3u-ek/README.txt
+++ b/nuttx/configs/sam3u-ek/README.txt
@@ -400,6 +400,8 @@ SAM3U-EK-specific Configuration Options
Configurations
^^^^^^^^^^^^^^
+ Information Common to All Configurations
+ ----------------------------------------
Each SAM3U-EK configuration is maintained in a sub-directory and
can be selected as follow:
@@ -457,6 +459,9 @@ Configurations
System Type -> Toolchain:
CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW=y : General GCC EABI toolchain under windows
+ Library Routines ->
+ CONFIG_CXX_NEWLONG=n : size_t is an unsigned int, not long
+
This re-configuration should be done before making NuttX or else the
subsequent 'make' will fail. If you have already attempted building
NuttX then you will have to 1) 'make distclean' to remove the old
@@ -473,8 +478,8 @@ Configurations
See also the "NOTE about Windows native toolchains" in the section call
"GNU Toolchain Options" above.
-Configuration sub-directories
------------------------------
+ Configuration sub-directories
+ -----------------------------
knsh:
This is identical to the nsh configuration below except that NuttX
@@ -613,33 +618,37 @@ Configuration sub-directories
STATUS:
2013-6-28: The touchscreen is functional.
+ 2013-6-29: Hmmm... but there appear to be conditions when the
+ touchscreen driver locks up. Looks like some issue with
+ managing the interrupts.
nx:
Configures to use examples/nx using the HX834x LCD hardware on
the SAM3U-EK development board.
- nxwm
- ----
+ nxwm:
This is a special configuration setup for the NxWM window manager
UnitTest. The NxWM window manager can be found here:
- nuttx-code/NxWidgets/nxwm
+ nuttx-git/NxWidgets/nxwm
The NxWM unit test can be found at:
- nuttx-code/NxWidgets/UnitTests/nxwm
+ nuttx-git/NxWidgets/UnitTests/nxwm
Documentation for installing the NxWM unit test can be found here:
- nuttx-code/NxWidgets/UnitTests/README.txt
+ nuttx-git/NxWidgets/UnitTests/README.txt
- Here is the quick summary of the build steps (Assuming that all of
- the required packages are available in a directory ~/nuttx-code):
+ Here is the quick summary of the build steps. These steps assume that
+ you have the entire NuttX GIT in some directory ~/nuttx-git. You may
+ have these components installed elsewhere. In that case, you will need
+ to adjust all of the paths in the following accordingly:
1. Intall the nxwm configuration
- $ cd ~/nuttx-code/nuttx/tools
- $ ./configure.sh stm3240g-eval/nxwm
+ $ cd ~/nuttx-git/nuttx/tools
+ $ ./configure.sh sam3u-ek/nxwm
2. Make the build context (only)
@@ -648,34 +657,44 @@ Configuration sub-directories
$ make context
...
+ NOTE: the use of the setenv.sh file is optional. All that it will
+ do is to adjust your PATH variable so that the build system can find
+ your tools. If you use it, you will most likely need to modify the
+ script so that it has the correct path to your tool binaries
+ directory.
+
3. Install the nxwm unit test
- $ cd ~/nuttx-code/NxWidgets
- $ tools/install.sh ~/nuttx-code/apps nxwm
+ $ cd ~/nuttx-git/NxWidgets
+ $ tools/install.sh ~/nuttx-git/apps nxwm
Creating symbolic link
- - To ~/nuttx-code/NxWidgets/UnitTests/nxwm
- - At ~/nuttx-code/apps/external
+ - To ~/nuttx-git/NxWidgets/UnitTests/nxwm
+ - At ~/nuttx-git/apps/external
4. Build the NxWidgets library
- $ cd ~/nuttx-code/NxWidgets/libnxwidgets
- $ make TOPDIR=~/nuttx-code/nuttx
+ $ cd ~/nuttx-git/NxWidgets/libnxwidgets
+ $ make TOPDIR=~/nuttx-git/nuttx
...
5. Build the NxWM library
- $ cd ~/nuttx-code/NxWidgets/nxwm
- $ make TOPDIR=~/nuttx-code/nuttx
+ $ cd ~/nuttx-git/NxWidgets/nxwm
+ $ make TOPDIR=~/nuttx-git/nuttx
...
6. Built NuttX with the installed unit test as the application
- $ cd ~/nuttx-code/nuttx
+ $ cd ~/nuttx-git/nuttx
$ make
STATUS:
- 2013-6-28: Created the configuration but have not yet done
- anything with it.
+
+ 1. 2013-6-28: Created the configuration but have not yet done
+ anything with it.
+
+ 2. 2013-6-29: Various changes to get a clean build of this
+ configuration. Still untested.
ostest:
This configuration directory, performs a simple OS test using
diff --git a/nuttx/configs/sam3u-ek/knsh/Make.defs b/nuttx/configs/sam3u-ek/knsh/Make.defs
index 9b06e7ec6..096190293 100644
--- a/nuttx/configs/sam3u-ek/knsh/Make.defs
+++ b/nuttx/configs/sam3u-ek/knsh/Make.defs
@@ -75,7 +75,7 @@ else
endif
ARCHCFLAGS = -fno-builtin
-ARCHCXXFLAGS = -fno-builtin -fno-exceptions
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
diff --git a/nuttx/configs/sam3u-ek/nsh/Make.defs b/nuttx/configs/sam3u-ek/nsh/Make.defs
index 24f57c201..ddb70242e 100644
--- a/nuttx/configs/sam3u-ek/nsh/Make.defs
+++ b/nuttx/configs/sam3u-ek/nsh/Make.defs
@@ -73,7 +73,7 @@ else
endif
ARCHCFLAGS = -fno-builtin
-ARCHCXXFLAGS = -fno-builtin -fno-exceptions
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
diff --git a/nuttx/configs/sam3u-ek/nx/Make.defs b/nuttx/configs/sam3u-ek/nx/Make.defs
index 71f8506ae..5496c69e8 100644
--- a/nuttx/configs/sam3u-ek/nx/Make.defs
+++ b/nuttx/configs/sam3u-ek/nx/Make.defs
@@ -73,7 +73,7 @@ else
endif
ARCHCFLAGS = -fno-builtin
-ARCHCXXFLAGS = -fno-builtin -fno-exceptions
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
diff --git a/nuttx/configs/sam3u-ek/nxwm/Make.defs b/nuttx/configs/sam3u-ek/nxwm/Make.defs
index 7f471fd59..d7c537143 100644
--- a/nuttx/configs/sam3u-ek/nxwm/Make.defs
+++ b/nuttx/configs/sam3u-ek/nxwm/Make.defs
@@ -73,7 +73,7 @@ else
endif
ARCHCFLAGS = -fno-builtin
-ARCHCXXFLAGS = -fno-builtin -fno-exceptions
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
diff --git a/nuttx/configs/sam3u-ek/ostest/Make.defs b/nuttx/configs/sam3u-ek/ostest/Make.defs
index cc61f116d..128b1c474 100644
--- a/nuttx/configs/sam3u-ek/ostest/Make.defs
+++ b/nuttx/configs/sam3u-ek/ostest/Make.defs
@@ -73,7 +73,7 @@ else
endif
ARCHCFLAGS = -fno-builtin
-ARCHCXXFLAGS = -fno-builtin -fno-exceptions
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow
ARCHWARNINGSXX = -Wall -Wshadow
ARCHDEFINES =
diff --git a/nuttx/configs/sam3u-ek/scripts/ld.script b/nuttx/configs/sam3u-ek/scripts/ld.script
index 0deb1b15e..55915357d 100755
--- a/nuttx/configs/sam3u-ek/scripts/ld.script
+++ b/nuttx/configs/sam3u-ek/scripts/ld.script
@@ -68,7 +68,23 @@ SECTIONS
_etext = ABSOLUTE(.);
} > flash
- _eronly = ABSOLUTE(.); /* See below */
+ .init_section : {
+ _sinit = ABSOLUTE(.);
+ *(.init_array .init_array.*)
+ _einit = ABSOLUTE(.);
+ } > flash
+
+ .ARM.extab : {
+ *(.ARM.extab*)
+ } > flash
+
+ __exidx_start = ABSOLUTE(.);
+ .ARM.exidx : {
+ *(.ARM.exidx*)
+ } > flash
+ __exidx_end = ABSOLUTE(.);
+
+ _eronly = ABSOLUTE(.);
.data : {
_sdata = ABSOLUTE(.);
@@ -78,24 +94,15 @@ SECTIONS
_edata = ABSOLUTE(.);
} > sram1 AT > flash
- .ARM.extab : {
- *(.ARM.extab*)
- } >sram1
-
- .ARM.exidx : {
- __exidx_start = ABSOLUTE(.);
- *(.ARM.exidx*)
- __exidx_end = ABSOLUTE(.);
- } >sram1
-
- .bss : { /* BSS */
+ .bss : {
_sbss = ABSOLUTE(.);
*(.bss .bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
_ebss = ABSOLUTE(.);
} > sram1
- /* Stabs debugging sections. */
+
+ /* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
diff --git a/nuttx/configs/sam3u-ek/src/Makefile b/nuttx/configs/sam3u-ek/src/Makefile
index 788a50620..9cd708d7d 100644
--- a/nuttx/configs/sam3u-ek/src/Makefile
+++ b/nuttx/configs/sam3u-ek/src/Makefile
@@ -42,6 +42,10 @@ AOBJS = $(ASRCS:.S=$(OBJEXT))
CSRCS = up_boot.c up_leds.c up_buttons.c up_spi.c up_usbdev.c
+ifeq ($(CONFIG_HAVE_CXXINITIALIZE),y)
+CSRCS += up_cxxinitialize.c
+endif
+
ifeq ($(CONFIG_LCD),y)
CSRCS += up_lcd.c
endif
diff --git a/nuttx/configs/sam3u-ek/src/up_cxxinitialize.c b/nuttx/configs/sam3u-ek/src/up_cxxinitialize.c
new file mode 100644
index 000000000..6b4e255f2
--- /dev/null
+++ b/nuttx/configs/sam3u-ek/src/up_cxxinitialize.c
@@ -0,0 +1,149 @@
+/************************************************************************************
+ * configs/sam3u-ek/src/up_cxxinitialize.c
+ *
+ * Copyright (C) 2013 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * 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.
+ *
+ ************************************************************************************/
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <debug.h>
+
+#if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE)
+
+/************************************************************************************
+ * Definitions
+ ************************************************************************************/
+/* Debug ****************************************************************************/
+/* Non-standard debug that may be enabled just for testing the static constructors */
+
+#ifndef CONFIG_DEBUG
+# undef CONFIG_DEBUG_CXX
+#endif
+
+#ifdef CONFIG_DEBUG_CXX
+# define cxxdbg dbg
+# define cxxlldbg lldbg
+# ifdef CONFIG_DEBUG_VERBOSE
+# define cxxvdbg vdbg
+# define cxxllvdbg llvdbg
+# else
+# define cxxvdbg(x...)
+# define cxxllvdbg(x...)
+# endif
+#else
+# define cxxdbg(x...)
+# define cxxlldbg(x...)
+# define cxxvdbg(x...)
+# define cxxllvdbg(x...)
+#endif
+
+/************************************************************************************
+ * Private Types
+ ************************************************************************************/
+/* This type defines one entry in initialization array */
+
+typedef void (*initializer_t)(void);
+
+/************************************************************************************
+ * External references
+ ************************************************************************************/
+/* _sinit and _einit are symbols exported by the linker script that mark the
+ * beginning and the end of the C++ initialization section.
+ */
+
+extern initializer_t _sinit;
+extern initializer_t _einit;
+
+/* _stext and _etext are symbols exported by the linker script that mark the
+ * beginning and the end of text.
+ */
+
+extern uint32_t _stext;
+extern uint32_t _etext;
+
+/************************************************************************************
+ * Private Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/****************************************************************************
+ * Name: up_cxxinitialize
+ *
+ * Description:
+ * If C++ and C++ static constructors are supported, then this function
+ * must be provided by board-specific logic in order to perform
+ * initialization of the static C++ class instances.
+ *
+ * This function should then be called in the application-specific
+ * user_start logic in order to perform the C++ initialization. NOTE
+ * that no component of the core NuttX RTOS logic is involved; This
+ * function defintion only provides the 'contract' between application
+ * specific C++ code and platform-specific toolchain support
+ *
+ ***************************************************************************/
+
+void up_cxxinitialize(void)
+{
+ initializer_t *initp;
+
+ cxxdbg("_sinit: %p _einit: %p _stext: %p _etext: %p\n",
+ &_sinit, &_einit, &_stext, &_etext);
+
+ /* Visit each entry in the initialzation table */
+
+ for (initp = &_sinit; initp != &_einit; initp++)
+ {
+ initializer_t initializer = *initp;
+ cxxdbg("initp: %p initializer: %p\n", initp, initializer);
+
+ /* Make sure that the address is non-NULL and lies in the text region
+ * defined by the linker script. Some toolchains may put NULL values
+ * or counts in the initialization table
+ */
+
+ if ((void*)initializer > (void*)&_stext && (void*)initializer < (void*)&_etext)
+ {
+ cxxdbg("Calling %p\n", initializer);
+ initializer();
+ }
+ }
+}
+
+#endif /* CONFIG_HAVE_CXX && CONFIG_HAVE_CXXINITIALIZE */