diff --git a/.gitmodules b/.gitmodules index cb9a6ccf05..9db1631350 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "src/lib/dspal"] path = src/lib/dspal url = https://github.com/mcharleb/dspal.git +[submodule "src/lib/eigen-3.2"] + path = src/lib/eigen-3.2 + url = https://github.com/PX4/eigen.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 58731547b9..11b0e4fde5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,12 +175,16 @@ endforeach() #============================================================================= # git # -px4_add_git_submodule(TARGET git_nuttx PATH "NuttX") +if (${OS} STREQUAL "nuttx") + px4_add_git_submodule(TARGET git_nuttx PATH "NuttX") +endif() px4_add_git_submodule(TARGET git_genmsg PATH "Tools/genmsg") px4_add_git_submodule(TARGET git_gencpp PATH "Tools/gencpp") px4_add_git_submodule(TARGET git_mavlink PATH "mavlink/include/mavlink/v1.0") px4_add_git_submodule(TARGET git_gtest PATH "unittets/gtest") -px4_add_git_submodule(TARGET git_eigen PATH "src/lib/eigen") +if (NOT ${OS} STREQUAL "qurt") + px4_add_git_submodule(TARGET git_eigen PATH "src/lib/eigen") +endif() add_custom_target(submodule_clean WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} @@ -233,6 +237,12 @@ add_subdirectory(src) # set the overall objective of the build add_custom_target(ALL firmware_${OS}) +#============================================================================= +# generate git version +# +include(px4_git_hash) +px4_create_git_hash_header(HEADER ${CMAKE_BINARY_DIR}/build_git_version.h) + #============================================================================= # packaging # diff --git a/cmake/build_git_version.h.in b/cmake/build_git_version.h.in new file mode 100644 index 0000000000..1d1adb9ba3 --- /dev/null +++ b/cmake/build_git_version.h.in @@ -0,0 +1,4 @@ +/* Auto Magically Generated file */ +/* Do not edit! */ +#define PX4_GIT_VERSION_STR @git_desc@ +#define PX4_GIT_VERSION_BINARY 0x@git_desc_short@ diff --git a/cmake/px4_base.cmake b/cmake/px4_base.cmake index 888011fe76..42d75c5b4b 100644 --- a/cmake/px4_base.cmake +++ b/cmake/px4_base.cmake @@ -581,13 +581,18 @@ function(px4_add_common_flags) # TODO Build/versioning was in Makefile, # do we need this, how does it work with cmake src/drivers/boards/${BOARD} - src/lib/eigen ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src/modules/px4_messages ${CMAKE_BINARY_DIR}/src/modules mavlink/include/mavlink ) + if (NOT ${OS} STREQUAL "qurt") + list(APPEND added_include_dirs + src/lib/eigen + ) + endif() + set(added_link_dirs) # none used currently string(TOUPPER ${BOARD} board_upper) diff --git a/cmake/px4_git_hash.cmake b/cmake/px4_git_hash.cmake new file mode 100644 index 0000000000..a3a29b2d14 --- /dev/null +++ b/cmake/px4_git_hash.cmake @@ -0,0 +1,31 @@ +#============================================================================= +# +# px4_create_git_hash_header +# +# Create a header file containing the git hash of the current tree +# +# Usage: +# px4_create_git_hash_header(HEADER ${CMAKE_BUILD_DIR}/git_hash.h) +# +# Input: +# HEADER : path of the header file to generate +# +# Example: +# px4_create_git_hash_header(HEADER ${CMAKE_BUILD_DIR}/git_hash.h) +# +function(px4_create_git_hash_header) + px4_parse_function_args( + NAME px4_create_git_hash_header + ONE_VALUE HEADER + REQUIRED HEADER + ARGN ${ARGN}) + execute_process( + COMMAND git log -n 1 --pretty=format:"%H" + OUTPUT_VARIABLE git_desc + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + message(STATUS "GIT_DESC = ${git_desc}") + set(git_desc_short) + string(SUBSTRING ${git_desc} 1 16 git_desc_short) + configure_file(${CMAKE_SOURCE_DIR}/cmake/build_git_version.h.in ${HEADER} @ONLY) +endfunction() diff --git a/cmake/qurt/px4_impl_qurt.cmake b/cmake/qurt/px4_impl_qurt.cmake index 1874787f57..44cce7599d 100644 --- a/cmake/qurt/px4_impl_qurt.cmake +++ b/cmake/qurt/px4_impl_qurt.cmake @@ -227,6 +227,9 @@ function(px4_os_prebuild_targets) REQUIRED OUT BOARD ARGN ${ARGN}) add_custom_target(${OUT}) + execute_process( + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/lib/eigen-3.2 + COMMAND patch -p1 -i ../../../cmake/qurt/qurt_eigen.patch) endfunction() #============================================================================= diff --git a/cmake/qurt/qurt_eigen.patch b/cmake/qurt/qurt_eigen.patch new file mode 100644 index 0000000000..9ea57403ba --- /dev/null +++ b/cmake/qurt/qurt_eigen.patch @@ -0,0 +1,17 @@ +This patch is required for QuRT. complex.h defines "I" and it replaces "I" in the +enum definition without this patch creating an error. + +diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h +index ef17f28..1116270 100644 +--- a/Eigen/src/Core/SolveTriangular.h ++++ b/Eigen/src/Core/SolveTriangular.h +@@ -112,6 +112,9 @@ template + struct triangular_solver_unroller; + ++#ifdef __PX4_QURT ++#undef I ++#endif + template + struct triangular_solver_unroller { + enum { diff --git a/src/include/build_git_version.h b/src/include/build_git_version.h deleted file mode 100644 index 35f139b386..0000000000 --- a/src/include/build_git_version.h +++ /dev/null @@ -1,2 +0,0 @@ -#define PX4_GIT_VERSION_STR "1234567890123456789012345678901234567890" -#define PX4_GIT_VERSION_BINARY 0x1234567890123456 diff --git a/src/lib/eigen-3.2 b/src/lib/eigen-3.2 new file mode 160000 index 0000000000..e7850ed81f --- /dev/null +++ b/src/lib/eigen-3.2 @@ -0,0 +1 @@ +Subproject commit e7850ed81f9c469e02df496ef09ae32ec0379b71