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_jmavsim PATH "${PX4_SOURCE_DIR}/Tools/jMAVSim") # Add support for external project building include(ExternalProject) include(ProcessorCount) set(build_cores 1) ProcessorCount(N) if(N GREATER_EQUAL 4) math(EXPR build_cores "${N} - 2") endif() # project to build sitl_gazebo if necessary px4_add_git_submodule(TARGET git_gazebo PATH "${PX4_SOURCE_DIR}/Tools/sitl_gazebo") 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 -- -j ${build_cores} ) 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 ) px4_add_git_submodule(TARGET git_flightgear_bridge PATH "${PX4_SOURCE_DIR}/Tools/flightgear_bridge") 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 ) px4_add_git_submodule(TARGET git_jsbsim_bridge PATH "${PX4_SOURCE_DIR}/Tools/jsbsim_bridge") ExternalProject_Add(jsbsim_bridge SOURCE_DIR ${PX4_SOURCE_DIR}/Tools/jsbsim_bridge CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} BINARY_DIR ${PX4_BINARY_DIR}/build_jsbsim_bridge INSTALL_COMMAND "" DEPENDS git_jsbsim_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 gdb lldb valgrind callgrind ) set(models none boat cloudship if750a iris iris_ctrlalloc iris_dual_gps iris_irlock iris_obs_avoid iris_opt_flow iris_opt_flow_mockup iris_rplidar iris_rtps px4vision iris_vision nxp_cupcar plane plane_cam plane_catapult plane_lidar r1_rover rover shell solo standard_vtol tailsitter techpod tiltrotor typhoon_h480 uuv_bluerov2_heavy uuv_hippocampus ) set(worlds none baylands empty ksql_airport mcmillan_airfield sonoma_raceway warehouse windy yosemite ) 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() # create targets for jsbsim set(models_jsbsim none rascal quadrotor_x hexarotor_x malolo ) set(worlds_jsbsim none LSZH ) foreach(debugger ${debuggers}) foreach(model ${models_jsbsim}) foreach(world ${worlds_jsbsim}) if(world STREQUAL "none") if(debugger STREQUAL "none") if(model STREQUAL "none") set(_targ_name "jsbsim") else() set(_targ_name "jsbsim_${model}") endif() else() if(model STREQUAL "none") set(_targ_name "jsbsim__${debugger}_${world}") else() set(_targ_name "jsbsim_${model}_${debugger}_${world}") endif() endif() add_custom_target(${_targ_name} COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh $ ${debugger} jsbsim ${model} "LSZH" ${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 jsbsim_bridge) else() if(debugger STREQUAL "none") if(model STREQUAL "none") set(_targ_name "jsbsim___${world}") else() set(_targ_name "jsbsim_${model}__${world}") endif() else() if(model STREQUAL "none") set(_targ_name "jsbsim___${debugger}_${world}") else() set(_targ_name "jsbsim_${model}_${debugger}_${world}") endif() endif() add_custom_target(${_targ_name} COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh $ ${debugger} jsbsim ${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 jsbsim_bridge) endif() 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 )