diff --git a/px4_setup/airframe_changes b/px4_setup/airframe_changes new file mode 100644 index 0000000..7d10795 --- /dev/null +++ b/px4_setup/airframe_changes @@ -0,0 +1,210 @@ +set(SITL_WORKING_DIR ${PX4_BINARY_DIR}/tmp) +file(MAKE_DIRECTORY ${SITL_WORKING_DIR}) +file(MAKE_DIRECTORY ${SITL_WORKING_DIR}/rootfs) + +# add a symlink to the logs dir to make it easier to find them +add_custom_command(OUTPUT ${PX4_BINARY_DIR}/logs + COMMAND ${CMAKE_COMMAND} -E create_symlink ${SITL_WORKING_DIR}/rootfs/log logs + WORKING_DIRECTORY ${PX4_BINARY_DIR}) +add_custom_target(logs_symlink DEPENDS ${PX4_BINARY_DIR}/logs) + +add_dependencies(px4 logs_symlink) + +add_custom_target(run_config + COMMAND Tools/sitl_run.sh + $ + ${config_sitl_debugger} + ${config_sitl_viewer} + ${config_sitl_model} + ${PX4_SOURCE_DIR} + ${PX4_BINARY_DIR} + WORKING_DIRECTORY ${SITL_WORKING_DIR} + USES_TERMINAL + DEPENDS px4 logs_symlink + ) + +px4_add_git_submodule(TARGET git_gazebo PATH "${PX4_SOURCE_DIR}/Tools/sitl_gazebo") +px4_add_git_submodule(TARGET git_jmavsim PATH "${PX4_SOURCE_DIR}/Tools/jMAVSim") +px4_add_git_submodule(TARGET git_flightgear_bridge PATH "${PX4_SOURCE_DIR}/Tools/flightgear_bridge") + +# Add support for external project building +include(ExternalProject) + +# project to build sitl_gazebo if necessary +ExternalProject_Add(sitl_gazebo + SOURCE_DIR ${PX4_SOURCE_DIR}/Tools/sitl_gazebo + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -DSEND_ODOMETRY_DATA=ON + BINARY_DIR ${PX4_BINARY_DIR}/build_gazebo + INSTALL_COMMAND "" + DEPENDS + git_gazebo + USES_TERMINAL_CONFIGURE true + USES_TERMINAL_BUILD true + EXCLUDE_FROM_ALL true + BUILD_ALWAYS 1 + BUILD_COMMAND ${CMAKE_COMMAND} --build -- -j2 +) + +ExternalProject_Add(mavsdk_tests + SOURCE_DIR ${PX4_SOURCE_DIR}/test/mavsdk_tests + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + BINARY_DIR ${PX4_BINARY_DIR}/mavsdk_tests + INSTALL_COMMAND "" + USES_TERMINAL_CONFIGURE true + USES_TERMINAL_BUILD true + EXCLUDE_FROM_ALL true + BUILD_ALWAYS 1 +) + +ExternalProject_Add(flightgear_bridge + SOURCE_DIR ${PX4_SOURCE_DIR}/Tools/flightgear_bridge + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + BINARY_DIR ${PX4_BINARY_DIR}/build_flightgear_bridge + INSTALL_COMMAND "" + DEPENDS + git_flightgear_bridge + USES_TERMINAL_CONFIGURE true + USES_TERMINAL_BUILD true + EXCLUDE_FROM_ALL true + BUILD_ALWAYS 1 +) + +# create targets for each viewer/model/debugger combination +set(viewers none jmavsim gazebo) +set(debuggers none ide gdb lldb ddd valgrind callgrind) +set(models none shell + if750a iris iris_dual_gps iris_opt_flow iris_opt_flow_mockup iris_vision iris_rplidar iris_irlock iris_obs_avoid iris_rtps px4vision solo typhoon_h480 + plane plane_cam plane_catapult plane_lidar + standard_vtol tailsitter tiltrotor + rover r1_rover boat cloudship spiri spiri_with_tether + uuv_hippocampus) +set(worlds none empty baylands ksql_airport mcmillan_airfield sonoma_raceway warehouse windy) +set(all_posix_vmd_make_targets) +foreach(viewer ${viewers}) + foreach(debugger ${debuggers}) + foreach(model ${models}) + foreach(world ${worlds}) + if (world STREQUAL "none") + if (debugger STREQUAL "none") + if (model STREQUAL "none") + set(_targ_name "${viewer}") + else() + set(_targ_name "${viewer}_${model}") + endif() + else() + if (model STREQUAL "none") + set(_targ_name "${viewer}___${debugger}") + else() + set(_targ_name "${viewer}_${model}_${debugger}") + endif() + endif() + + add_custom_target(${_targ_name} + COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh + $ + ${debugger} + ${viewer} + ${model} + ${world} + ${PX4_SOURCE_DIR} + ${PX4_BINARY_DIR} + WORKING_DIRECTORY ${SITL_WORKING_DIR} + USES_TERMINAL + DEPENDS + logs_symlink + ) + list(APPEND all_posix_vmd_make_targets ${_targ_name}) + if (viewer STREQUAL "gazebo") + add_dependencies(${_targ_name} px4 sitl_gazebo) + elseif(viewer STREQUAL "jmavsim") + add_dependencies(${_targ_name} px4 git_jmavsim) + endif() + else() + if (viewer STREQUAL "gazebo") + if (debugger STREQUAL "none") + if (model STREQUAL "none") + set(_targ_name "${viewer}___${world}") + else() + set(_targ_name "${viewer}_${model}__${world}") + endif() + else() + if (model STREQUAL "none") + set(_targ_name "${viewer}__${debugger}_${world}") + else() + set(_targ_name "${viewer}_${model}_${debugger}_${world}") + endif() + endif() + + add_custom_target(${_targ_name} + COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh + $ + ${debugger} + ${viewer} + ${model} + ${world} + ${PX4_SOURCE_DIR} + ${PX4_BINARY_DIR} + WORKING_DIRECTORY ${SITL_WORKING_DIR} + USES_TERMINAL + DEPENDS + logs_symlink + ) + list(APPEND all_posix_vmd_make_targets ${_targ_name}) + add_dependencies(${_targ_name} px4 sitl_gazebo) + endif() + endif() + endforeach() + endforeach() + endforeach() +endforeach() + +#add flighgear targets +if( ENABLE_LOCKSTEP_SCHEDULER STREQUAL "no") + set(models + rascal + rascal-electric + tf-g1 + tf-r1 + ) + set(all_posix_vmd_make_targets) + + foreach(model ${models}) + set(_targ_name "flightgear_${model}") + add_custom_target(${_targ_name} + COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh + $ + none + flightgear + ${model} + none + ${PX4_SOURCE_DIR} + ${PX4_BINARY_DIR} + WORKING_DIRECTORY ${SITL_WORKING_DIR} + USES_TERMINAL + DEPENDS + logs_symlink + ) + + add_dependencies(${_targ_name} px4 flightgear_bridge) + list(APPEND all_posix_vmd_make_targets ${_targ_name}) + endforeach() +endif() + +string(REPLACE ";" "," posix_vmd_make_target_list "${all_posix_vmd_make_targets}") + +add_custom_target(list_vmd_make_targets + COMMAND sh -c "printf \"${posix_vmd_make_target_list}\\n\"" + COMMENT "List of acceptable '${PX4_BOARD}' targets:" + VERBATIM + ) + +# vscode launch.json +if(${PX4_BOARD_LABEL} MATCHES "replay") + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Debug/launch_replay.json.in ${PX4_SOURCE_DIR}/.vscode/launch.json COPYONLY) +else() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Debug/launch_sim.json.in ${PX4_SOURCE_DIR}/.vscode/launch.json COPYONLY) +endif() \ No newline at end of file