diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a5f8b4790..51927e1755 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -271,6 +271,10 @@ px4_generate_messages(TARGET msg_gen OS ${OS} DEPENDS git_genmsg git_gencpp ) +px4_generate_parameters_xml(OUT parameters.xml BOARD ${BOARD}) +px4_generate_airframes_xml(OUT airframes.xml BOARD ${BOARD}) +add_custom_target(xml_gen + DEPENDS parameters.xml airframes.xml) #============================================================================= # external projects diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index c3a07df882..797cb14fc1 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -706,24 +706,62 @@ endfunction() #============================================================================= # -# px4_generate_parameters +# px4_generate_parameters_xml +# +# Generates a parameters.xml file. +# +# Usage: +# px4_generate_parameters_xml(OUT ) +# +# Input: +# BOARD : the board +# +# Output: +# OUT : the generated xml file +# +# Example: +# px4_generate_parameters_xml(OUT parameters.xml) +# +function(px4_generate_parameters_xml) + px4_parse_function_args( + NAME px4_generate_parameters_xml + ONE_VALUE OUT BOARD + REQUIRED OUT BOARD + ARGN ${ARGN}) + set(path ${CMAKE_SOURCE_DIR}/src) + file(GLOB_RECURSE param_src_files ${path}/*.h* ${path}/*.c*) + add_custom_command(OUTPUT ${OUT} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_process_params.py + -s ${path} --board CONFIG_ARCH_${BOARD} --xml + DEPENDS ${param_src_files} + ) + set(${OUT} ${${OUT}} PARENT_SCOPE) +endfunction() + +#============================================================================= +# +# px4_generate_parameters_source # # Generates a source file with all parameters. # # Usage: -# px4_generate_parameters(OUT ) +# px4_generate_parameters_source(OUT XML ) +# +# Input: +# XML : the parameters.xml file +# DEPS : target dependencies # # Output: -# OUT : the generate source files +# OUT : the generated source files # # Example: -# px4_generate_parameters(OUT parameters.c) +# px4_generate_parameters_source(OUT param_files XML parameters.xml) # -function(px4_generate_parameters) +function(px4_generate_parameters_source) px4_parse_function_args( - NAME px4_generate_parameters - ONE_VALUE OUT - REQUIRED OUT + NAME px4_generate_parameters_source + ONE_VALUE OUT XML DEPS + REQUIRED OUT XML ARGN ${ARGN}) set(generated_files ${CMAKE_CURRENT_BINARY_DIR}/px4_parameters.h @@ -731,14 +769,46 @@ function(px4_generate_parameters) set_source_files_properties(${generated_files} PROPERTIES GENERATED TRUE) add_custom_command(OUTPUT ${generated_files} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_process_params.py - -s ${CMAKE_SOURCE_DIR}/src --board CONFIG_ARCH_${BOARD} --xml - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_generate_params.py - parameters.xml + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_generate_params.py ${XML} + DEPENDS ${XML} ${DEPS} ) set(${OUT} ${generated_files} PARENT_SCOPE) endfunction() +#============================================================================= +# +# px4_generate_airframes_xml +# +# Generates airframes.xml +# +# Usage: +# px4_generate_airframes_xml(OUT ) +# +# Input: +# XML : the airframes.xml file +# BOARD : the board +# +# Output: +# OUT : the generated source files +# +# Example: +# px4_generate_airframes_xml(OUT airframes.xml) +# +function(px4_generate_airframes_xml) + px4_parse_function_args( + NAME px4_generate_airframes_xml + ONE_VALUE OUT BOARD + REQUIRED OUT BOARD + ARGN ${ARGN}) + set(process_airframes ${CMAKE_SOURCE_DIR}/Tools/px_process_airframes.py) + add_custom_command(OUTPUT ${OUT} + COMMAND ${PYTHON_EXECUTABLE} ${process_airframes} + -a ${CMAKE_SOURCE_DIR}/ROMFS/px4fmu_common/init.d + --board CONFIG_ARCH_BOARD_${BOARD} --xml + ) + set(${OUT} ${${OUT}} PARENT_SCOPE) +endfunction() + #============================================================================= # # px4_copy_tracked diff --git a/cmake/configs/nuttx_px4fmu-v1_default.cmake b/cmake/configs/nuttx_px4fmu-v1_default.cmake index 5cd4756519..c8a178400a 100644 --- a/cmake/configs/nuttx_px4fmu-v1_default.cmake +++ b/cmake/configs/nuttx_px4fmu-v1_default.cmake @@ -152,10 +152,6 @@ set(config_module_list #examples/hwtest ) -set(config_firmware_options - PARAM_XML # generate param xml - ) - set(config_extra_builtin_cmds serdis sercon diff --git a/cmake/configs/nuttx_px4fmu-v2_default.cmake b/cmake/configs/nuttx_px4fmu-v2_default.cmake index 51bdf151a5..fec5f06370 100644 --- a/cmake/configs/nuttx_px4fmu-v2_default.cmake +++ b/cmake/configs/nuttx_px4fmu-v2_default.cmake @@ -156,10 +156,6 @@ set(config_module_list #examples/hwtest ) -set(config_firmware_options - PARAM_XML # generate param xml - ) - set(config_extra_builtin_cmds serdis sercon diff --git a/cmake/configs/nuttx_px4fmu-v2_simple.cmake b/cmake/configs/nuttx_px4fmu-v2_simple.cmake index b1708cfc22..070fbd703f 100644 --- a/cmake/configs/nuttx_px4fmu-v2_simple.cmake +++ b/cmake/configs/nuttx_px4fmu-v2_simple.cmake @@ -117,10 +117,6 @@ set(config_module_list examples/hwtest ) -set(config_firmware_options - PARAM_XML # generate param xml - ) - set(config_extra_builtin_cmds serdis sercon diff --git a/cmake/configs/nuttx_sim_simple.cmake b/cmake/configs/nuttx_sim_simple.cmake index a00b781a75..068c6409f2 100644 --- a/cmake/configs/nuttx_sim_simple.cmake +++ b/cmake/configs/nuttx_sim_simple.cmake @@ -17,9 +17,5 @@ set(config_module_list #lib/conversion ) -set(config_firmware_options - PARAM_XML # generate param xml - ) - set(config_extra_builtin_cmds ) diff --git a/cmake/configs/posix_sitl_simple.cmake b/cmake/configs/posix_sitl_simple.cmake index 90fc72ce1c..227bffeab8 100644 --- a/cmake/configs/posix_sitl_simple.cmake +++ b/cmake/configs/posix_sitl_simple.cmake @@ -57,11 +57,6 @@ set(config_module_list lib/launchdetection ) - -set(config_firmware_options - PARAM_XML # generate param xml - ) - set(config_extra_builtin_cmds serdis sercon diff --git a/cmake/nuttx/px4_impl_nuttx.cmake b/cmake/nuttx/px4_impl_nuttx.cmake index add952a49b..89ec3d44c2 100644 --- a/cmake/nuttx/px4_impl_nuttx.cmake +++ b/cmake/nuttx/px4_impl_nuttx.cmake @@ -57,14 +57,14 @@ include(common/px4_base) # This function adds a nuttx firmware target. # # Usage: -# px4_nuttx_add_firmware(OUT EXE ) +# px4_nuttx_add_firmware(OUT EXE +# PARAM_XML AIRFRAMES_XML ) # # Input: # EXE : the executable to generate the firmware from # BOARD : the board -# -# Options: -# PARAM_XML : toggles generation of param_xml +# PARAM_XML : param xml file (optional) +# AIRFRAMES_XML : airframes xml file (optional) # # Output: # OUT : the generated firmware target @@ -75,43 +75,33 @@ include(common/px4_base) function(px4_nuttx_add_firmware) px4_parse_function_args( NAME px4_nuttx_add_firmware - ONE_VALUE BOARD OUT EXE - OPTIONS PARAM_XML + ONE_VALUE BOARD OUT EXE PARAM_XML AIRFRAMES_XML REQUIRED OUT EXE BOARD ARGN ${ARGN}) - set(process_params ${CMAKE_SOURCE_DIR}/Tools/px_process_params.py) - set(process_airframes ${CMAKE_SOURCE_DIR}/Tools/px_process_airframes.py) + set(extra_args) - - #TODO handle param_xml - if(PARAM_XML) - add_custom_command(OUTPUT ${OUT} - COMMAND ${PYTHON_EXECUTABLE} ${process_params} - --src-path ${CMAKE_SOURCE_DIR}/src - --board CONFIG_ARCH_BOARD_${BOARD} --xml - COMMAND ${PYTHON_EXECUTABLE} ${process_airframes} - -a ${CMAKE_SOURCE_DIR}/ROMFS/px4fmu_common/init.d - --board CONFIG_ARCH_BOARD_${BOARD} --xml - COMMAND ${OBJCOPY} -O binary ${EXE} ${EXE}.bin - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_mkfw.py - --prototype ${CMAKE_SOURCE_DIR}/Images/${BOARD}.prototype - --git_identity ${CMAKE_SOURCE_DIR} - --parameter_xml parameters.xml - --airframe_xml airframes.xml - --image ${EXE}.bin > ${OUT} - DEPENDS ${EXE} - ) - else() - add_custom_command(OUTPUT ${OUT} - COMMAND ${OBJCOPY} -O binary ${EXE} ${EXE}.bin - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_mkfw.py - --prototype ${CMAKE_SOURCE_DIR}/Images/${BOARD}.prototype - --git_identity ${CMAKE_SOURCE_DIR} - --image ${EXE}.bin > ${OUT} - DEPENDS ${EXE} + if (PARAM_XML) + list(APPEND extra_args + --parameter_xml ${PARAM_XML} ) endif() + + if (AIRFRAMES_XML) + list(APPEND extra_args + --airframe_xml ${AIRFRAMES_XML} + ) + endif() + + add_custom_command(OUTPUT ${OUT} + COMMAND ${OBJCOPY} -O binary ${EXE} ${EXE}.bin + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Tools/px_mkfw.py + --prototype ${CMAKE_SOURCE_DIR}/Images/${BOARD}.prototype + --git_identity ${CMAKE_SOURCE_DIR} + ${extra_args} + --image ${EXE}.bin > ${OUT} + DEPENDS ${EXE} + ) add_custom_target(build_firmware_${BOARD} ALL DEPENDS ${OUT}) endfunction() diff --git a/src/firmware/nuttx/CMakeLists.txt b/src/firmware/nuttx/CMakeLists.txt index 8767f3fde5..c13183ba16 100644 --- a/src/firmware/nuttx/CMakeLists.txt +++ b/src/firmware/nuttx/CMakeLists.txt @@ -57,7 +57,8 @@ if(NOT ${BOARD} STREQUAL "sim") px4_nuttx_add_firmware(OUT ${fw_file} BOARD ${BOARD} EXE ${CMAKE_CURRENT_BINARY_DIR}/firmware_nuttx - ${config_firmware_options} + PARAM_XML ${CMAKE_BINARY_DIR}/parameters.xml + AIRFRAMES_XML ${CMAKE_BINARY_DIR}/airframes.xml ) configure_file(gdbinit.in .gdbinit) diff --git a/src/modules/param/CMakeLists.txt b/src/modules/param/CMakeLists.txt index 4e15ca6e5a..64bff2a0e1 100644 --- a/src/modules/param/CMakeLists.txt +++ b/src/modules/param/CMakeLists.txt @@ -33,17 +33,16 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) -px4_generate_parameters(OUT param_files) - -set(srcs - ${param_files} +px4_generate_parameters_source(OUT param_files + XML ${CMAKE_BINARY_DIR}/parameters.xml + DEPS xml_gen ) px4_add_module( MODULE modules__param COMPILE_FLAGS -Os - SRCS ${srcs} + SRCS ${param_files} DEPENDS platforms__common )