diff --git a/CMakeLists.txt b/CMakeLists.txt index 04efb3c89c..041966b1d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,7 @@ project(px4 CXX C ASM) if (NOT ${CMAKE_VERSION} VERSION_LESS 3.0.0) cmake_policy(SET CMP0045 NEW) # error on non-existent target in get prop cmake_policy(SET CMP0046 NEW) # no non-existent targets as dependencies + cmake_policy(SET CMP0054 NEW) # don't dereference quoted variables endif() set(version_major 1) @@ -155,7 +156,7 @@ list(GET config_args 0 OS) list(GET config_args 1 BOARD) list(GET config_args 2 LABEL) -message(STATUS "TARGET: OS(${OS})-BOARD(${BOARD})-LABEL(${LABEL})") +message(STATUS "OS=${OS} BOARD=${BOARD} LABEL=${LABEL}") #============================================================================= # programs diff --git a/Makefile b/Makefile index 97551cb68b..e5d4dc01af 100644 --- a/Makefile +++ b/Makefile @@ -54,13 +54,14 @@ # rest are arguments to pass to the makefile generated # by cmake in the subdirectory ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) +j ?= 1 # Functions # -------------------------------------------------------------------- # define a make function to describe how to build a cmake config define cmake-build -mkdir -p $(PWD)/build_$@ && cd $(PWD)/build_$@ && cmake .. -DCONFIG=$(1) -make -C $(PWD)/build_$@ -s $(ARGS) ++mkdir -p $(PWD)/build_$@ && cd $(PWD)/build_$@ && cmake .. -DCONFIG=$(1) ++make -C $(PWD)/build_$@ --no-print-directory $(ARGS) endef diff --git a/Tools/px_generate_params.py b/Tools/px_generate_params.py index b468867523..c73b842875 100755 --- a/Tools/px_generate_params.py +++ b/Tools/px_generate_params.py @@ -82,12 +82,12 @@ src += """ }; #ifdef __PX4_DARWIN -#define ___param__attributes ; +#define ___param__attributes #else -#define ___param__attributes __attribute__((alias("px4_parameters_impl"))); +#define ___param__attributes __attribute__((alias("px4_parameters_impl"))) #endif -extern const struct px4_parameters_t px4_parameters ___param__attributes +extern const struct px4_parameters_t px4_parameters ___param__attributes; """ % i fp_header.write(header) diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index 4b42f388cf..66be1acbe5 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -254,30 +254,45 @@ endfunction() # ) # function(px4_add_module) + px4_parse_function_args( NAME px4_add_module ONE_VALUE MODULE MAIN STACK PRIORITY MULTI_VALUE COMPILE_FLAGS LINK_FLAGS SRCS INCLUDES DEPENDS REQUIRED MODULE ARGN ${ARGN}) + add_library(${MODULE} STATIC EXCLUDE_FROM_ALL ${SRCS}) + + if(MAIN) + set_target_properties(${MODULE} PROPERTIES + COMPILE_DEFINITIONS PX4_MAIN=${MAIN}_app_main) + endif() + if(INCLUDES) target_include_directories(${MODULE} ${INCLUDES}) endif() + if(DEPENDS) add_dependencies(${MODULE} ${DEPENDS}) endif() + + # join list variables to get ready to send to compiler foreach(prop LINK_FLAGS COMPILE_FLAGS) if(${prop}) px4_join(OUT ${prop} LIST ${${prop}} GLUE " ") endif() endforeach() - foreach (prop STACK MAIN COMPILE_FLAGS LINK_FLAGS PRIORITY) + + # store module properties in target + # COMPILE_FLAGS and LINK_FLAGS are passed to compiler/linker by cmake + # STACK, MAIN, PRIORITY are PX4 specific + foreach (prop COMPILE_FLAGS LINK_FLAGS STACK MAIN PRIORITY) if (${prop}) - set_target_properties(${MODULE} PROPERTIES "${prop}" "${${prop}}") + set_target_properties(${MODULE} PROPERTIES ${prop} ${${prop}}) endif() endforeach() - set_target_properties(${MODULE} PROPERTIES LINK_INTERFACE_MULTIPLICITY 4) + endfunction() #============================================================================= diff --git a/cmake/configs/nuttx_px4fmu-v2_default.cmake b/cmake/configs/nuttx_px4fmu-v2_default.cmake index 4ba1792a41..a092466010 100644 --- a/cmake/configs/nuttx_px4fmu-v2_default.cmake +++ b/cmake/configs/nuttx_px4fmu-v2_default.cmake @@ -165,8 +165,8 @@ set(config_firmware_options ) set(config_extra_builtin_cmds - serdis_main - sercon_main + serdis + sercon ) add_custom_target(sercon) diff --git a/cmake/configs/nuttx_px4fmu-v2_simple.cmake b/cmake/configs/nuttx_px4fmu-v2_simple.cmake index d3ee36d1e0..ddd639ac5a 100644 --- a/cmake/configs/nuttx_px4fmu-v2_simple.cmake +++ b/cmake/configs/nuttx_px4fmu-v2_simple.cmake @@ -122,8 +122,8 @@ set(config_firmware_options ) set(config_extra_builtin_cmds - serdis_main - sercon_main + serdis + sercon ) add_custom_target(sercon) diff --git a/cmake/configs/nuttx_sim_simple.cmake b/cmake/configs/nuttx_sim_simple.cmake index 0721df5a52..a777e915f9 100644 --- a/cmake/configs/nuttx_sim_simple.cmake +++ b/cmake/configs/nuttx_sim_simple.cmake @@ -22,8 +22,8 @@ set(config_firmware_options ) set(config_extra_builtin_cmds - serdis_main - sercon_main + serdis + sercon ) add_custom_target(sercon) diff --git a/cmake/configs/posix_eagle_default.cmake b/cmake/configs/posix_eagle_default.cmake index 8bee815a8b..36c787edca 100644 --- a/cmake/configs/posix_eagle_default.cmake +++ b/cmake/configs/posix_eagle_default.cmake @@ -8,7 +8,7 @@ set(config_module_list drivers/pwm_out_sim drivers/rgbled drivers/led - modules/sensors + drivers/boards/sitl systemcmds/param systemcmds/mixer @@ -38,6 +38,7 @@ set(config_module_list lib/geo_lookup lib/conversion + platforms/common platforms/posix/px4_layer platforms/posix/work_queue ) diff --git a/cmake/configs/posix_eagle_hil.cmake b/cmake/configs/posix_eagle_hil.cmake index fc771f3d89..c4e5375766 100644 --- a/cmake/configs/posix_eagle_hil.cmake +++ b/cmake/configs/posix_eagle_hil.cmake @@ -1,5 +1,10 @@ include(posix/px4_impl_posix) +# Use build stubs unless explicitly set not to +if("${DSPAL_STUBS_ENABLE}" STREQUAL "") + set(DSPAL_STUBS_ENABLE "1") +endif() + set(CMAKE_TOOLCHAIN_FILE cmake/toolchains/Toolchain-arm-linux-gnueabihf.cmake) set(config_module_list @@ -26,6 +31,7 @@ set(config_module_list lib/geo_lookup lib/conversion + platforms/common platforms/posix/px4_layer platforms/posix/work_queue modules/muorb/krait diff --git a/cmake/configs/posix_eagle_release.cmake b/cmake/configs/posix_eagle_release.cmake index cb3019ae2b..36a9ad1be3 100644 --- a/cmake/configs/posix_eagle_release.cmake +++ b/cmake/configs/posix_eagle_release.cmake @@ -1,5 +1,10 @@ include(posix/px4_impl_posix) +# Use build stubs unless explicitly set not to +if("${DSPAL_STUBS_ENABLE}" STREQUAL "") + set(DSPAL_STUBS_ENABLE "1") +endif() + set(CMAKE_TOOLCHAIN_FILE cmake/toolchains/Toolchain-arm-linux-gnueabihf.cmake) set(config_module_list @@ -20,6 +25,7 @@ set(config_module_list lib/geo_lookup lib/conversion + platforms/common platforms/posix/px4_layer platforms/posix/work_queue diff --git a/cmake/configs/posix_sitl_simple.cmake b/cmake/configs/posix_sitl_simple.cmake index a00e79743e..10a02fa89f 100644 --- a/cmake/configs/posix_sitl_simple.cmake +++ b/cmake/configs/posix_sitl_simple.cmake @@ -60,8 +60,8 @@ set(config_firmware_options ) set(config_extra_builtin_cmds - serdis_main - sercon_main + serdis + sercon ) add_custom_target(sercon) diff --git a/cmake/configs/qurt_eagle_hello.cmake b/cmake/configs/qurt_eagle_hello.cmake index 43db471f69..9076ec7511 100644 --- a/cmake/configs/qurt_eagle_hello.cmake +++ b/cmake/configs/qurt_eagle_hello.cmake @@ -24,10 +24,4 @@ set(config_module_list platforms/posix/work_queue platforms/qurt/tests/hello ) - set(${out_module_list} ${config_module_list} PARENT_SCOPE) - - # output - set(${OUT_MODULES} ${config_module_list} PARENT_SCOPE) - -endfunction() diff --git a/cmake/configs/qurt_eagle_test.cmake b/cmake/configs/qurt_eagle_test.cmake index 501c7fbeb8..c25191f5b9 100644 --- a/cmake/configs/qurt_eagle_test.cmake +++ b/cmake/configs/qurt_eagle_test.cmake @@ -14,7 +14,7 @@ set(config_module_list # Library modules # modules/systemlib - modules/mixer + modules/systemlib/mixer modules/uORB # @@ -31,8 +31,8 @@ set(config_module_list platforms/qurt/px4_layer platforms/posix/work_queue platforms/qurt/tests/hello - platforms/qurt/tests/vcdev_test - platforms/qurt/tests/hrt_test - platforms/qurt/tests/wqueue + platforms/posix/tests/vcdev_test + platforms/posix/tests/hrt_test + platforms/posix/tests/wqueue ) diff --git a/cmake/configs/qurt_eagle_travis.cmake b/cmake/configs/qurt_eagle_travis.cmake index 61b171d14d..ab766f189c 100644 --- a/cmake/configs/qurt_eagle_travis.cmake +++ b/cmake/configs/qurt_eagle_travis.cmake @@ -1,7 +1,7 @@ include(qurt/px4_impl_qurt) # Run a full link with build stubs to make sure qurt target isn't broken -set(QURT_ENABLE_STUBS 1) +set(QURT_ENABLE_STUBS "1") set(CMAKE_TOOLCHAIN_FILE cmake/toolchains/Toolchain-hexagon.cmake) diff --git a/cmake/nuttx/px4_impl_nuttx.cmake b/cmake/nuttx/px4_impl_nuttx.cmake index 6c2dbaf25a..15a304fdb9 100644 --- a/cmake/nuttx/px4_impl_nuttx.cmake +++ b/cmake/nuttx/px4_impl_nuttx.cmake @@ -291,21 +291,23 @@ function(px4_nuttx_generate_romfs) set(romfs_pruner ${CMAKE_SOURCE_DIR}/Tools/px_romfs_pruner.py) set(bin_to_obj ${CMAKE_SOURCE_DIR}/cmake/nuttx/bin_to_obj.py) - #message(STATUS "temp_dir: ${romfs_temp_dir}") #message(STATUS "src_dir: ${romfs_src_dir}") add_custom_command(OUTPUT rc.autostart COMMAND ${PYTHON_EXECUTABLE} ${romfs_autostart} - -a ${romfs_src_dir}/init.d/ + -a ${romfs_src_dir}/init.d -s rc.autostart ) add_custom_command(OUTPUT romfs.bin COMMAND cmake -E remove_directory ${romfs_temp_dir} COMMAND cmake -E copy_directory ${romfs_src_dir} ${romfs_temp_dir} - COMMAND cmake -E copy rc.autostart ${romfs_temp_dir}/init.d - #TODO add romfs cleanup and pruning + # TODO XXX hack to get nsh to work, copying real + # autostart in currently makes nsh fail over usb + COMMAND cmake -E touch ${romfs_temp_dir}/init.d/rc.autostart + #COMMAND cmake -E copy rc.autostart ${romfs_temp_dir}/init.d + #TODO add romfs cleanup of temp file .~, .swp etc COMMAND ${PYTHON_EXECUTABLE} ${romfs_pruner} --folder ${romfs_temp_dir} COMMAND ${GENROMFS} -f ${CMAKE_CURRENT_BINARY_DIR}/romfs.bin diff --git a/src/firmware/nuttx/CMakeLists.txt b/src/firmware/nuttx/CMakeLists.txt index 13118146f5..83d4a8ea14 100644 --- a/src/firmware/nuttx/CMakeLists.txt +++ b/src/firmware/nuttx/CMakeLists.txt @@ -2,7 +2,7 @@ px4_nuttx_generate_builtin_commands( OUT builtin_commands.c MODULE_LIST ${module_libraries} - ${config_extra_builtins_cmds} + ${config_extra_builtin_cmds} ) px4_nuttx_generate_romfs(OUT romfs.o @@ -11,7 +11,7 @@ px4_nuttx_generate_romfs(OUT romfs.o px4_generate_parameters() # add executable -add_executable(firmware_nuttx builtin_commands.c romfs.o) +add_executable(firmware_nuttx builtin_commands.c ${CMAKE_BINARY_DIR}/px4_parameters.c romfs.o) set(nuttx_export_dir ${CMAKE_BINARY_DIR}/${BOARD}/NuttX/nuttx-export) set(main_link_flags "-T${nuttx_export_dir}/build/ld.script" diff --git a/src/firmware/qurt/CMakeLists.txt b/src/firmware/qurt/CMakeLists.txt index 8e8b3ea7f5..b4271ee12e 100644 --- a/src/firmware/qurt/CMakeLists.txt +++ b/src/firmware/qurt/CMakeLists.txt @@ -20,19 +20,15 @@ px4_generate_parameters() if ("${QURT_ENABLE_STUBS}" STREQUAL "1") add_executable(mainapp ${CMAKE_SOURCE_DIR}/src/platforms/qurt/dspal/dspal_stub.c + ${CMAKE_BINARY_DIR}/px4_parameters.c ${CMAKE_BINARY_DIR}/apps.h) else("${QURT_ENABLE_STUBS}" STREQUAL "1") add_library(mainapp ${CMAKE_SOURCE_DIR}/src/platforms/qurt/dspal/dspal_stub.c + ${CMAKE_BINARY_DIR}/px4_parameters.c ${CMAKE_BINARY_DIR}/apps.h) endif() -set(main_link_flags - "-T${CMAKE_SOURCE_DIR}/cmake/posix/ld.script" - ) -px4_join(OUT main_link_flags LIST ${main_link_flags} GLUE " ") -set_target_properties(mainapp PROPERTIES LINK_FLAGS ${main_link_flags}) - target_link_libraries(mainapp -Wl,--whole-archive ${module_libraries} diff --git a/src/modules/muorb/krait-stubs/px4muorb_KraitRpcWrapper.hpp b/src/modules/muorb/krait-stubs/px4muorb_KraitRpcWrapper.hpp new file mode 100644 index 0000000000..d6feab2a47 --- /dev/null +++ b/src/modules/muorb/krait-stubs/px4muorb_KraitRpcWrapper.hpp @@ -0,0 +1,76 @@ +/**************************************************************************** + * + * Copyright (C) 2015 Mark Charlebois. All rights reserved. + * + * 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 PX4 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. + * + ****************************************************************************/ +#ifndef _px4muorb_KraitRpcWrapper_hpp_ +#define _px4muorb_KraitRpcWrapper_hpp_ +#include + +namespace px4muorb +{ + class KraitRpcWrapper; +} + +class px4muorb::KraitRpcWrapper +{ +public: + /** + * Constructor + */ + KraitRpcWrapper() {} + + /** + * destructor + */ + ~KraitRpcWrapper() {} + + /** + * Initiatizes the rpc channel px4 muorb + */ + bool Initialize() { return true; } + + /** + * Terminate to clean up the resources. This should be called at program exit + */ + bool Terminate() { return true; } + + /** + * Muorb related functions to pub/sub of orb topic from krait to adsp + */ + int32_t AddSubscriber( const char* topic ) { return 1; } + int32_t RemoveSubscriber( const char* topic ) { return 1; } + int32_t SendData( const char* topic, int32_t length_in_bytes, const uint8_t* data ) { return 1; } + int32_t ReceiveData( int32_t* msg_type, char** topic, int32_t* length_in_bytes, uint8_t** data ) { return 1; } + int32_t IsSubscriberPresent( const char* topic, int32_t* status ) { return 1; } + int32_t ReceiveBulkData( uint8_t** bulk_data, int32_t* length_in_bytes, int32_t* topic_count ) { return 1; } + int32_t UnblockReceiveData() { return 1; } +}; +#endif // _px4muorb_KraitWrapper_hpp_ diff --git a/src/modules/muorb/krait/CMakeLists.txt b/src/modules/muorb/krait/CMakeLists.txt index 5bb0dd4f7d..1c1d6605ac 100644 --- a/src/modules/muorb/krait/CMakeLists.txt +++ b/src/modules/muorb/krait/CMakeLists.txt @@ -30,6 +30,10 @@ # POSSIBILITY OF SUCH DAMAGE. # ############################################################################ +if("${DSPAL_STUBS_ENABLE}" STREQUAL "1") + include_directories(../krait-stubs) +endif() + px4_add_module( MODULE modules__muorb__krait MAIN muorb diff --git a/src/modules/muorb/krait/muorb_main.cpp b/src/modules/muorb/krait/muorb_main.cpp index 3a320e6134..006870780c 100644 --- a/src/modules/muorb/krait/muorb_main.cpp +++ b/src/modules/muorb/krait/muorb_main.cpp @@ -32,7 +32,7 @@ ****************************************************************************/ #include -#include "uORBManager.hpp" +#include "modules/uORB/uORBManager.hpp" #include "uORBKraitFastRpcChannel.hpp" extern "C" { __EXPORT int muorb_main(int argc, char *argv[]); } diff --git a/src/modules/muorb/krait/uORBKraitFastRpcChannel.hpp b/src/modules/muorb/krait/uORBKraitFastRpcChannel.hpp index a2f6850cbe..0e8d82b44b 100644 --- a/src/modules/muorb/krait/uORBKraitFastRpcChannel.hpp +++ b/src/modules/muorb/krait/uORBKraitFastRpcChannel.hpp @@ -38,7 +38,7 @@ #include #include #include "uORB/uORBCommunicator.hpp" -#include +#include "px4muorb_KraitRpcWrapper.hpp" #include #include "drivers/drv_hrt.h" diff --git a/src/platforms/qurt/tests/muorb/muorb_test_example.cpp b/src/platforms/qurt/tests/muorb/muorb_test_example.cpp index 2628b56a3b..3b932b5f13 100644 --- a/src/platforms/qurt/tests/muorb/muorb_test_example.cpp +++ b/src/platforms/qurt/tests/muorb/muorb_test_example.cpp @@ -45,7 +45,7 @@ #include #include "uORB/topics/sensor_combined.h" #include "uORB/topics/pwm_input.h" -#include "uORB.h" +#include "modules/uORB/uORB.h" #include "px4_middleware.h" #include "px4_defines.h" #include