Commit Graph

36 Commits

Author SHA1 Message Date
David Sidrane d6098c8226 Adding Nuttx Build infrastructure 2016-12-21 08:34:20 +01:00
Carlo Wood 6fc30c76a6 Clean up of app.h
app.h, generated from app.h_in, has unnecessary code duplication
and isn't a header file (it defines globals, static functions
and doesn't have a header guard, moreover, it has a 'using namespace
std;'). Because of this, a real headerfile that declares the stuff
defined in apps.h was missing leading to even more code duplication:
scattered forward declarations in .cpp files and an often repeated
type of std::map<std::string, px4_main_t>.

This patch moves cmake/qurt/apps.h_in to src/platforms/apps.cpp.in
(with some changes) and removes cmake/posix/apps.h_in.
Then src/platforms/apps.cpp.in is split into src/platforms/apps.cpp.in
and src/platforms/apps.h.in, splitting declarations from definitions.

A typedef is defined for the map (apps_map_type).

The main difference between cmake/posix/apps.h_in and
cmake/qurt/apps.h_in was that the first defined a global 'apps',
while qurt stores the apps in QShell. I opted to get rid of
the global variable (which are in general evil for various reasons)
and used the API of cmake/qurt/apps.h_in where a provided 'apps'
map is initialized with a call to init_app_map. Thus removing
the existing code duplication.
2016-10-22 08:31:14 +02:00
Julian Oes 75657dc2eb cmake: add __DF_ defines with comments 2016-10-18 08:07:14 +02:00
Carlo Wood c6a2641507 Fix some pthread related linker stuff. (#5504)
The px4_os_add_flags defined in cmake/posix/px4_impl_posix.cmake did
add (threading) libraries to added_exe_linker_flags, which subsequently
end up in CMAKE_EXE_LINKER_FLAGS and then have no effect because those
flags are passed to the linker before any of the object files and static
libraries.

Those libraries are already added correctly in the corresponding
src/firmware/*/CMakeLists.txt files (for qurt, nuttx AND posix).

I left in the non-library linker flag '-pthread' for the bebop board,
although it seems very weird to me that this is needed (is it?).
If that is needed then it seems weird to link manually (that is,
src/firmware/*/CMakeLists.txt) with -lpthread.

For linux/g++ -pthread is added to the CXXFLAGS as it should be:
this causes the compiler to define _REENTRANT which is needed
for (the interface of) certain libraries to become thread-safe.
Offically one also can just pass -pthread to the linker, which then
causes the right libraries to be linked, but just linking with
-lpthread -lm -lrt works too.

I ran into this while adding support for libcwd, which explicitly
complains that _REENTRANT isn't defined when trying to link with
the thread-safe version of libcwd (-lcwd_r) and then tells you
to use -pthread.
2016-09-26 22:53:41 +02:00
Carlo Wood 77d356d275 Target specific optimization control.
This allows one to set a semi-colon separated list of regular
expressions in the environment variable PX4_NO_OPTIMIZATION
to control which (cmake generated) targets should be compiled
without optimization.

Suppressing optimization can be necessary for debugging in
a debugger, especially when trying to step through the code
or needing to print variables that otherwise are optimized out.

EXAMPLE

export PX4_NO_OPTIMIZATION="px4;^modules__uORB;^modules__systemlib$"

will result in the following messages during cmake configuration:

[...]
-- Disabling optimization for target 'platforms__posix__px4_layer'
because it matches the regexp 'px4' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__systemlib' because it
matches the regexp '^modules__systemlib$' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__uORB' because it matches
the regexp '^modules__uORB' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'examples__px4_simple_app' because
it matches the regexp 'px4' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__uORB__uORB_tests' because
it matches the regexp '^modules__uORB' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'px4' because it matches the regexp
'px4' in env var PX4_NO_OPTIMIZATION

Note that a list of all (currently used) target names can be printed
with the following command line from within the required build directory:

find . -wholename '*/CMakeFiles/*.dir/flags.make' | xargs dirname | xargs basename -a | sort -u | sed -e 's/.dir$//'
2016-09-13 16:31:08 +02:00
Carlo Wood 03d176d097 Bug fixes, typos, indentation.
Over time I made a few changes unrelated to what I'm really working on.
These changes are hereby committed first. The bug fixes are related to
what I'm doing in that I need them to be fixed for future commits.

Tools/sitl_run.sh: rename label to rcS_dir and fix usage help.
cmake/common/px4_base.cmake: Remove the check on OUT_UNPARSED_ARGUMENTS,
  and a few typos and indentation issues.
cmake/configs/posix_sitl_replay.cmake: Set the correct variable
  (config_sitl_rcS_dir) to the correct directory.
cmake/nuttx/px4_impl_nuttx.cmake: typos and indentation issues,
  and removal of a redundant FORCE (INTERNAL implies FORCE).
cmake/posix/px4_impl_posix.cmake: typos and indentation issues.
cmake/qurt/px4_impl_qurt.cmake: typos and indentation issues.
src/modules/mavlink/mavlink_ftp.cpp : possible strict-aliasing breakage.

NOTES

The second argument passed to sitl_run.sh is the value of
config_sitl_rcS_dir. This fact is missing from the usage help.
I renamed 'label' to 'rcS_dir' to better reflect this.
Also, for the 'replay' config the wrong variable was set causing
the call to sitl_run.sh to skip an argument and fail (ie the
debugger was passed as rcS_dir and so on).

The check on OUT_UNPARSED_ARGUMENTS in px4_parse_function_args
basically causes every passed IN variable to be REQUIRED and is
therefore a bug. The test for the presence of the REQUIRED arguments
follows directly after and is sufficient for this job. This bug went
unnoticed because currently every argument to OPTIONS, ONE_VALUE,
and MULTI_VALUE is actually passed to the function(s) calling
px4_parse_function_args (them being REQUIRED or not).

The changes in mavlink_ftp.cpp are to avoid a possible aliasing bug
and (mostly) to avoid the compiler warning/error: dereferencing type-
punned pointer will break strict-aliasing rules [-Werror=strict-aliasing].
2016-09-13 16:31:08 +02:00
James Goppert 818840b576 Path cleanup, low impact changes (#5340)
* Low impact changes from path_cleanup branch.

This is a step towards minimizing the diff with path_cleanup branch.

* Update ecl.

* Revert matrix update.

* Revert ecl and matrix.

* Update sitl gazebo.

* Revert sitl_gazebo and matrix changes.
2016-08-18 15:37:23 -04:00
Lorenz Meier 102f5b54d7 Revert "Improvements to SITL to make paths more flexible. (#5181)"
This reverts commit 699b6a2cb3.
2016-08-05 21:29:49 +02:00
James Goppert 699b6a2cb3 Improvements to SITL to make paths more flexible. (#5181) 2016-08-05 06:23:59 -04:00
Mark Charlebois 8cb8987bcd Use DriverFramework as a PX4 module (#4415)
* Use DriverFramework as a PX4 module

Targets wanting to use DriverFramework must add

   lib/DriverFramework/framework

to their config file.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>

* Removed spurious code

No need to add if check before for loop

Signed-off-by: Mark Charlebois <charlebm@gmail.com>

* Added DriverFramework to NuttX configs

Added lib/DriverFramework/firmware to nuttx configs

Signed-off-by: Mark Charlebois <charlebm@gmail.com>

* Updated src/lib/DriverFramework

* Removed DF_TARGET and __DF_${OS} defines

These are now handled inside DriverFramework

Signed-off-by: Mark Charlebois <charlebm@gmail.com>

* Updated DriverFramework

Signed-off-by: Mark Charlebois <charlebm@gmail.com>

* Restored __DF_${OS}

The include files in DriverFramwork need to know the target OS.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2016-05-03 10:03:28 +02:00
James Goppert 967e4dd127 Modified cmake to use STACK_MAX and STACK_MAIN 2016-04-14 13:36:36 -04:00
Mark Charlebois 801affd761 Added define for qurt build so the _skel library works
The _skel lib created for the qurt build was failaing because
the loader could not find the un-exported global symbol because
default visibility was set to hidden. The define is used to
explicitly export the QAIC function needed bu the loader.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2016-02-19 16:59:43 +01:00
Mark Charlebois 9f3bf8e9f4 Rebase changes on upstream master
This brings in many of the changes from the PX4 fork on ATLFLight.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2016-02-19 16:59:41 +01:00
Mark Charlebois f22c574b87 Integrated cmake_hexagon for qurt build
Still a WIP since the IDL file needs to be replace with the
muorb IDL file.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2016-01-10 20:54:26 +01:00
Mark Charlebois c4438bf50a Fix to move DriverFramework includes to common
Nuttx now gets to link phase. But there are two unresolved symbols:

arm-none-eabi/include/c++/4.7.4/bits/basic_string.h:1128: undefined reference to `std::string::assign(char const*, unsigned int)'
arm-none-eabi/include/c++/4.7.4/bits/stl_list.h:1534: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)'

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-11-19 09:35:18 -08:00
Mark Charlebois 52957ab0cc Don't add DriverFramework dir for NuttX
I am unable to get the nuttx build dependencies set up so that
it builds the export dir before it builds df_driver_framework.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-11-18 20:14:48 -08:00
Mark Charlebois 238db8c6d7 Moved IOCTL definitions to DevIOCTL.h in DriverFramework
Removed sched.h from platform/qurt since it is now in DSPAL.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-11-17 19:30:51 -08:00
Lorenz Meier a99390503a QuRT travis target: Make accessible via makefile 2015-10-27 09:30:22 +01:00
Mark Charlebois 938798f4db Removed qurt patch for Eigen and updated eigen commit
The patches for Hexagon support are in the eigen repo so
the patch can now be removed.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-10-20 08:48:11 +02:00
Mark Charlebois c28ae649a3 Fixes for parameters.xml dependencies
Moved definitions of parameters into *params.c in each module.
This is used by the cmake file as a pattern for dependencies when
generating the parameters.xml file.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-10-10 01:15:22 -07:00
Mark Charlebois c5e66e41f1 qurt: Must use latest version of Eigen
The latest version of Eigen is required to build with the Hexagon
7.4 toolchain. Only certain C++11 features are supported and the
latest version if Eigen provides these tests. A patch is required
to add support for the Hexagon compiler.

These changes force the sync and then update of eigen and allow it
to be patched for qurt.

The eigen-3.2 submodule was removed as it is no longer needed by the
qurt build with the updated toolchain.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-28 10:49:48 -07:00
Mark Charlebois 1abd61303f qurt: Added patch for Eigen to use latest version
Updated to 7.2 Hexagon toolchain

Fixed issuse with stack usage

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-24 15:16:00 -07:00
Mark Charlebois b09c8f3c9b cmake: Added dspal and eigen32 to top level CMakeLists.txt
Relying on inclusion of git_eigen32 and git_dspal targets to trigger
the submodule init and update

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-10 11:18:30 -07:00
Mark Charlebois 08dc74afac cmake: fixes for qurt build after refactoring
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-10 09:29:21 -07:00
James Goppert d0c89b8396 Attempted to fix qurt build, some cleanup of old module funcs. 2015-09-09 23:11:25 -04:00
James Goppert bf18c84652 Cleanup of module building. 2015-09-09 23:00:58 -04:00
Mark Charlebois 9c376119d0 cmake: changes required for qurt build
Fixed CMakeLists.txt to be consistent with module.mk
Converted PX4_TICKS_PER_SEC to define for QURT to get around relocation error
Added stubs for QURT so building a full executable can be tested. This will
enable CI testing without the full Hexagon SDK.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-09 13:24:29 -07:00
Mark Charlebois b561215017 cmake: fixes for apps.h generation for posix and qurt
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 19:17:53 -07:00
Mark Charlebois dbc60d99c5 cmake: qurt fix to build shared lib, not executable
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 18:50:11 -07:00
Mark Charlebois 75f1f91784 cmake qurt and posix fixes for cmake
Added generation of build_git_version.h

Added separate src/lib/eigen-3.2 dir for qurt (new submodule)

Added patching of eigen-3.2 for qurt (compiler has issue with Complex)

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 18:39:51 -07:00
Mark Charlebois e82ea34e51 Changed builtin_commands.cpp_stub to builtin_commands.cpp_in
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 14:19:29 -07:00
Mark Charlebois c16c6a00e3 Clean up location of nuttx specific template
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 14:08:50 -07:00
Mark Charlebois eb40a6de77 cmake: qurt modules now build but do not link
Managed to get the deps set up to build the qurt modules using a
config file for the list of modules.

NuttX link options are being set somewhere that break the qurt build

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 14:07:43 -07:00
Mark Charlebois 0de5868ee2 More qurt support
The current approach of distributing submodule inclusion logic makes
evert parent dir need to know about all build targets.

This approach goes back to the previous way of centralizing the build
dirs in a single file.

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
2015-09-08 14:06:55 -07:00
James Goppert 34f00ede4d Merge. 2015-09-08 04:20:48 -04:00
James Goppert 1d6b31d196 Switch to cmake build system. 2015-09-07 20:37:45 -04:00